使用OpenXml中的SpreadsheetDocument更改.xlsx文档中的“标记”

在validation过程中,xlsx文件被转换为pdf。

在这个xlsx文件里面有一些“令牌”,它们需要用正确的值来覆盖。 要做到这一点,我使用这个:

byte[] fileContent = document.Contents; using (MemoryStream mem = new MemoryStream()) { mem.Write(fileContent, 0, (int)fileContent.Length); OverrideXLSX(mem, document); } private static byte[] OverrideXLSX(MemoryStream mem, Document document) { byte[] toReturn; using(SpreadsheetDocument sprDoc = SpreadsheetDocument.Open(mem, true)) { foreach(WorksheetPart worksheetPart in sprDoc.WorkbookPart.WorksheetParts) { OverridXmlPart(worksheetPart, document); } mem.Position = 0; toReturn = mem.ToArray(); } return toReturn; } private static void OverridXmlPart(OpenXmlPart xmlPart, Document document) { foreach (IdPartPair part in xmlPart.Parts) OverridXmlPart(part.OpenXmlPart, document); string docText = string.Empty; using(StreamReader sr = new StreamReader(xmlPart.GetStream())) docText = sr.ReadToEnd(); if (docText.StartsWith("<?xml ") && docText.IndexOf("token_", StringComparison.InvariantCultureIgnoreCase) > 0) { docText = OverrideTokens(docText, document); //This is chaning the tokens to the right one in thext using (StreamWriter sw = new StreamWriter(xmlPart.GetStream(FileMode.Create))) sw.Write(docText); } } private string OverrideTokens(string docText, Document document) { return docText.Replace("token_id", document.Id); } 

但是这只是改变了一些令牌。 看起来我没有在所有的地方search。 有人可以指出我在这里做错了吗?

下面是更改记号前的xlsx示例,并生成了pdf: https ://1drv.ms/f/s!AiO9pakkDfFygaI57tLcxWBC3q68IA

答案如下: 打开xml excel在占位符中插入实际值