C#Epplus save& saveas错误

时间:2011-08-04 18:42:44

标签: c# excel

            if (!File.Exists(this.savePath.FullName + "\\" + value + ".xlsx"))
            {
                using ( ExcelPackage exp = new ExcelPackage(finfo))
                {
                    //ExcelPackage exps= new ExcelPackage(pather);
                    ExcelWorksheet exlss = exp.Workbook.Worksheets[timing];
                    exlss.Cells["A1"].LoadFromDataTable(dt, true, TableStyles.Medium9);
                    exp.SaveAs(existing);

                }
            }
            else if (File.Exists(this.savePath.FullName + "\\" + value + ".xlsx")) {
                timing = "2011";
                using (ExcelPackage exp = new ExcelPackage(existing))
                {

                    //ExcelPackage exps= new ExcelPackage(pather);
                    ExcelWorksheet exlss = exp.Workbook.Worksheets[timing];
                    exlss.Cells["A1"].LoadFromDataTable(dt, true, TableStyles.Medium9);
                    exp.Save();

                }
            }

所以我试图使用EPPlus保存到从用户那里获得的特定文件夹。虽然它在第一次使用实例时保存得很好,但是当我尝试保存或保存时,它只是抛出一个错误。

如果我使用原始文件作为模板(如下所示)并再次使用第一部分它可以正常工作。我不知道为什么保存不起作用。我试图将其保存到不同的位置,但这会导致相同的错误。

如果您有任何想法请帮助我。

〜编辑这是错误 保存文件C:\ Documents and Settings \ xxx \ Desktop \ Testing Andyxxxxxxxx \ 2481.xlsx

时出错

〜编辑抱歉所有的编辑,我是新手 这是一个InvalidOperationException(未处理)

5 个答案:

答案 0 :(得分:4)

我发现了问题,您需要在尝试处理工作表之前保存文件,在您的情况下,您需要在引用之前添加新的工作表。

答案 1 :(得分:0)

尝试将Epplus dll更新为最新版本。目前它是4.0.5,可以从这里下载:

http://epplus.codeplex.com/downloads/get/813458

今天帮助了我。

答案 2 :(得分:0)

我意识到这是一个老问题,但是我只是通过从流行的报表程序导出的XLSX遇到了这个问题。 XLSX引用了未保存的样式。我用以下方法解决了这个问题:

                for (int rowIndex = wks.Dimension.Start.Row; rowIndex <= wks.Dimension.End.Row; rowIndex++)
                {
                    var row = wks.Row(rowIndex);
                    try
                    {
                        var s = row.Style;
                    }
                    catch (Exception)
                    {
                        row.StyleID = 0;
                    }
                }

可能由于不同的原因而发生此问题,但可能是XLSX文件有问题。

答案 3 :(得分:0)

我也通过EPPlus 4.5.3.2获得了这个InvalidOperation。对我来说,问题是我试图在工作表using块结束后调用SaveAs(),即使ExcelPackage尚未到其using块结束。因此,在保存程序包之前,请确保不丢弃内部工作表。

using (var excelPackage = new ExcelPackage())
{
    adapter.SelectCommand.CommandTimeout = commandTimeout;
    adapter.Fill(table);

    // If you wrap this in a using block which terminates before Save()/SaveAs()
    // it will throw an InvalidOperationException
    ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add(table.TableName);

    worksheet.Cells["A1"].LoadFromDataTable(table, true);

    //Format the header
    using (ExcelRange range = worksheet.Cells[1, table.Columns.Count]) // all columns
    {
        range.Style.Font.Bold = true;
        ... other stuff
    }

    var newFile = new FileInfo(path);
    excelPackage.SaveAs(newFile);
}

答案 4 :(得分:0)

我也通过EPPlus 4.5.3.2获得了这个InvalidOperation。对我来说,问题在于我的excel模板文件中有一个图像。因此,Azure Linux应用服务会引发以下异常:

2020-04-01T02:01:29.144596907Z System.InvalidOperationException: Error saving file /home/site/wwwroot/wwwroot/export-files/YeuCauVatTu_20200401090128.xlsx
2020-04-01T02:01:29.144612407Z  ---> System.TypeInitializationException: The type initializer for 'Gdip' threw an exception.
2020-04-01T02:01:29.145214910Z  ---> System.DllNotFoundException: Unable to load shared library 'libgdiplus' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: liblibgdiplus: cannot open shared object file: No such file or directory
2020-04-01T02:01:29.145238810Z    at System.Drawing.SafeNativeMethods.Gdip.GdiplusStartup(IntPtr& token, StartupInput& input, StartupOutput& output)
2020-04-01T02:01:29.145245610Z    at System.Drawing.SafeNativeMethods.Gdip..cctor()

我在这里找到了解决方案:https://github.com/dotnet/core/issues/2746#issuecomment-595980412

只需将下面的代码插入“启动命令”中,即可更改dll名称。

enter image description here

apt-get更新&& apt-get安装-y apt-utils libgdiplus libc6-dev && dotnet YourWebSite.dll