我想知道是否需要做某事(线程等)以防止由于多个用户同时尝试运行生成过程而导致文件生成失败。
如果存在潜在问题,我想知道避免它的任何想法。
我的流程概述。
注意:目前存在硬编码的文件名值,因为这是一个概念证据。
请参阅下面的代码
private Boolean GenerateExcelFile(int filenum, int totalfiles, int Year)
{
String TemplateFilename = "C:\\exceldocs\\Templates\\OSHA300_Template.xls";
try
{
Excel._Application oXL;
Excel._Workbook oWB;
Excel._Worksheet oSheet;
//Start Excel and get Application object.
oXL = new Excel.Application();
oXL.Visible = false;
//Open the workbook template.
//oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value));
oWB = (Excel._Workbook)(oXL.Workbooks.Open(TemplateFilename));
oSheet = (Excel._Worksheet)oWB.ActiveSheet;
oSheet.Cells[3, 11] = Year;
oSheet.Cells[PAGEOFROW, PAGEOFCOL] = filenum + " of " + totalfiles;
int currentexcelrow = STARTROW;
foreach (OSHArow row in this)
{
FillOutRow(oSheet, row, currentexcelrow++);
if (currentexcelrow == 38)
{
//break;
}
}
FillOutSummaryRow(oSheet);
File.Delete("C:\\exceldocs\\OshaOutput\\OSHA300_TestResult" + filenum + ".xls");
oWB.SaveAs("C:\\exceldocs\\OshaOutput\\OSHA300_TestResult" + filenum + ".xls");
oWB.Close(true);
}
catch (Exception e)
{
//TODO: configure an exception log.
throw e;
return false;
}
return true;
}
答案 0 :(得分:1)
您最好使用类似OpenXml库的东西。您可以动态地将Excel工作表写入流(然后将流作为FileResults返回,以便用户下载到XLSX文件)。