[英]Delete a large number (>100K) of files with c# whilst maintaining performance in a web application?
[英]Save datatable to large excel file having rows 100k in c#
我使用Windows应用程序并处理大型excel文件。 我需要将10万行从数据表保存到excel文件。
目前我的create excel函数仅支持65,500行吗?
但是我需要保存的不仅仅是excel文件。 可能吗?
如果是的话,请提供来源?
这是我的代码
public static void ExportDataSetToExcel(DataTable dt, int index, string strFilePathName)
{
Console.WriteLine("Creating Output Excel file");
string fileFomat = getExcelFileName(index) + (DateTime.Now.ToString("yyyyMMddTHHmmss"));
Microsoft.Office.Interop.Excel.Application objXL = null;
Microsoft.Office.Interop.Excel.Workbook objWB = null;
try
{
objXL = new Microsoft.Office.Interop.Excel.Application();
objWB = objXL.Workbooks.Add(1);
int sheetcount = 1;
Microsoft.Office.Interop.Excel.Worksheet objSHT = (Microsoft.Office.Interop.Excel.Worksheet)objWB.Sheets.Add();
Microsoft.Office.Interop.Excel.Range cells = objSHT.Cells;
cells.NumberFormat = "@";
//formatRange = objSHT.get_Range("b1",Type.Missing);
//formatRange.EntireRow.Font.Bold = true;
objSHT.Name = "RunOrderSheet";
for (int j = 0; j < dt.Rows.Count; j++)
{
for (int i = 0; i < dt.Columns.Count; i++)
{
//Condition to put column names in 1st row
//Excel work book indexes start from 1,1 and not 0,0
if (j == 0)
{
objSHT.Cells[1, i + 1] = dt.Columns[i].ColumnName.ToString();
}
//Writing down data
objSHT.Cells[j + 2, i + 1] = dt.Rows[j][i].ToString();
}
}
sheetcount++;
objWB.Saved = true;
objWB.SaveCopyAs(strFilePathName.Trim() + fileFomat.Trim() + ".xlsx");
objWB.Close();
objXL.Quit();
Console.WriteLine("Process done");
}
catch (Exception ex)
{
objWB.Saved = true;
objWB.Close();
objXL.Quit();
log.Error(ex.Message);
}
}
Excel和带有C#的COM接口绝对将支持超过65k行。 只是为了证明有可能,请运行以下代码:
public static void ExportDataSetToExcel()
{
Excel.Application objXL = null;
Excel.Workbook objWB = null;
objXL = new Microsoft.Office.Interop.Excel.Application();
objXL.Visible = true;
objWB = objXL.Workbooks.Add(1);
Excel.Worksheet objSHT = objWB.Sheets.Add();
for (int row = 1; row < 100000; row++)
{
objSHT.Cells[row, 1].Value2 = row;
}
objWB.SaveAs("c:\test\test.xlsx", Excel.XlFileFormat.xlOpenXMLWorkbook);
objWB.Close();
objXL.Quit();
}
根据我的怀疑,这使我对您的问题可能有几种可能性(首先是我认为最有可能的问题):
由于您有一个try / catch块,可以很好地捕获错误并确保循环中发生的所有事件,同时仍保存文件,因此某些事情会触发众所周知的断路器。 虽然我看不到任何明显的错误,但可能有任何错误。 在catch块中放置一个断点,看看ex
包含什么。 另外,请记下导致错误的特定记录,以便您可以单步浏览一条记录并查看错误发生的位置。
我注意到您正在使用SaveCopyAs
而不是SaveAs
。 SaveCopyAs
自动以与原始格式完全相同的格式保存。 我认为您的Excel带有默认的xlsx
,但是我当然不能保证。 将SaveAs
与显式文件格式一起使用将确保将其保存为支持65k行以上的格式:。
objWB.SaveAs("c:\\test\\test.xlsx", Excel.XlFileFormat.xlOpenXMLWorkbook);
在不知道数据表有多大的情况下,它可能仅仅是一个内存问题,也使try / catch失败了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.