Tag: openxml

OpenXML – 更新单元格后刷新Excel工作表

我有一个使用OpenXML SDK读取和写入Excel(xlsx)单元的类。 该类基于从这里投票最多的答案: Open XML SDK 2.0 – 如何更新电子表格中的单元格? 我需要更新一个单元格,然后获取另一个单元格的值,其中包含一个计算公式。 更新工作正常,但是当我读取更新后的公式单元格时,我获得了编辑前存在于文档中的旧值。 但是,当我运行程序后手动打开我的xlsx时,可以看到正确的值。 所以看起来细胞的旧值被caching在某个地方……这很奇怪,因为我每次在读/写单元格之前打开/closures我的文档。 编辑:文森特的答案让我更新我的示例代码。 我添加了一个Refresh方法,打开,保存并closures在后台运行的Excel应用程序中的文档。 这重新计算我的公式。 有关更多详细信息和C#代码示例,请参阅: http : //fczaja.blogspot.com/2013/05/how-to-read-and-write-excel-cells-with.html

.NET EPPlus OpenXml – 在每一页重复Excel行

我试图在每个Excel页面上保留一行(标题字段)。 我正在使用EPPlus库中包含的OpenXML。 我试过下面这行代码: myWorkSheet.PrinterSettings.RepeatRows = New ExcelAddress(String.Format("${0}:${0}", firstRowNummerExcel.ToString())) 这不会对我造成错误或崩溃,但只是没有做任何特别的事情… PrinterSettings对象似乎工作,执行下面的代码行工作: worksheetVertrokkenRunderen.PrinterSettings.ShowHeaders = true 这让我觉得可能插入的ExcelAddress不正确?

如何使用OpenXML包自动调整excel列

生成Excel电子表格的代码使用openxml包。 请任何人告诉如何自动适应其列宽。 OpenXmlPackage.SpreadsheetDocument spreadsheetDocument = OpenXmlPackage.SpreadsheetDocument.Create(downloadFilePath, OpenXml.SpreadsheetDocumentType.Workbook); // Add a WorkbookPart to the document. OpenXmlPackage.WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart(); // Add a WorksheetPart to the WorkbookPart. workbookpart.Workbook = new OpenXmlSpreadsheet.Workbook(); int numDates = datesObject.Length; // Add Sheets to the Workbook. OpenXmlSpreadsheet.Sheets sheets = new OpenXmlSpreadsheet.Sheets(); OpenXml.UInt32Value sheetId = 1; OpenXmlPackage.WorksheetPart firstWorksheetPart = workbookpart.AddNewPart<OpenXmlPackage.WorksheetPart>(); firstWorksheetPart.Worksheet = new […]

使用Open XML将date添加到Excel

我想用Open XML插入Date值到excel文件。 这是我的代码示例。 cell.CellValue = new CellValue(value.ToString()); cell.DataType = new EnumValue<CellValues>(CellValues.Date);

使用Apache POI将电话号码存储在Microsoft Excel XSSF中

我有一个电话号码作为string存储在Excel中,Excel文件已成功创build,数据没有错误,但每个电话号码旁边都有一个“存储为文本的数字”错误。 我已经在网上阅读过,我应该使用excel或自定义000-000-0000格式附带的特殊电话号码格式。 我可以设置这些使用Excel程序,但不是从我的Java代码。 我已经查找周围的setCellType和DataFormat的信息,但我认为CellType必须是string,我不明白如何使用DataFormat除了date之外的任何东西。 我也看了DataFormatter,但我不明白如何使用它来存储数据。 它看起来只是为了帮助阅读数据。 http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/DataFormatter.html 我怎样才能做到以下任一情况? 1)将单元格标记为“忽略错误”,忽略“存储为文本的数字”错误 2)利用内置的Excel单元格格式“Special> Phone Number” 对于1)看起来有一个标志,通过保存和closures文件持续存在,我不知道如何编辑或查看与POI。 有一个关于它的文章: excel文档的页面669和670包含FeatFormulaErr2,这是FeatRecord共享function,理论上允许您存储的事实,即“数字作为文本”应忽略单元格范围 我们还得到了两个testing文件,一个是警告,一个是closures的 – 46136-NoWarnings.xls和46136-WithWarnings.xls。 但是我没有创build它们! Nick http://mail-archives.apache.org/mod_mbox/poi-user/201003.mbox/%3C27823222.post@talk.nabble.com%3E 看来这可以在VBA中完成cell.Errors.Item(xlNumberAsText).Ignore = True但似乎没有POI

Excel表格validation/公式不被复制到新表格行

