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(未处理)
答案 0 :(得分:4)
我发现了问题,您需要在尝试处理工作表之前保存文件,在您的情况下,您需要在引用之前添加新的工作表。
答案 1 :(得分:0)
尝试将Epplus dll更新为最新版本。目前它是4.0.5,可以从这里下载:
今天帮助了我。答案 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名称。
apt-get更新&& apt-get安装-y apt-utils libgdiplus libc6-dev && dotnet YourWebSite.dll