如何在ASP.NET中编写Excel文件?

时间:2018-07-14 07:42:02

标签: c# excel

我只想通过Microsoft.Office.Interop.Excel.dll在ASP.NET中编写一个Excel文件。

当我在Visual Studio中运行代码时,它可以很好地工作,但是当我将其发布到IIS时,会出现此错误,并且它不会创建我的Excel文件:

  

Microsoft Excel无法打开或保存更多文档,因为没有足够的可用内存或磁盘空间。 •要提供更多的内存,请关闭不再需要的工作簿或程序。 •要释放磁盘空间,请从要保存到的磁盘中删除不再需要的文件。

  1. 驱动器上有30 GB的可用磁盘空间
  2. 我的计算机上已安装Microsoft Office 2016
  3. 我的机器是Windows 10 x64 Pro
  4. 我的路径是应用程序根目录下IIS中的文件夹。我测试了另一条路径,但它也不起作用
  5. 我为文件夹中的IIS_IUSRS设置了完全访问权限

我的C#代码:

private void CreateExcel(DataSet ds, string excelPath)
{
        Excel.Application xlApp;
        Excel.Workbook xlWorkBook;
        Excel.Worksheet xlWorkSheet;

        object misValue = System.Reflection.Missing.Value;

        try
        {
            xlApp = new Excel.Application();
            xlWorkBook = xlApp.Workbooks.Add(misValue);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

            for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
            {
                for (int j = 0; j <= ds.Tables[0].Columns.Count - 1; j++)
                {
                    xlWorkSheet.Cells[i + 1, j + 1] = ds.Tables[0].Rows[i].ItemArray[j].ToString();
                }
            }

            xlWorkBook.SaveAs(excelPath, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            xlWorkBook.Close(true, misValue, misValue);
            xlApp.Quit();

            releaseObject(xlApp);
            releaseObject(xlWorkBook);
            releaseObject(xlWorkSheet);

        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void releaseObject(object obj)
    {
        try
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
            obj = null;
        }
        catch
        {
            obj = null;
        }
        finally
        {
            GC.Collect();
        }
    }

0 个答案:

没有答案