如何将一个不规则数组直接转换为二维数组而无需迭代每个项?

5
我正在尝试将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();

有没有内置函数可以直接将不规则数组[][]转换为二维数组[][]? 当处理大量数据时,通过遍历Excel、DataTable并赋值似乎较慢。
此外,我不想为Excel设置DSN查询。我选择Excel存储是为了避免配置任何数据库... :P 在这里,我找到了一个详细的关于向Excel中写入数据的方法的解释。 http://support.microsoft.com/kb/306023

这个链接可能会有帮助:http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/5d525b76-f5b6-4340-a899-c3c82570d2e1 - lc.
谢谢您的回复。在我的情况下,数组类型是不同的,但我会尝试 :) - Sen Jacob
出现了一个异常,提示“指定的数组必须具有相同的维度。” 锯齿状数组大小显示为[80][],而数组大小显示为[80,12]。 锯齿状数组每行有12个项目,但仍然没有被检测为具有相同维度的数组。 - Sen Jacob
1
你可能需要迭代遍历每一行并逐个复制它们。或者,如果你知道锯齿数组中的每一行长度都相同(我认为你知道),你可以尝试使用SelectMany()将其展平成一个1D数组,然后复制到2D数组中?不确定是否能够成功。 - lc.
1个回答

0
最后我使用了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);
            }
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接