Tag: openxml sdk

OpenXML从Worksheet获取工作表名称

我正在迭代我的工作表 WorkbookPart wbPart = doc.WorkbookPart; SharedStringTablePart sstPart = wbPart.GetPartsOfType().First(); SharedStringTable sst = sstPart.SharedStringTable; foreach (var wsp in wbPart.WorksheetParts) { Worksheet ws = wsp.Worksheet; // i want to do something like this if (ws.Name == “People_Sheet”) { } } 我需要知道我正在处理哪张纸,所以我可以用不同的方式处理它。 如何获取工作表的名称(当我从excel中打开它时显示)? 如果我得到一张表单,我可以通过属性找到它 doc.WorkbookPart.Workbook.Sheets.ToList().ForEach(x => Console.WriteLine(x.GetAttribute(“name”, “”).Value)); 但是工作表和工作表之间的关系是什么? 如何从工作表中获取相应的工作表或工作表名称? 更新: 所以我确实找到并尝试了如何使用OpenXML从excel表中检索Tab名称 但是,sheetName与工作表不匹配。 foreach (var wsp in wbPart.WorksheetParts) […]

在Windows Phone 8中以编程方式(逐个单元格)读取/导入现有Excel文件

我正在使用Windows Phone 8应用程序来读取/写入Excel文件。 我在这里问了一个问题和提供的评论以及许多其他链接让我转向OpenXml 。 所有这些让我对如何创建 Excel文件以及如何启动它有了很好的了解。 但是现在我陷入了这些所有的基本问题,即如何读取现有的Excel文件(可能是使用MS Excel在外部创建)逐个单元格,即我想通过我的代码访问每个单元格及其值。 在openXML中我做了这个: Stream localFile = App.GetResourceStream(new Uri(“/ReadExcel;component/jai.xlsx” ,UriKind.Relative)).Stream; MemoryStream ms = new MemoryStream(); localFile.CopyTo(ms); DocumentFormat.OpenXml.Packaging.SpreadsheetDocument spreadsheetDoc = DocumentFormat.OpenXml.Packaging.SpreadsheetDocument.Open(localFile, true); { var a = spreadsheetDoc.Package; // Do work here } 但它给了我错误: The type ‘System.IO.Packaging.Package’ is defined in an assembly that is not referenced. You must add a reference […]

打开xml sdk excel公式重新计算缓存问题

我已经查看了之前所有类似问题的答案,但这些答案都不起作用。 我传入excel中的值,并希望公式单元格重新计算,但它仍然显示旧的值。 我使用了2种技术1)从单元格中删除计算出的值2)以编程方式打开和关闭文件。 它们都不适合我。 这是我的代码。 请帮忙。 string filename = Server.MapPath(“/”) + “ExcelData.xlsx”; // getting 2 numbers in excel sheet, saving, and closing it. using (SpreadsheetDocument document = SpreadsheetDocument.Open(filename, true)) { Sheet sheet = document.WorkbookPart.Workbook.Descendants().SingleOrDefault(s => s.Name == “myRange1”); if (sheet == null) { throw new ArgumentException( String.Format(“No sheet named {0} found in spreadsheet {1}”, “myRange1”, […]

Word OpenXML。 遍历书签之间的OpenXmlElements

我需要遍历书签开始和书签结束标记之间的节点。 问题似乎分解为树遍历,但我无法确定正确的算法。 书签开始和结束元素是非复合节点(没有子节点),并且可以出现在树中的任意深度处。 书签开始也不能保证在同一深度。 如果您绘制文档的树结构,我想检查开始和结束书签之间的所有节点。 我认为用于遍历从节点x开始到节点y结束的不平衡树的算法将起作用。 这听起来可行还是我错过了什么。 如果这是可行的,你可以指向我可以完成返回节点的树遍历的方向吗?

在word文档中编辑自定义XML部分有时会破坏文档

