4

我想数据表保存到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中存储,以避免任何数据库的配置...:P 我找到了详细的解释数据写入excel的方法。 http://support.microsoft.com/kb/306023

+0

http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/5d525b76-f5b6-4340-a899-c3c82570d2e1可能帮助 – 2012-07-11 18:02:06

+0

感谢您的答复..数组类型是不同的我的情况。但让我试试:) – 2012-07-11 18:06:27

+0

得到一个异常说'指定的数组必须具有相同的尺寸。' 锯齿形数组显示为[80] [],数组大小显示为[80,12]。锯齿阵列每行有12个项目,但它仍未检测为具有相同尺寸的阵列。 – 2012-07-11 18:22:52

回答

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