将锯齿状数组直接转换为2D数组而不迭代每个项目?

时间:2012-07-11 17:56:42

标签: c# multidimensional-array type-conversion export-to-excel jagged-arrays

我正在尝试将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存储以避免配置任何数据库..:P 我在这里找到了将数据写入excel的方法的详细说明。 http://support.microsoft.com/kb/306023

1 个答案:

答案 0 :(得分:0)

最后我使用了NPOI library。它非常简单而且免费。将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);
            }
        }