保存ExcelPackage(EPPlus)

时间:2015-06-26 12:47:25

标签: epplus excelpackage epplus-4

我正在使用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();返回并发生异常。
  6. 因此,有一种不切实际的解决方法,即操作使用EPPlus保存文件然后将其保存在Excel中然后运行该过程而不使用EPPlus保存它。

    似乎.Save()方法将文件置于异常状态,我不知道还有什么可以尝试,任何建议都会非常感激。

2 个答案:

答案 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。我不知道为什么删除了文档,但是开发团队可能会在链接下面的任何时候将其删除。

http://epplus.codeplex.com/documentation

答案 1 :(得分:0)

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