Tag: epplus

如何在C#中使用EPPLUS的一个对象多次写入excel

请参阅一些EPPLUS示例代码,只为一个活动创建一个epplus对象。 前 using (ExcelPackage package = new ExcelPackage(newFile)) {… // activity } 这意味着活动结束后,对象会自动处理。 并且对于下一个,将再次创建对象以再次进行活动。 而且我想为多次活动创建一个EPPLUS对象,我想创建一个EPPLUS对象可以多次使用,而不是使用“using”语句。 这是我的代码 public partial class FMain : Form { … ExcelPackage pack; FileInfo InfoPathFile; public StringPathFile = “” … public FMain() { … } private void NewDialog_FileOk(object sender, CancelEventArgs e) { if(pack != null) pack.Dispose(); StringPathFile = NewDialog.FileName; InfoPathFile = new […]

打开使用EPPlus创建的.xlsx文件并使用ICSharpCode.SharpZipLib压缩到一个文件夹时出现问题

我正在使用EPPlus创建ExcelPackages(xlsx文档)列表,并将它们作为ZipEntries添加到ZipOutputStream中。 我认为Excel文档应该是有效的,因为当我将其中一个文件写入Response对象而不进行压缩时,我可以正常打开它们。 zip文件夹是按预期创建的,文件在那里并且似乎没有空,但是当我尝试打开它们时,我在Excel中收到以下错误: Excel无法打开文件{Name} .xlsx,因为文件格式或文件扩展名无效。 validation文件是否已损坏,以及文件扩展名是否与文件格式匹配 List documents = new List(); List fileNames = new List(); //Code for fetching documents and filenames here (removed for the sake of readability) Response.Clear(); Context.Response.BufferOutput = false; Response.ContentType = “application/zip”; Response.AppendHeader(“content-disposition”, “attachment; filename=\”random-foldername.zip\””); Response.CacheControl = “Private”; Response.Cache.SetExpires(DateTime.Now.AddMinutes(3)); ZipOutputStream zipOutputStream = new ZipOutputStream(Response.OutputStream); zipOutputStream.SetLevel(3); //0-9, 9 being the highest level […]

C#ExcelPackage(EPPlus)DeleteRow不会更改工作表尺寸?

我正在尝试构建一个数据导入工具,它接受来自用户的EXCEL文件并解析文件中的数据以将数据导入我的应用程序。 我在使用DeleteRow遇到一个奇怪的问题,我似乎无法在网上找到任何信息,虽然看起来有人会遇到过这个问题。 如果这是一个重复的问题,我道歉,但是在搜索网页后我找不到与我的问题有关的任何内容,除了这个仍然没有解决我的问题。 所以问题: 我使用以下代码尝试通过ExcelPackage“删除”具有空白数据的任何行。 for (int rowNum = 1; rowNum cell.Value != null)) { nonEmptyRowsInFile += 1; continue; } else ws.DeleteRow(rowNum); //Update: ws.DeleteRow(rowNum, 1, true) also does not affect dimension } 单步执行该代码,我可以看到DeleteRow确实被调用了正确的行号,但问题是当我在返回的结果对象上设置“文件中的总行数”时: parseResult.RowsFoundInFile = (ws.Dimension.End.Row); 即使在调用DeleteRow之后,ws.Dimension.End.Row仍会返回原始行数。 我的问题是……我是否必须“保存”工作表或调用某些内容才能使工作表意识到这些行已被删除? 如果行仍然“存在”,调用“DeleteRow”有什么意义? 任何有关这方面的见解将不胜感激…… 谢谢

使用具有匿名类型的LoadFromCollection进行epplus

我有一个IEnumerable dataSource,它包含一个匿名类型的集合。 在设计时不会知道匿名类型的实际结构,所以我试图找到一个可以处理任何匿名类型的通用解决方案。 如何将它们加载到epplus中以创建电子表格? 我有一个名为ws的工作表,我尝试过: ws.Cells[“A1”].LoadFromCollection(dataSource, true); 但是,当它运行时,它会将所有匿名类型的属性输出到单个单元格中: { Id = 10000, Title = This is a test } 我尝试使用以下方法传递MemberInfo: var members = dataSource.First().GetType().GetMembers(); ws.Cells[“A1”].LoadFromCollection(this._dataSource, true, TableStyles.Medium1, BindingFlags.Public, members); 但这引发了一个例外: 参数Properties中提供的属性必须与T的类型相同 关于如何使用c#中的匿名类型创建电子表格的任何建议?

提示在使用EPPlus创建的文件上保存更改