我们有一个系统可以在Word文档中存储一些自定义模板数据。 有时,更新此数据会导致Word抱怨文档已损坏。 发生这种情况时,如果我解压缩docx文件并将内容与先前版本进行比较,则唯一的区别似乎是customXML\item.xml文件中的预期更改。 如果我使用7zip重新压缩内容,它似乎工作正常(Word不再抱怨文档已损坏)。 (简化)代码: void CreateOrReplaceCustomXml(string filename, MyCustomData data) { using (var doc = WordProcessingDocument.Open(filename, true)) { var part = GetCustomXmlParts(doc).SingleOrDefault(); if (part == null) { part = doc.MainDocumentPart.AddCustomXmlPart(CustomXmlPartType.CustomXml); } var serializer = new DataContractSerializer(typeof(MyCustomData)); using (var stream = new MemoryStream()) { serializer.WriteObject(stream, data); stream.Seek(0, SeekOrigin.Begin); part.FeedData(stream); } } } IEnumerable GetCustomXmlParts(WordProcessingDocument doc) { […]

OpenXML库保存excel文件

我有以下代码,它没有将值保存到单元格和文件中。 它在cell.cellvalue字段中显示值,但不将其写入excel。 我不知道如何保存文件。 我使用OpenXml-SDK ,我正在为创建的电子表格文档的每个cell/row写入数据表值。 using (SpreadsheetDocument ssd=SpreadsheetDocument.Open(Server.MapPath(@”\ExcelPackageTemplate.xlsx”),true)) { WorkbookPart wbPart = ssd.WorkbookPart; WorksheetPart worksheetPart = wbPart.WorksheetParts.First(); SheetData sheetdata = worksheetPart.Worksheet.GetFirstChild(); string[] headerColumns = new string[] { dt.Columns[0].ColumnName, dt.Columns[1].ColumnName,dt.Columns[2].ColumnName }; DocumentFormat.OpenXml.Spreadsheet.Row r = new DocumentFormat.OpenXml.Spreadsheet.Row(); int RowIndexer = 1; //int colInd=0; r.RowIndex = (UInt32)RowIndexer; string test = ColumnName(RowIndexer); foreach (DataColumn dc in dt.Columns) { DocumentFormat.OpenXml.Spreadsheet.Cell […]

OOXML SDK非法字符替换

我在使用MS的Open XML SDK 2.0创建XLSX文档时遇到问题。 我的问题是我需要在Excel工作表中显示一些这些非法字符,但如果我只是将它们添加到工作表中,则不会加载该文档。 我正在使用这个function private static string ProcessString(string str) { return System.Security.SecurityElement.Escape(str); } 哪个会给我汤姆的球而不是汤姆的球。 (好吧,我还没弄明白如何获得后者,因为生成的excel不会打开。) 有人知道如何在Excel工作表中使用OOXML显示非法XML字符吗? 编辑: 在我用来创建文本单元格的函数中: private static Cell CreateTextCell(string header, UInt32 index, string text) { var c = new Cell { DataType = CellValues.String, CellReference = header + index }; var cellValue = new CellValue(text); c.Append(cellValue); return c; } 我知道它与非法字符有关,因为当我没有在我的文本中包含特定字段时它起作用,然后当我包含它时,Excel会给我一个解析器错误和一个空白文档。 […]

使用XML文件中的数据/基于模板将XML转换为Word文档生成Word文档(docx)

我有一个XML文件,其中包含我需要在Word文档中填充的数据。 我需要找到一种方法,定义一个模板,该模板可以用作从XML文件填充数据并创建输出文档的基线。 我相信有两种方法可以做到这一点。 创建一个将成为“模板”的XSLT文件,并使用它来与XML文件一起使用它生成Word文档。 使用Word中的内容控件来创建模板文档,并以某种方式映射到XML文件。 我只是不知道如何实现这两种方式的细节。 或者不确定是否有另一种更简单的方法来完成此任务。 有人可以举例说明如何实现这一点。 只是一个简单的例子就足够了。 对于任何编码,我更喜欢C#。 我正在使用Word 2016,但希望它从Word 2007到Word 2016兼容,如果可能的话,因为用户将使用这些版本。 谢谢!

使用OpenXML 2.5将数据写入docx文档中的TextInput元素

我有一些docx文件。 我用OpenXML 2.5 SDK阅读它们,并在每个doc中搜索TextInput 。 byte[] filebytes = System.IO.File.ReadAllBytes(“Test.docx”); using (MemoryStream stream = new MemoryStream(filebytes)) using (WordprocessingDocument wordDocument = WordprocessingDocument.Open(stream, true)) { IEnumerable fields = wordDocument.MainDocumentPart.Document.Descendants(); foreach (var field in fields) { IEnumerable textInputs = field.Descendants(); foreach (var ti in textInputs) { <> } } wordDocument.MainDocumentPart.Document.Save(); stream.Flush(); ETC… } 我怎么能在每个TextInput写一个值? 谢谢!

programaticaly在.docx文件中嵌入字体系列

我试图在docx文件中插入字体系列(不是系统字体)。 我正在使用openxml-sdk来实现此function。 不知何故,我能够从特定的docx文件中获取字体信息。 但无法在文档中嵌入字体系列 是否可以使用代码将字体嵌入docx文件中?