我正在使用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()方法使文件处于异常状态,我不知道还能尝试什么,如果有任何建议,我们将不胜感激。
您不能调用save()
,因为您的工作簿没有任何工作表兄弟。一个正常的excel文件至少需要一张表格。
尝试在save()
之前添加var ws = pck.Workbook.Worksheets.Add("Sheet1");
。
我很久以前就用过EPPlus了。我不知道为什么文档会被删除,但开发团队可能会随时将其放回链接下方。
http://epplus.codeplex.com/documentation
我刚刚重新审视了这个问题,发现EPPlus 4.0.5已经发布,使用该版本时不会出现问题。赞美吧!