0

我正在使用 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() 方法将文件置于异常状态,我不知道还能尝试什么,任何建议将不胜感激。

4

2 回答 2

0

你不能打电话save(),因为你的工作簿没有任何工作表兄弟。正常的 excel 文件至少需要 1 张纸。

尝试var ws = pck.Workbook.Worksheets.Add("Sheet1");save().

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

http://epplus.codeplex.com/documentation

于 2015-06-30T19:00:23.480 回答
0

刚刚重温了这个问题,发现EPPlus 4.0.5已经发布了,使用那个版本时没有出现这个问题。赞美吧!

于 2016-01-21T16:42:09.977 回答