簡體   English   中英

將鋸齒狀數組直接轉換為2D數組而不迭代每個項目?

[英]Convert a jagged array to a 2D array directly without iterating each item?

我正在嘗試將DataTable保存到Excel工作表中..我的代碼是這樣的..

Excel.Range range = xlWorkSheet.get_Range("A2");
range = range.get_Resize(dtExcel.Rows.Count, dtExcel.Columns.Count);
object[,] rng1 = new object[dtExcel.Rows.Count, dtExcel.Columns.Count];

Excel范圍需要范圍值作為數組[,]但我將DataTable作為鋸齒數組[] []。

object[][] rng2 = dtExcel.AsEnumerable().Select(x => x.ItemArray).ToArray();

是否有任何內置函數可以將鋸齒狀數組[] []直接轉換為2D數組[] []? 通過Excel迭代,DataTable和分配對於批量數據來說似乎更慢。

此外,我不想設置使用DSN查詢excel ..我選擇了excel存儲以避免配置任何數據庫..:PI找到了有關將數據寫入excel的方法的詳細說明.. http:// support。 microsoft.com/kb/306023

最后我為此使用了NPOI庫 它非常簡單而且免費。 將DataTable轉換為excel的代碼如下。

HSSFWorkbook hssfworkbook = new HSSFWorkbook();
        foreach (DataTable dt in DataSource.Tables)
        {
            ISheet sheet1 = hssfworkbook.CreateSheet(dt.TableName);

            //Set column titles
            IRow headRow = sheet1.CreateRow(0); 
            for (int colNum = 0; colNum < dt.Columns.Count; colNum++)
            {
                ICell cell = headRow.CreateCell(colNum);
                cell.SetCellValue(dt.Columns[colNum].ColumnName);
            }

            //Set values in cells
            for (int rowNum = 1; rowNum <= dt.Rows.Count; rowNum++)
            {
                IRow row = sheet1.CreateRow(rowNum);
                for (int colNum = 0; colNum < dt.Columns.Count; colNum++)
                {
                    ICell cell = row.CreateCell(colNum);
                    cell.SetCellValue(dt.Rows[rowNum - 1][colNum].ToString());
                }
            }

            // Resize column width to show all data
            for (int colNum = 0; colNum < dt.Columns.Count; colNum++)
            {
                sheet1.AutoSizeColumn(colNum);
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM