我正在使用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());
}
}
}
}
}
重现的步骤:
因此,有一种不切实际的解决方法,即操作使用EPPlus保存文件然后将其保存在Excel中然后运行该过程而不使用EPPlus保存它。
似乎.Save()方法将文件置于异常状态,我不知道还有什么可以尝试,任何建议都会非常感激。
答案 0 :(得分:0)
您无法致电BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//myprod//ical-poc//SK
METHOD:CANCEL
X-WR-RELCALID:5EF979C9-3764-4B55-93B8-3BB00DFA176C@uniq.id
X-PUBLISHED-TTL:P1W
BEGIN:VEVENT
UID:5EF979C9-3764-4B55-93B8-3BB00DFA176C@uniq.id
DTSTART;TZID=Europe/Bratislava:20150701T110000
SEQUENCE:1
TRANSP:OPAQUE
STATUS:CANCELLED
DTEND;TZID=Europe/Bratislava:20150701T113000
SUMMARY:CREATED+2
ATTENDEE:mailto:valid@email.xxx
DESCRIPTION:Event description.
ORGANIZER:mailto:cal-poc@domain.com
DTSTAMP:20150630T182457Z
END:VEVENT
END:VCALENDAR
,因为您的工作簿没有任何工作表。普通的Excel文件至少需要1张。
尝试在save()
之前添加var ws = pck.Workbook.Worksheets.Add("Sheet1");
。
我很久以前就用过EPPlus。我不知道为什么删除了文档,但是开发团队可能会在链接下面的任何时候将其删除。
答案 1 :(得分:0)
我刚刚重新审视了这个问题,发现EPPlus 4.0.5已经发布,使用该版本时不会出现问题。赞美!