Tag: epplus 4

如何使Excel列只读,但在EPPlus C#中可重新resize?

在我的MVC项目中,用户可以在用户界面中select一些产品,并以Excel(.xlsx)格式下载相关产品信息。 我们的业务需求是,除less数列/单元格外,文件应该是只读的。 我正在使用EPPlus 4.0.4来生成Excel,到目前为止效果很好。 我在这里面临的问题是,当我保护工作表的那一刻,用户不能再调整列的大小(拖动标题来改变列的宽度)。 所以,在一些列中的文本是不可见的。 为了解决这个问题,我使用AutoFit(##代码如下)。 所以,文本现在是可见的。 但是,用户仍然不能改变他们应该能够的列宽。 所以我的问题是,我可以使单元格/列只读,但使他们像正常的Excel重新大小? 我的代码如下 //using OfficeOpenXml; //using OfficeOpenXml.Style; private void ProtectExcel(ExcelWorksheet ws, int columnCount) { ws.Protection.AllowSort = true; ws.Protection.AllowSelectUnlockedCells = true; ws.Protection.AllowAutoFilter = true; for (int i = 1; i <= columnCount; i++) { ws.Column(i).Style.Locked = true; //making read-only ws.Column(i).AutoFit(); //## showing all text } ws.Protection.IsProtected = true; […]

如何从Excel文件中读取一系列单元格(egA1:G30)到GridView

我一直在寻找一个解决scheme在过去的几天,我发现这个图书馆的EPPlus允许检索除了实际数据的同时格式,再加上图表,如果需要,从Excel文件,这是我目前的目标。 你可以请一步一步解释如何通过ASP.NET / C#从Excel(如A1:P34)文件驻留在特定的path,如何读取单元格的范围? path将是类似于//ServerName/Folder1/Folder2/Folder3/ExcelFileName.xlsx 我查看了网页,但是没有关于这方面的C#专业知识水平的明确文档。 我尝试了几个例子,但没有显示Excel范围到网页中。 (比如这个 )。 注意:我试过的三个例子都包含了file upload控件,我不需要这样的。 我想通过本地networking从指定位置读取Excel文件。 EPPlus库在这里可用。 如果您可以推荐我更简单的资源来了解EPPlus: – 从Excel读取 从Excel写入 – 从Excel读取图表 这个EPPlus在function上看起来很棒。

EPPlus配方不能在没有调用计算的情况下工作

我试过在excel INDEX和MATCH中使用两个函数,根据EPPlus codeplex,应该支持这两个函数。 每次我打开文件,都会有一个警告信息,说有什么东西坏了,问我是否要重新打印文件,打开时,所有的公式都不见了。 在修复文档时,会显示一个对话框,表明该公式已从/xl/worksheets/sheet1.xml-del删除。 我可以将公式手动放入spreedsheet中,并且可以正常工作,但要在生成的xlsx文件中显示任何数据的唯一方法是在工作表上调用Calculate() 。 这将正确输出数据,但我需要的是在文档中的公式。 这里有一个我尝试过的公式的小例子 private byte[] TestingFormula() { using (ExcelPackage pck = new ExcelPackage(_helper.GetTemplateStream("TEST.xlsx"))) { var ws = pck.Workbook.Worksheets[1]; ws.Cells["A4"].Formula = "INDEX($C$1:$D$24;4;2)"; ws.Cells["A6"].Formula = "INDEX(C1:D24;6;2)"; ws.Cells["B26"].Formula = "MATCH($B$12;$C$1:$D$1;0)"; // sum works as expected //ws.Cells["D25"].Formula = "SUM(D2:D24)"; //pck.Workbook.Calculate(); //pck.Workbook.CalcMode = ExcelCalcMode.Automatic; return pck.GetAsByteArray(); } } TEST.xlsx只是一个看起来像这样的模板 那么,我在这里做错了什么?

如何将Excel数据透视表中的“子项”转移到另一列?

我生成一个Excel工作表,其中包含数据格式如下: IOW中,“Total Packages”,“Total Purchases”,“Average Price”以及“Total of Total”值均位于各自总体(或侧重)描述的自己的(Data)列中。 当我转换这些数据时,它将这些值放在每个描述下: 这是有道理的,但习惯于以前的外观的人希望它被复制到数据透视表中。 如何将数据透视表中的描述“子项目”转移到他们自己的列中? 这是我用来生成数据透视表的代码: private void PopulatePivotTableSheet() { string NORTHWEST_CORNER_OF_PIVOT_TABLE = "A6"; AddPrePivotTableDataToPivotTableSheet(); var dataRange = rawDataWorksheet.Cells[rawDataWorksheet.Dimension.Address]; dataRange.AutoFitColumns(); var pivotTable = pivotTableWorksheet.PivotTables.Add( pivotTableWorksheet.Cells[NORTHWEST_CORNER_OF_PIVOT_TABLE], dataRange, "PivotTable"); pivotTable.MultipleFieldFilters = true; pivotTable.GridDropZones = false; pivotTable.Outline = false; pivotTable.OutlineData = false; pivotTable.ShowError = true; pivotTable.ErrorCaption = "[error]"; pivotTable.ShowHeaders = true; pivotTable.UseAutoFormatting = […]

将列表validation添加到除前两行之外的列

我想添加一个下拉列表(validation)创buildExcel时,我已经find了将其添加到整个列的方式,但我的scheme是不同的,因为我只将validation添加到除第一行和第二行以外的整个列。 这是我迄今为止所尝试的: public MemoryStream GetExcelSheet() { using (var package = new ExcelPackage()) { ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Test"); var val = worksheet.DataValidations.AddListValidation("A:A"); val.Formula.Values.Add("Male"); val.Formula.Values.Add("Female"); val.ShowErrorMessage = true; worksheet.Cells["A1"].Formula = null; var stream = new MemoryStream(package.GetAsByteArray()); return stream; } } 我试图取消它: worksheet.Cells["A1"].Formula = null; 希望它会删除某个单元格的validation,但它不工作。 我也试过了 var val = worksheet.DataValidations.AddListValidation("A2:A"); 指定起始行号但生成的Excel文件已损坏。 对此有任何帮助吗?

使用epplus更新现有的工作簿C#

我想添加新的工作表到现有的工作簿,代码运行良好,没有错误,但Excel文件没有得到更新。 这是我的代码 string path = "C:\\TestFileSave\\ABC.xlsx"; FileInfo filePath = new FileInfo(path); if (File.Exists(path)) { using(ExcelPackage p = new ExcelPackage()) { using(stream = new FileStream(path, FileMode.Open, FileAccess.ReadWrite)) { p.Load(stream); ExcelWorksheet ws = p.Workbook.Worksheets.Add(wsName + wsNumber.ToString()); ws.Cells[1, 1].Value = wsName; ws.Cells[1, 1].Style.Fill.PatternType = ExcelFillStyle.Solid; ws.Cells[1, 1].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(184, 204, 228)); ws.Cells[1, 1].Style.Font.Bold = true; p.Save(); } } }

如何使用EPPlus创build数据透视表来过滤一列中的行以及一组列?

要创build数据透视表,需要提供源数据以从中生成数据透视表。 我为此生成了一个“虚拟”表单,其中包含以下原始数据: 我需要从这些数据生成一个数据透视表,这样它就像这样生成: IOW,它需要在“描述”列上有一个filter,允许行被过滤(只显示“辣椒”或其他),并filter显示月份列(该表可以有多达13个月的列9月15日,10月15日等)),以便用户可以select那些“月份年份”列中的1..13列来显示(技术上,他们可以select0,但是重点是什么)? 如何才能做到这一点? 我已经尝试了以下内容: private void AddPivotTable() { var dataRange rawDataWorksheet.Cells[rawDataWorksheet.Dimension.Address]; dataRange.AutoFitColumns(); var pivotTable usagePivotWorksheet.PivotTables.Add(usagePivotWorksheet.Cells["A6"] dataRange, "ProdUsagePivot"); pivotTable.MultipleFieldFilters = true; pivotTable.GridDropZones = false; pivotTable.Outline = false; pivotTable.OutlineData = false; pivotTable.ShowError = true; pivotTable.ErrorCaption = "[error]"; pivotTable.ShowHeaders = true; pivotTable.UseAutoFormatting = true; pivotTable.ApplyWidthHeightFormats = true; pivotTable.ShowDrill = true; var descPageField = pivotTable.Fields["Description"]; pivotTable.PageFields.Add(descPageField); descPageField.Sort […]

如何更改EPPlus中的ColumnField列标题的格式?

我在EPPlus中创build了一个列字段,如下所示: // Column field[s] var monthYrColField = pivotTable.Fields["MonthYr"]; pivotTable.ColumnFields.Add(monthYrColField); …如此显示(“201509”和“201510”列): 我希望这些值显示为“9月15日”和“10月15日” 在Excel Interop中,它是这样做的: var monthField = pvt.PivotFields("MonthYr"); monthField.Orientation = XlPivotFieldOrientation.xlColumnField; monthField.NumberFormat = "MMM yy"; …但在EPPlus中,相应的variables(monthYrColField)没有“NumberFormat”(或“Style”)成员。 我试过这个: pivotTableWorksheet.Column(2).Style.Numberformat.Format = "MMM yy"; …但是,虽然没有抱怨或肆虐,也没有改变“201509”和“201510” 如何将EPPlus中的ColumnField列标题的格式从“未转换”更改为“MMM yy”格式? UPDATE 对于VDWWD: 正如您在评论中看到的那样,有许多与数据透视表相关的东西无法使用,或者难​​以在EPPlus中工作; 与EPPlus相比,Excel Interop是一只熊(而不是泰迪熊或考拉,但更像是灰熊),但对于数据透视表来说,与Exterop的油炸脆脆性相比,EPPlus似乎是一半。 private void PopulatePivotTableSheet() { string NORTHWEST_CORNER_OF_PIVOT_TABLE = "A6"; AddPrePivotTableDataToPivotTableSheet(); var dataRange = pivotDataWorksheet.Cells[pivotDataWorksheet.Dimension.Address]; dataRange.AutoFitColumns(); var pivotTable = […]

工作表位置超出范围。 连接已closures。 使用EPPLUS时

我试图打开一个XLSX文件作为模板(我甚至使用了一个空白的XLSX文件),使用EPPLUS 4.0.3。 如果我不打开模板文件(空白或真实的),只是创build一个新的工作簿,并创build工作表,它工作正常。 或者如果我打开模板文件,并创build一个新的工作表,那么它工作正常。 只有当我尝试访问模板中的第一张表格时,出现错误: 工作表位置超出范围。 像这样访问第一个工作表: workBook.Worksheets.First() 。 首先不再是一个定义。 所以我尝试访问第一个工作表的名字和这个方法workBook.Worksheets[1]使用0和1来尝试获取第一个工作表。 我的代码: var existingTemplate = new FileInfo(_ExcelTemplateFilePath); using (ExcelPackage p = new ExcelPackage(existingTemplate)) { // Get the work book in the file ExcelWorkbook workBook = p.Workbook; ExcelWorksheet ws = workBook.Worksheets[1]; // MY OTHER EXCEL CELL CODE HERE }} 有谁知道如何访问第一张和Excel文件?

EPPlus:date列返回int而不是实际显示的文本值

我正在使用EPPlus来读取excel数据。 我需要显示在网格中的Excel单元格的用户。 而阅读date列EPPlus正在给出date的OADate int值。 有没有一种方法可以读取string的值,用户在打开excel时通常会看到这些值。 即应用excel格式后的值。 似乎没有提供valueAsString或valueAsDisplayed等等的CELL类的任何function…