保存ExcelPackage(EPPlus)后读取电子表格时发生异常



我正在使用EPPlus(4.0.4)操作.xlsx电子表格中的数据并保存文件,然后立即将部分数据加载到数据表中。

调用.Save()方法后,电子表格被保存,但随后我得到一个"外部表不是预期格式"尝试填充DataAdapter时发生异常。

我创建了一个控制台应用程序,以最大限度地减少演示问题所需的代码量,以下是代码:

using OfficeOpenXml;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EPPlusSaveIssue
{
    class Program
    {
        static void Main(string[] args)
        {
            string pathToFile = "C:\Users\Peter\Documents\test.xlsx";
            FileInfo newFile = new FileInfo(pathToFile);
            using (var pck = new ExcelPackage(newFile))
            {
                pck.Save();
            }
            string connectionStringFormat = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties="Excel 12.0;HDR=No;IMEX=1"";
            using (OleDbConnection con = new OleDbConnection(string.Format(connectionStringFormat, pathToFile)))
            {
                using (OleDbDataAdapter dataAdapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$] ", con))
                {
                    DataTable dataTable = new DataTable();
                    dataAdapter.Fill(dataTable);
                    Console.WriteLine(dataTable.Rows.Count.ToString());
                }
            }
        }
    }
}

复制步骤:

  1. 根据新创建的电子表格运行应用程序,出现异常
  2. 注释掉pck。Save();行,并且异常仍然发生(此时电子表格在某种程度上被损坏)
  3. 在Excel中打开电子表格并保存
  4. 再次运行应用程序(pck.Save()仍然被注释掉),它就会运行
  5. 把pck。Save();行返回,然后发生异常

因此,有一种解决方法是不切实际的,即使用EPPlus保存文件,然后将其保存在Excel中,然后在不使用EPPlus的情况下运行该过程。

看起来.Save()方法使文件处于异常状态,我不知道还能尝试什么,如果有任何建议,我们将不胜感激。

您不能调用save(),因为您的工作簿没有任何工作表兄弟。一个正常的excel文件至少需要一张表格。

尝试在save()之前添加var ws = pck.Workbook.Worksheets.Add("Sheet1");

我很久以前就用过EPPlus了。我不知道为什么文档会被删除,但开发团队可能会随时将其放回链接下方。

http://epplus.codeplex.com/documentation

我刚刚重新审视了这个问题,发现EPPlus 4.0.5已经发布,使用该版本时不会出现问题。赞美吧!

相关内容

  • 没有找到相关文章

最新更新