使用SpreadSheetGear使用NoColumnHeader非常快速地将DataTable复制到Excel中

时间:2014-11-12 07:20:27

标签: c# spreadsheetgear

我有一个包含30,000行和大约50列的表,我必须将所有这些数据复制到没有列标题的Excel表(.xlsm)中,但我目前的方法需要很长时间。这是我的代码,任何人都可以告诉我如何改进它以快速将数据填充到excel或任何其他方法

    string Sqlcmd;
    Sqlcmd = "select Number ,Name1, Name 2 from MyTempData";
    SqlCommand command = new SqlCommand(Sqlcmd, con);
    SqlDataAdapter a = new SqlDataAdapter(command);
    DataTable datatable = new DataTable();
    a.Fill(datatable);
    con.Close();
    string filename = "E:\\shared\\TotalInformation.xlsm";
    SpreadsheetGear.IWorkbook Myworkbook = SpreadsheetGear.Factory.GetWorkbook(filename);
    SpreadsheetGear.IWorksheet partnerdataSheet = Myworkbook.Worksheets["Total Information"];
    SpreadsheetGear.IRange partnerNumberCheckRange = Myworkbook.Names["rngCopyRow"].RefersToRange;
     partnerNumberCheckRange.CopyFromDataTable(datatable, SetDataFlags.InsertCells | SetDataFlags.NoColumnHeaders);    
     Myworkbook.SaveAs("D:\\Both.xlsm", SpreadsheetGear.FileFormat.OpenXMLWorkbookMacroEnabled);

1 个答案:

答案 0 :(得分:1)

我对大型Excel文件有过类似的体验。我还没有根据电子表格中的单元格数量对此进行量化,但是在文件大小方面(粗略地)< 1 MB文件大小=几秒钟,5 - 10 MB = 10 - 15秒,15 - 20 MB = 30 - 60秒。

SpreadhsheetGear将对此有一个答案,但从我可以看到所花费的时间与将电子表格文件作为实例加载的时间相关,而不是特定操作的特定读/写时间。在您的情况下,考虑到表的大小,很可能是加载数据的时间。

我的建议是测试各种表/文件大小,以确定特定数据类型的大小和速度之间的关系。

替代方法是使用csv读/写组件将表输出为csv文件,或使用XML文件编写器将表输出为纯XML。这两种格式都可以读入标准Excel文件中。