0

我想知道我是否需要做一些事情(线程等)来防止我的文件生成失败,因为多个用户试图同时运行生成过程。

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

我的过程概述。

  1. 用户单击按钮以启动该过程。
  2. 数据是从数据源收集的/虚拟化用于测试。
  3. Template.xls 已打开
  4. 数据被插入到打开的模板中。
  5. 为打开的 excel 文件调用 SaveAs。
  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;
    }
4

1 回答 1

1

最好使用 OpenXml 库之类的东西。您可以即时将 Excel 工作表写入流(然后将流作为 FileResults 返回以供用户下载到 XLSX 文件)。

http://openxmldeveloper.org/

于 2013-01-25T20:28:31.227 回答