excel文件生成过程将在网络服务器风险文件锁定上运行
本文关键字:文件 文件锁 运行 服务器 锁定 网络 过程 excel 网络服务 | 更新日期: 2023-09-27 17:55:59
我想知道我是否需要做一些事情(线程等)来防止由于多个用户尝试同时运行生成过程而导致文件生成失败。
如果有潜在的问题,我想知道任何避免它的想法。
我的流程概述。
- 用户单击按钮以启动该过程。
- 数据是从数据源收集的/虚拟的进行测试。
- 模板.xls已打开
- 数据将插入到打开的模板中。
- SaveAs 是为打开的 excel 文件调用的 。
- 重复该过程,直到创建所有需要的文件。
- 所有文件压缩在一起
- 如果进程成功完成,则会通知用户,并提示用户下载文件的 ZIP。
注意:存在硬编码的文件名值,因为这是目前的概念证明。
请参阅下面的生成代码
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;
}
你最好使用像OpenXml库这样的东西。您可以将 Excel 工作表动态写入流(然后将流作为文件结果返回,供用户下载到 XLSX 文件)。
http://openxmldeveloper.org/