如何在C#中使用EPPlusclosuresExcelPackage?

我正在使用epplus在文件中写入excel模板中的大量信息,但是之后我需要closuresExcelPackage才能使用Excel应用程序。 它引发了这个exception:“System.Runtime.InteropServices.COMException(0x800A03EC):从HRESULTexception:0x800A03EC”

private void FillCardsSheet() { xlPackage = new ExcelPackage(Template); wsCards = xlPackage.Workbook.Worksheets[4]; string command = "SELECT * FROM dbo_serial_cards WHERE type <> 'EXT' AND LEFT([device_tag], 2) <> '!!'"; OleDbCommand cmd = new OleDbCommand(command, CON); OleDbDataReader reader = cmd.ExecuteReader(); int row = 1; while (reader.Read()) { row++; for (int col = 1; col <= 16; col++) { wsCards.Cells[row, col].Value = reader.GetValue(col - 1); } } xlPackage.SaveAs(Template); xlPackage.Dispose(); } 

很难说没有关于你的连接和对象的更多细节。 什么是“模板”? 可以帮助,如果你说哪一行产生的错误(如@mason提到)。 这是一个COM错误,你似乎正在得到,所以它可能是数据库连接或可能是包本身。 由于软件包是在方法之外进行pipe理,请确保它没有被locking或closures。

这工作正常我连接到本地SQL Server数据库:

 [TestMethod] public void SQL_Reader_Test() { var Template = new FileInfo(@"c:\temp\temp.xlsx"); if (Template.Exists) Template.Delete(); var xlPackage = new ExcelPackage(Template); //var wsCards = xlPackage.Workbook.Worksheets[4]; var wsCards = xlPackage.Workbook.Worksheets.Add("Cards"); //const string constring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\temp\northwind.mdb;Persist Security Info=False;"; const string constring = @"Provider=SQLNCLI11;Data Source=MYMACHINENAME\SQLEXPRESS;Initial Catalog=AdventureWorks;UID=AdventureWorks; Pwd=AdventureWorks"; using (var CON = new OleDbConnection(constring)) { CON.Open(); //string command = "SELECT * FROM dbo_serial_cards WHERE type <> 'EXT' AND LEFT([device_tag], 2) <> '!!'"; const string command = "SELECT * FROM Person.Address"; var cmd = new OleDbCommand(command, CON); var reader = cmd.ExecuteReader(); int row = 1; while (reader.Read()) { row++; //for (int col = 1; col <= 16; col++) for (int col = 1; col <= reader.FieldCount; col++) { wsCards.Cells[row, col].Value = reader.GetValue(col - 1); } } xlPackage.SaveAs(Template); xlPackage.Dispose(); } } 

尝试在使用块中使用ExcelPackage:

 using (ExcelPackage xlsPackage = new ExcelPackage(Template)) { // Your Code xlPackage.SaveAs(Template); }