Tag: epplus

设置单元格合并并设置其值,但它不起作用?

//使用EPPlus.dll 使用OfficeOpenXml string path = @”C:\Users\Superman\Desktop\recc\1996.xlsx”; ExcelPackage package = new ExcelPackage(new FileInfo(path)); var sheet3 = package.Workbook.Worksheets[3]; sheet3.Cells[“A1:B5”].Merge = true; var mergedId = sheet3.MergedCells[1, 1]; sheet3.Cells[mergedId].First().Value = “123”; // error: System.InvalidOperationException : Sequence does not contain any elements package.Save(); 怎么了? 怎么做?

尝试从SSIS包保存大于~1.5 MiB的文件时,EPPlus 2.9.0.1抛出System.IO.IsolatedStorage.IsolatedStorageException

问题 当我尝试使用EPPlus保存文件超过~1.5 MiB时ExcelPackage.Save()抛出System.IO.IsolatedStorage.IsolatedStorageException 。 说明 我正在使用Visual Studio 2008 9.0.30729.4462 QFE和.NET Framework 3.5 SP1创建一个SSIS包,以通过EPPlus 2.9.0.1库导出SQL Server 2008 SP2 10.0.4311.0 64 bit表的EPPlus 2.9.0.1 。 SSIS包非常简单:一个Execute SQL Task ,它读取表的内容并将其放入一个变量后跟一个Script task ,该Script task读取记录集变量并通过EPPlus将内容保存到磁盘。 脚本任务的代码是: namespace ST_00a0b40814db4c7290b71f20a45b62c6.csproj { using System; using System.AddIn; using System.Data; using System.Data.OleDb; using System.IO; using Microsoft.SqlServer.Dts.Runtime; using Microsoft.SqlServer.Dts.Tasks.ScriptTask; using OfficeOpenXml; [AddIn(“ScriptMain”, Version = “1.0”, Publisher = […]

读取空单元格,给出对象引用错误

当我通过Worksheets.Cells [2,5] .value.ToString();读取单元格时 我收到错误“System.NullReferenceException:对象引用未设置为对象的实例。” 什么是检查null然后分配值的好方法,而不必有“if”语句。

EPPlus将Excel Spreadsheet列转换为随机负值

我有一个C#方法,请参阅下面的代码,它使用EPPlus生成Excel电子表格。 该方法接受3个字符串,其中一个是名为csv的管道分隔字符串,其中包含我的数据。 我正在使用的数据有14列,在第14列中我的数据看起来像是:103.01.06,或01.01,或者用句点分隔的一些其他数值。 我看到的问题是,如果值为103.01.06,则EPPlus将其转换为值-656334。 有办法解决这个问题吗? private void GenerateSpreadsheet(string id, string csv, string worksheetName) { using (ExcelPackage pck = new ExcelPackage()) { ExcelWorksheet ws = pck.Workbook.Worksheets.Add(worksheetName); ws.Cells[“A1”].LoadFromText(csv, new ExcelTextFormat{Delimiter = ‘|’}); Response.AddHeader(“Content-Disposition”, String.Format(“attachment; filename={0}.xlsx”, id)); Response.ContentType = “application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”; Response.ContentEncoding = System.Text.Encoding.GetEncoding(“utf-8”); Response.BinaryWrite(pck.GetAsByteArray()); Response.End(); } }

EPPlus:将样式复制到范围

我想将x-new行/列插入工作表并应用插入的行/列的样式(backgroundcolor / border等)。 这是我添加新行的方式: xlsSheet.InsertRow(18, RowCount); 然后我想将“base”行的样式复制/应用到新插入的行: for (int i = 0; i < RowCount; i++) { xlsSheet.Cells[16, 1, 16, xlsSheet.Dimension.End.Column].Copy(xlsSheet.Cells[16 + i + 1, 1]); } 但是这段代码不会复制/应用“基础”行的样式。 在这一刻,我有一个互操作的解决方法,但这与epplus相比需要数年时间。 : – /

EPPlus数据透视表/图表

我一直在使用EPPlus for .net一段时间,但仅用于简单的数据操作。 是否有任何关于如何使用它来创建数据透视表/图表的示例? 它似乎支持它,因为我可以在intellisense中看到数据透视表,但只是不确定语法。 我只能在提供的样本中找到饼图/条形图。

If语句太多了?

我有一个类使用EPPlus从电子表格中读取文本。 它工作正常,它完全符合我的要求,但我觉得我这样做是不好的做法,但对于我的生活,我不能找出一个不太硬编码的替代方案,并且使用较少的if语句。 该类包含常量,如 private static string configUserName; private static string configPassword; private static string configUrl; private static string configDatabase; //etc 其中大约有40个。 该类循环遍历一个电子表格,读取所有值,检查它是什么值: int i = 1; object isRow = currentWorksheet.Cells[i, 1].Value; while (isRow != null) { if (isRow.ToString().Trim().Equals(“change_bank_details_policy”)) { if (currentWorksheet.Cells[i, 2].Value != null) { change_bank_details_policy =c currentWorksheet.Cells[i,2].Value.ToString().Trim(); } } else if //etc 40 more […]

EPPlus是否要求在服务器上安装Excel?

EPPlus是否要求在服务器上安装Excel? 如果是,则使用entity framework从服务器端代码将批量数据导出到excel文件的任何更好的替代方案。

Epplus删除特定行的所有行

有可能以某种方式删除特定(空)行中的所有后续行? 我试过cyclus for (int rowNum = 1; rowNum cell.Value != null)) { worksheet.DeleteRow(rowNum); } } 但如果在excel中有数百万个空行,则需要几分钟。 Epplus提供此方法worksheet.DeleteRow(int rowFrom, int rows)但我不知道所有其他空行的计数。 在下面的示例中,我需要删除所有12+行,但问题是我不知道空行开始的特定行。 替代aproach可以找到最后一个非空行并删除范围的所有内容,这将更快,但是在表内有空行的另一个问题。 ws.DeleteRow(lastFilledTableRow, workSheet.Dimension.End.Row – tableRowsCount,true); 在这个例子中,问题是红色的行,但也许我会告诉用户这种excel格式无效并避免问题。

如何使用新的CodeModule从模板复制ExcelWorkSheet

我在复制ExcelWorkSheet和复制的工作表的相应CodeModule时遇到问题。 让我解释: 场景:我有一个带有宏(.xlsm)的excel文件,我使用这个excel文件作为模板来创建另一个excel文件(数据将被复制到新文件中)。 因此,首先我从数据库中获取一些数据并打开excel模板( .xlsm )文件。 在某个时刻,某些条目需要位于不同的工作表中,这就是“WorkSheets.Add()”所在的位置。 var newSheet = workbook.Worksheets.Add(“someName”, templateSheet); 复制模板表(包含我想要复制的’VBA’代码)后,我遇到了问题。 似乎新创建的工作表的“CodeModule”等于模板中的名称和引用。 那是; 所有属性值都相同,并且: workbook.VbaProject.Modules仅包含模板文件的初始代码模块,而不包含新newSheet的新代码模块。 更糟糕的是,如果我想绑定一个像这样的新CodeModule : workbook.VbaProject.Modules.AddModule(“test”); newSheet.CodeModule.Name = “test”; newSheet.CodeModule和templateSheet.CodeModule都设置为null (实际上Nothing ,因为我使用的是VB.Net)。 所以问题是:这是一个错误还是我在这里做错了什么? 甚至更好:你能指导完成这种情况的方式吗?