我目前正在使用EPPlus库来将大量数据导出到这些工作表中的几个工作表和表格中。 我已经能够创build列表validation,并通过名为范围的查找工作表完全正常工作。 但是,我遇到了一些我一直无法想象的奇怪的行为。 开始: 我下载文件。 我打开文件。 我select一个包含表格的电子表格,表格中有多行,有一个列表validation列,选项是/否从下拉列表中select。 每一行都有这个列表validation。 情况1: 然后,我通过从Excel表格的右下angular拖动来创build新行,在Excel表格中创build一个新行。 该公式未复制到新行。 我现在已经失去了在我的Excel表中新行的validation。 情景2: 我删除了Excel表中的所有现有行,第一行除外(仍然包含“是/否”列中的列表validation)。 我然后通过从Excel表格的右下angular拖动来创build新行,在Excel表格中创build一个新行。 公式被复制到新行,我现在可以通过使用提供的validation插入新的有效数据到这一行。 我的代码的逻辑: 每个单元格都有一个循环validation应用到它的单元格需要具有的validationtypes(即数量,date,列表,大于,小于等)。 列表validation通过指定的表查找地址进行访问。 有没有XML输出错误,文件打开罚款,我可以从单元格访问列表validation没有任何问题。 我试图解决这个问题的事情: 1)填充单元格范围,然后从这个范围创buildexcel表格。 – 这背后的想法是,首先有一个创build的数据select,然后select范围,只是把它变成一个Excel表。 对于表中的新行,默认行为是从上面的行复制公式。 所以这个解决scheme似乎合乎逻 2)在一系列未填充的单元格上创build一个Excel表格,然后填写该范围。 – 背后的想法是,EPPlus在工作表中创build表格的方式可能存在一个错误,或者XML元素的顺序可能存在问题,实际上只是一个实验性更改。 代码: var strategy = Strategy.CreateTableFirst; ExcelRange subRowDataRange = null; ExcelTable table = null; if (strategy == Strategy.CreateTableFirst) { subRowDataRange = worksheet.Cells[headerRowIndex, worksheet.Dimension.Start.Column, ToRow: headerRowIndex + groupedRowData.Count(), […]

Excel中的文本部分颜色> 255个字符

我已经为第三方sw编写了一个插件,它可以将修改后的文本提取到Excel工作表中,然后在Excel中着色更改的部分。 只要每个文本段(=单元格内容)不超过255个字符,这都是有效的。 唉,这可以,偶尔也会发生。 为了在Excel中识别已更改的部分,我用<del>和res。 用于删除和添加文本的<add>标签。 然后我为这些部分着色(并删除周围的标签),如下所示: while (((string)cell1.Text).Contains("<del>")) { try { var pos = ((string) cell1.Text).IndexOf("<del>") + 1; var pos2 = ((string) cell1.Text).IndexOf("</del>") + 1; var txt = cell1.Characters[pos, (pos2-pos) + 9].Text; txt = txt.Replace("<del>", "").Replace("</del>", ""); cell1.Characters[pos, (pos2-pos) + 9].Text = txt; cell1.Characters[pos, txt.Length-3].Font.Color = -16776961; } catch { break; } } 我正在使用Interop,因为我觉得使用起来要容易得多,而且因为找不到像OpenXML这样的例子。 但是我意识到Excel在单元格文本方面有其局限性,所以我愿意提供build议。 […]

使用SDK轻松编辑Excel电子表格

有没有人使用Microsoft Open XML SDK 2.0来编辑Excel电子表格,我已经通过XML方法编辑了Open XML文档,但是由于存在SDK,是否有人知道对于一些基本function是否有真正简单的方法? 例如插入一个单元格中的内容。 另外Open XML Power Tools(在codeplex上发布)主要使用我认为的XML对象。 如果你有经验,你能给我一个例子,或者我可以find有用的例子的提示吗? 我已经知道该网站openxmldeveloper.org,但研讨会video根本没有帮助我。 谢谢 塞巴斯蒂安

如何使用OpenXML API从Excel电子表格中读取表格?

我已经阅读了一些关于如何使用OpenXML API获取单元格数据的东西。 但是那里真的没什么特别直接的。 大多数似乎是写作SpreadsheetML,而不是阅读…但即使这并没有多大帮助。 我有一个电子表格,里面有一个表格。 我知道表名是什么,我可以找出它在哪个表上,以及表中有哪些列。 但我不知道如何获取包含表中数据的行的集合。 我已经得到这个加载文件,并获得工作簿的句柄: SpreadsheetDocument document = SpreadsheetDocument.Open("file.xlsx", false); WorkbookPart workbook = document.WorkbookPart; 我有这个find表/表格: Table table = null; foreach (Sheet sheet in workbook.Workbook.GetFirstChild<Sheets>()) { WorksheetPart worksheetPart = (WorksheetPart)document.WorkbookPart.GetPartById(sheet.Id); foreach (TableDefinitionPart tableDefinitionPart in worksheetPart.TableDefinitionParts) { if (tableDefinitionPart.Table.DisplayName == this._tableName) { table = tableDefinitionPart.Table; break; } } } 我可以遍历table.TableColumns遍历表中的列。

使用vb.net在大型excel文件上执行SQL Query的最佳方法是什么?

安装环境: 我正在开发一个Excel 2010应用程序级插件,使用.NET框架4使用vb.net。 我的目标: 让用户键入多个名称进行search 使用名称列表在大电子表格上执行SQL查询(30,000多行) 返回logging集并粘贴到新的工作表中 性能是我的首要任务。 我想知道利用.NET框架来做到这一点的最快方法。 在我的代码中使用ADO连接对象的工作,但过程需要太长时间(5 – 8秒)。 这是我在名为wells的表上使用的SQL查询: SELECT * FROM wells WHERE padgroup in (SELECT padgroup FROM wells WHERE name LIKE 'TOMCHUCK 21-30' OR name LIKE 'FEDERAL 41-25PH') 以下是表格的一部分: 我现在使用这个代码来创build一个ADO连接对象来检索我的结果: 'Create Recordset Object rsCon = CreateObject("ADODB.Connection") rsData = CreateObject("ADODB.Recordset") rsCon.Open(szConnect) rsData.Open(mySQLQueryToExecute, rsCon, 0, 1, 1) 'Check to make sure […]