excel文件生成过程将在网络服务器风险文件锁定上运行

本文关键字:文件 文件锁 运行 服务器 锁定 网络 过程 excel 网络服务 | 更新日期: 2023-09-27 17:55:59

我想知道我是否需要做一些事情(线程等)来防止由于多个用户尝试同时运行生成过程而导致文件生成失败。

如果有潜在的问题,我想知道任何避免它的想法。

我的流程概述。

  1. 用户单击按钮以启动该过程。
  2. 数据是从数据源收集的/虚拟的进行测试。
  3. 模板.xls已打开
  4. 数据将插入到打开的模板中。
  5. SaveAs 是为打开的 excel 文件调用的
  6. 重复该过程,直到创建所有需要的文件。
  7. 所有文件压缩在一起
  8. 如果进程成功完成,则会通知用户,并提示用户下载文件的 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;
    }

excel文件生成过程将在网络服务器风险文件锁定上运行

你最好使用像OpenXml库这样的东西。您可以将 Excel 工作表动态写入流(然后将流作为文件结果返回,供用户下载到 XLSX 文件)。

http://openxmldeveloper.org/