Tag: openxml sdk

使用OpenXmlSDK将行附加到Excel文档的末尾c#

我需要使用OpenXmlSDK将行附加到xls / xlsx文档的末尾。 有类似的问题,但build议的方法分配整个表在内存中抛出我的情况下内存不足。 我遵循SAX的方法,但也产生了内存不足。 有没有一种方法来追加xlsx文件? 我还没有在OpenXmlWriterfind这样的选项。 private static void OpenXMLSDKAppendRows(string fileName, int numRows, int numCols) { { using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(fileName, true)) { WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart; WorksheetPart worksheetPart = workbookPart.WorksheetParts.First(); using (OpenXmlWriter openXmlWriter = OpenXmlWriter.Create(worksheetPart)) { Row row = new Row(); Cell cell = new Cell(); CellValue value = new CellValue("Test"); cell.AppendChild(value); […]

如何使用OpenXML SDK访问Excel工作表中的FormControlcheckbox

我有一个电子表格,在工作表上的各个单元格中有一些checkbox,我需要从ac#程序中获取(选中/取消选中)的值。 我正在使用OpenXML SDK v2.5和相关的工具箱。 使用工具箱,我可以看到checkbox控件作为AlternateControlParts集合的一部分。 这些不是ActiveXcheckbox,而是通过Excel中的开发人员选项卡添加的表单控件。 当我使用SDK时,我也可以看到WorkSheetPart上有一个ControlPropertiesParts集合,它列出了所有的checkbox。 我的问题是,我怎么find哪个checkbox是在哪个单元格中,或者至less与哪个单元格有关? 我也发现了集合wsPart.ControlPropertiesParts.First()。DrawingsPart .WorkSheetDrawing.DrawingsPart.WorkSheetDrawing 这个集合似乎有每个checkbox的替代内容,如果我深入下钻,我可以find看起来相对于表单元格的checkbox位置的锚点。 然而,列和行ID似乎并不完全匹配,我怀疑偏移值也可能与它有关。 如果有人能指出我如何将checkbox映射到正确的行/单元格的正确方向,我将非常感激。 感谢您的任何帮助。 问候保罗

OpenXmlReader不是从一个excel .xlsx表格VB网页中提取所有的单元格内容

OpenXmlReader不从Excel .xlsx表单中提取所有单元格内容 我有一些原来从SO采取的代码,并转换为VBnetworking: 使用OpenXmlReader 我的代码在工作表的前14行循环,没有任何问题,但是不会再find任何单元格。 reader.ElementType似乎查找行 14(如果reader.ElementType是GetType(Row)Then),但没有更多的单元格 (GetType(单元格)) 最后提取的单元格是L14,但是excel文件的单元格内容最多为L29。 源代码: Public Shared Function fncParseXLSXorXLSM(strFileName As String, sbTxtFromFile As StringBuilder) As StringBuilder sbTxtFromFile.Length = 0 Dim intFirst As Integer = 1 Try Using spreadsheetDocument__1 As SpreadsheetDocument = SpreadsheetDocument.Open(strFileName, False) Dim workbookPart As WorkbookPart = spreadsheetDocument__1.WorkbookPart Dim sharedStringItemsArray As SharedStringItem() = workbookPart.SharedStringTablePart.SharedStringTable.Elements(Of SharedStringItem)().ToArray() Dim sheets As DocumentFormat.OpenXml.Spreadsheet.Sheets […]

问题插入页脚在Excel中 – OpenXML

我发送Excel文件作为内存stream,编辑它们,然后将它们发送回浏览器,以便它们在客户端办公程序(Microsoft Excel)中打开。 在编辑过程中,我在工作簿中的所有Excel工作表上添加页脚。 页脚的插入在大多数情况下都是这样工作的,但是如果我编辑的Excel文件有很多带有graphics等的“复杂”工作表,它就会失败。 这是我用来插入页脚的代码 // Adds footer to all sheets in the workbook except the one inserted by code private static void AddFooterToAllSheets(SpreadsheetDocument spreadSheetDocument, string footerText, string sheetTitle) { var workbookPart = spreadSheetDocument.WorkbookPart; var workbook = spreadSheetDocument.WorkbookPart.Workbook; var sheetIndex = 0; //variable worksheetpart is not used in code, but added here because of looping […]

使用EPPlus或类似POI的或其他基于OpenXml的库来embedded文件(列/行锚定)的简单方法?

我一直在使用E-IceBlue的Spire.XLS库( License Purchase Page | nuget Package ),虽然非常出色,但我遇到了一些障碍。 我要求的要点是: 我必须从我们的内部networkingpipe理系统取得大量数据,以及用户上传的附件,并定期将这些信息通过电子邮件发送给公司外部的第三方。 我们最初是分别发送数据和用户上传的附件,但是随着文件变得越来越多和笨拙 – 我得到了要求将所有内容合并到一个文件中的请求。 附件足够小,可以embedded,所以我通过使用Spire.XLS创build了一个Excel报告来实现这个function – 这使我不仅可以将OleObjects添加到包中,而且可以将它们定位到特定的行或列,很好地保持与来自CMSlogging的数据的良好的可视链接。 因此,我可以将所有数据放在A到AB列的一行中,并且附件开始出现在列AC,AD等行的末尾。 就我如何实现这一点而言 – 我从CMS获取数据,遍历每个项目(包括附件/文件数据),获取相关文件types的默认图像/图标,在Worksheet上创build一个OleObject,然后我把它定位 – 有点像这样: MyAttachmentCollection attachments = GetAttachments(itemId); foreach(File attachment in attachments) { string fileType; string localFilePath; // Use WebClient to download file locally.. /* — pseudo-code omitted for brevity — */ worksheet.OleObjects.Add(localFilePath, image, OleLinkType.Embed); worksheet.OleObjects.Last().Location = […]

C#Azure文件存储CloudFile.OpenWrite与OpenXml.SpreadsheetDocument问题…需要FileMode和FileAccess选项?

我正在处理DocumentFormat.OpenXml.SpreadsheetDocument并打开Excel文档的模板,写入并保存它。 它像一个正常的文件stream的魅力: using (var documentStream = System.IO.File.Open("–somePath–", FileMode.Open, FileAccess.ReadWrite)) { using (var document = SpreadsheetDocument.Open(documentStream, true)) { // do something } } 注意SpreadsheetDocument.Open 现在,我正在将此应用程序重写为Azure,并在“WindowsAzure.Storage”包中使用Azure存储和.NET文件库。 它的作用就像一个魅力,所有这一切都要在Azure中填写相同的Excel文件。 using (var documentStream = _GetRootDirectoryOfAccount().GetFileReference("–someRelativePath–").OpenWrite(null)) { using (var document = SpreadsheetDocument.Open(documentStream, true)) { // do something } } 第一部分“ _GetRootDirectoryOfAccount()。GetFileReference ”工作100%,然后OpenWrite(null)确实打开一个stream。 但是,当该stream被推向电子表格时: SpreadsheetDocument.Open(documentStream, true) 它打破了: System.IO.IOException:'无法打开包,因为FileMode或FileAccess值对stream无效。 这是因为在stream上的设置没有设置: System.IO.File.Open(“ – somePath–”, […]

用DocumentFormat.OpenXML创build一个格式化的电子表格?

我想用DocumentFormat.OpenXML创build一个电子表格。 我一直在努力工作,所以我想在这里寻求帮助。 我想以编程方式在运行时创build一个电子表格从一个ASP.net网站下载。 (1)我希望电子表格包含来自SQL数据库的一些数据行。 我希望行标题由黄色背景上的黑色文本组成。 我有一些string数据,这可能包含数字string。 我希望它在任何时候都被视为一个string(即,我不希望31415926535被呈现为3.1415926e10) (2)我想在最后一行数据下面出现一个300px x 300px的PNG图像。 该图像作为hello.png保存在服务器上。 我需要编写哪些代码才能使(1)和(2)发生?

使用OpenXmlSDK,我如何select/更新范围控制的单元格中的值?

我甚至不确定是否使用了正确的术语; 我会根据需要更新问题和标题。 我正在使用OpenXmlSDK来填充预先存在的Excel 2010 .xlsm文件 – 一个启用macros的工作表。 我可以很好地访问工作表和单元格。 然而,我不知道如何访问或更新单元格中的数据,这是一个下拉控件,从另一个工作表上的范围中取值。 在工作表上标记为“H13”,并右键单击>>格式控制显示 Input range: 'anotherWorksheet'!$N$3:$N$54 Cell link: 'anotherWorksheet'!$M$3 每当我试图获得对这个单元格的引用,我找不到它 – 我得到一个null值 我已经尝试了两种访问方法: 我甚至不确定是否使用了正确的术语; 我会根据需要更新问题和标题。 我正在使用OpenXmlSDK来填充预先存在的Excel 2010 .xlsm文件 – 一个启用macros的工作表。 我可以很好地访问工作表和单元格。 然而,我不知道如何访问或更新单元格中的数据,这是一个下拉控件,从另一个工作表上的范围中取值。 在工作表上标记为“H13”,并右键单击>>格式控制显示 Input range: 'anotherWorksheet'!$N$3:$N$54 Cell link: 'anotherWorksheet'!$M$3 每当我试图获得对这个单元格的引用,我找不到它 – 我得到一个null值 我已经尝试了两种访问方法: // http://msdn.microsoft.com/en-us/library/ff921204.aspx private static Cell GetCell(Worksheet worksheet, string addressName) { return worksheet.Descendants<Cell>().Where( c => c.CellReference […]

使用OpenXML访问Excel行中的单元格值 – 未将对象引用设置为对象的实例

我有一个需要从Excel电子表格读取值并将值保存到数据库。 问题,我似乎在这个时候正在访问我的行对象中的列中的单个值 http://msdn.microsoft.com/en-us/library/office/documentformat.openxml.spreadsheet.cellvalue.aspx var cellValues = from cell in row.Descendants<Cell>() select (cell.DataType != null && cell.DataType.HasValue && cell.DataType == CellValues.SharedString && int.Parse(cell.CellValue.InnerText) < sharedString.ChildElements.Count ? sharedString.ChildElements[int.Parse(cell.CellValue.InnerText)].InnerText : cell.CellValue.InnerText); 不幸的是,上面的代码似乎没有做这项工作,因为它在运行时会引发exception,所以如何使用OpenXML访问包含在Excel Row对象中的值的最佳想法。 + $ exception {“对象引用未设置为对象的实例”} System.Exception {System.NullReferenceException} 结果StackTrace at MOC.Import.Products.<ProcessRows>b__0(Cell cell) in c:\Development\CFrontEnd\MOC.Import\Products.cs:line 37 at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at System.Linq.Enumerable.Count[TSource](IEnumerable`1 source) at MOC.Import.Products.ProcessRows(IEnumerable`1 dataRows, SharedStringTable sharedString) in c:\Development\CFrontEnd\MOC.Import\Products.cs:line […]

Excel备用行

我为交替行样式创build了条件格式规则。 它将单元格的单元格填充更改为某种颜色。 我遇到的问题是,它会覆盖已经在单元格上的任何其他格式。 所以如果这个单元格已经有一个背景填充,它将覆盖它。 我不想要这样的事情发生。 如何编写另一个公式或更改此公式,以便在单元格已经填充时不填充。 公式: =MOD(ROW()/2,1)>0