【发布时间】:2014-07-30 11:38:08
【问题描述】:
我正在将 Sql 数据导出到 Excel。我目前使用的代码是:
DataTable dt = new DataTable();
// Create sql connection string
string conString = "Data Source=DELL\\SQLSERVER1;Trusted_Connection=True;DATABASE=Zelen;CONNECTION RESET=FALSE";
SqlConnection sqlCon = new SqlConnection(conString);
sqlCon.Open();
SqlDataAdapter da = new SqlDataAdapter("select LocalSKU,ItemName, QOH,Price,Discontinued,CAST(Barcode As varchar(25)) As Barcode,Integer2,Integer3,ISNULL(SalePrice,0.0000)AS SalePrice,SaleOn,ISNULL(Price2,0.0000)AS Price2 from dbo.Inventory", sqlCon);
System.Data.DataTable dtMainSQLData = new System.Data.DataTable();
da.Fill(dtMainSQLData);
DataColumnCollection dcCollection = dtMainSQLData.Columns;
// Export Data into EXCEL Sheet
Microsoft.Office.Interop.Excel.ApplicationClass ExcelApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
ExcelApp.Application.Workbooks.Add(Type.Missing);
int i = 1;
int j = 1;
int s = 1;
//header row
foreach (DataColumn col in dtMainSQLData.Columns)
{
ExcelApp.Cells[i, j] = col.ColumnName;
j++;
ExcelApp.Rows.AutoFit();
ExcelApp.Columns.AutoFit();
}
i++;
//data rows
foreach (DataRow row in dtMainSQLData.Rows)
{
for (int k = 1; k < dtMainSQLData.Columns.Count + 1; k++)
{
ExcelApp.Cells[i, k] = "'" + row[k - 1].ToString();
}
i++;
s++;
Console.Write(s);
Console.Write("\n\r");
ExcelApp.Columns.AutoFit();
ExcelApp.Rows.AutoFit();
}
var b = Environment.CurrentDirectory + @"\Sheet1.xlsx";
ExcelApp.ActiveWorkbook.SaveCopyAs(b);
ExcelApp.ActiveWorkbook.Saved = true;
ExcelApp.Quit();
Console.WriteLine(".xlsx file Exported succssessfully.");
在我的 sql 数据库中需要 70000 行。我在控制台应用程序中运行此脚本。 导出到excel文件需要一个多小时。
如何使用它来更快地导出它?
示例将不胜感激。
【问题讨论】:
-
这就是 excel coms 的本质。我不相信你能加快速度。
-
另一种方法是使用 OleDb 将 Excel 工作表视为数据表。 stackoverflow.com/questions/11312661/… 或 stackoverflow.com/questions/11208255/…
-
我建议导出为 CSV 而不是 excel。它应该是闪电般的速度,并且仍然很容易被 excel 支持。
-
最近有一个类似的问题(读取值)-据说它与逐个单元格的操作有关...如果您可以改为范围,它可能会加快起来。
-
@bdimag cmets 触发了内存,一次执行一行而不是逐个单元格确实更快。此外,没有理由在每个单元格上自动调整列。摆脱那些电话,并在最后做一次。
标签: c# sql-server-2008-r2 export export-to-excel