我正在使用EPPlus v3.1.3创建一系列Excel工作簿。 当我打开新创建的文件时,如果我关闭它而不触及任何内容,它会询问我是否要保存更改。 我注意到的唯一变化是,如果我说“是”,则app.xml文件稍有改动 – 工作簿中没有明显的差异,其余的XML文件是相同的。 我尝试过这两种方法: ExcelPackage p = new ExcelPackage(new FileInfo(filename)); p.Save(); 以及 ExcelPackage p = new ExcelPackage(); p.SaveAs(new FileInfo(filename)); 两者都有同样的问题。 有没有办法让app.xml文件以最终forms输出? 这是一个问题的原因是因为我们使用SAS程序来进行QC,并且当SAS程序打开文件时,因为它们是直接从EPPlus程序输出的,所以它不从具有公式的单元格中获取值。 如果它被打开并且“是”你选择“是否要保存更改”,它可以正常工作。 但是,由于我们正在创造数百个,这是不切实际的。 另外,我正在使用模板。 模板显示正常。 特别奇怪的是,我们已经使用这个系统超过一年了,这是我们第一次遇到这个问题。 有没有办法解决? 在C#或SAS方面?

例外:DataValidation列表的总长度不能超过255个字符

我试图在epplus中动态创建一个公式字段。 如果公式字段包含少于255个字符,那么它正在正确创建。 如果它超过255,那么它会抛出exception,因为Exception:DataValidation列表的总长度不能超过255个字符。 任何人都可以帮我解决这个问题吗? 或者请告诉我一些替代方案。

EPPLUS:DataValidation列表的长度不能超过255个字符

这个问题在另一篇文章的基础上回答: 这里但是对于我的情况,我无法将validation值硬编码到工作表中,我根据单元格的内容从数据库中提取它们,并且需要做一个每行4列的单独validation。 有没有办法实现这一目标? 先感谢您。 // Data Validations // // Product Validation // for (int i = 2; i o.TTSTicketNumber == ws.Cells[i, 3].Value.ToString()).Single(); var prodIds = prodExtQueryable.Where(p => p.ZoneId == ticketEntity.ZoneId && p.TicketTypeId == ticketEntity.TicketTypeId); if (ticketEntity != null) { var prodIdsList = new List(); foreach (var prodId in prodIds) { prodIdsList.Add(prodId.ProductId); } var ProductList = […]

EPPlus不会在绑定后计算公式输出

我正在使用EPPlus。 我被困在细胞配方中。 我的代码如下: ExcelPackage pck = new ExcelPackage(@”D:\MYSheets\EmptyFile.xlsx”); var ws = pck.Workbook.Worksheets[“MySheet”]; ws.Cells[“A3”].Value = “2.3”; ws.Cells[“A4”].Value = “10.2”; ws.Cells[“A5”].Formula = “=SUM(A3:A4)”; ws.Cells[“A5”].Style.Numberformat.Format = “#,##0.00”; pck.Save(); 当我打开Excel时,默认情况下,A5单元格不计算A3和A4的总和。 除非我修改A3和/或A4单元格,否则A5单元格仍未计算。 我尝试使用以下代码,但它对我不起作用: ws.Workbook.CalcMode = ExcelCalcMode.Automatic;

OpenXML / EPPlus – 在.Net中创建PivotCache

我希望这可以帮助我,至少,回答我在这里提出的两个问题之一,但我正在寻找如何在EPPlus / OpenXML中创建一个PivotCache,并且无法在他们的文档中找到任何显示如何做到这一点。 所以,假设我有一张Excel工作表,在wksRawData创建了wksRawData,我想根据wksRawData.Cells(wksRawData.Dimension.Address)的数据透视表创建一个带有数据透视表的第二张工作表 – 希望我能删除wksRawData但仍保留数据透视表。 我该怎么办? 到目前为止,我在第二个工作表中创建数据透视表的代码是: Dim wksRawData As ExcelWorksheet = wbk.Worksheets(“Raw Data”) Dim wksPvtTbl As ExcelWorksheet = wbk.Worksheets(“PivotTbl”) ‘ Insert the Pivot Table to the sheet Dim DataRange As ExcelRange = wksRawData.Cells(wksRawData.Dimension.Address) Dim pvtTable As OfficeOpenXml.Table.PivotTable.ExcelPivotTable = wksPvtTbl.PivotTables.Add(wksPvtTbl.Cells(“B4”), DataRange, “MyPivotTable”) pvtTable.Compact = True pvtTable.CompactData = True pvtTable.Outline = True pvtTable.OutlineData = True […]

Epplus使用列名查找列

我有动态创建的Excel表格,我想格式化一些列作为日期,但我不知道这些列的索引提前我只知道标题标题。 1-我从DataTable加载excel var templateXls = new ExcelPackage(); var sheet = templateXls.Workbook.Worksheets.Add(parameters.ReportName); sheet.Cells[“A1”].LoadFromDataTable(myDataTable, true); 现在我如何格式化名为“Birthdate”的示例列为短日期字段? 列可以在任何索引中取决于用户选择,也有可能不生成列。 (如果用户不包含它)