直接转换交错数组到2D阵列不反复的每个项目?(Convert a jagged array to a

2019-09-19 08:13发布

我想一个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范围要求范围的值作为阵列[,]但是我有数据表作为交错数组[] []。

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

是否有任何内置功能交错数组[] []直接转换为二维数组[] []? 通过Excel的迭代,数据表和分配似乎有大量的数据要慢..

此外,我不希望建立与DSN为Excel查询。我选择了Excel中存储,以避免任何数据库..的配置:PI发现的写数据的方法来这里练成了详细的解释.. HTTP://支持。 microsoft.com/kb/306023

Answer 1:

最后,我使用NPOI库这一点。 这是很简单,并且免费。 代码转换DataTable中脱颖而出如下。

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);
            }
        }


文章来源: Convert a jagged array to a 2D array directly without iterating each item?