excel文件生成过程会在webserver风险文件锁上运行吗?

时间:2013-01-25 20:21:04

标签: c# asp.net excel office-interop

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

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

我的流程概述。

  1. 用户点击按钮启动流程。
  2. 从数据源/ dummied收集数据进行测试。
  3. 打开Template.xls
  4. 将数据插入打开的模板中。
  5. 为打开的Excel文件调用SaveAs。
  6. 重复
  7. 过程,直到创建了所有需要的文件。
  8. 所有文件压缩在一起
  9. 如果进程成功完成并提示下载文件的zip文件,则会通知用户。
  10. 注意:目前存在硬编码的文件名值,因为这是一个概念证据。

    请参阅下面的代码

    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;
        }
    

1 个答案:

答案 0 :(得分:1)

您最好使用类似OpenXml库的东西。您可以动态地将Excel工作表写入流(然后将流作为FileResults返回,以便用户下载到XLSX文件)。

http://openxmldeveloper.org/