我正在使用 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());
}
}
}
}
}
重现步骤:
- 针对新创建的电子表格运行应用程序,出现异常
- 注释掉 pck.Save(); 行并且异常仍然发生(此时电子表格在某种程度上被破坏了)
- 在 Excel 中打开电子表格并保存
- 再次运行应用程序(pck.Save() 仍然被注释掉)并运行
- 把 pck.Save(); 重新输入并发生异常。
因此,有一个不切实际的解决方法,即使用 EPPlus 进行操作保存文件,然后将其保存在 Excel 中,然后运行该过程而不使用 EPPlus 保存它。
似乎 .Save() 方法将文件置于异常状态,我不知道还能尝试什么,任何建议将不胜感激。