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

ギザギザの配列[][]を2D配列[][]に直接変換する組み込み関数はありますか? Excel、DataTable、および割り当てを反復処理すると、大量のデータを使用すると遅くなるようです..

また、Excel 用の DSN を使用したクエリをセットアップしたくありません。データベースの構成を避けるために Excel ストレージを選択しました。:PI は、Excel にデータを書き込む方法の詳細な説明を見つけました 。 microsoft.com/kb/306023

4

1 に答える 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);
            }
        }
于 2013-02-07T03:37:25.910 に答える