C# 改变;代币;包含来自OpenXml的电子表格文档的.xlsx文档

C# 改变;代币;包含来自OpenXml的电子表格文档的.xlsx文档,c#,excel,openxml,C#,Excel,Openxml,在验证过程中,xlsx文档将转换为pdf 在这个xlsx文档中,有一些“令牌”,需要用适当的值覆盖它们。 为此,我使用以下方法: byte[] fileContent = document.Contents; using (MemoryStream mem = new MemoryStream()) { mem.Write(fileContent, 0, (int)fileContent.Length); OverrideXLSX(mem,

在验证过程中,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); 
    }
byte[]fileContent=document.Contents;
使用(MemoryStream mem=new MemoryStream())
{  
mem.Write(fileContent,0,(int)fileContent.Length);
覆盖EXLSX(mem,文件);
}          
私有静态字节[]覆盖EXLSX(MemoryStream mem,文档)
{
字节[]返回;
使用(SpreadsheetDocument sprDoc=SpreadsheetDocument.Open(mem,true))
{                      
foreach(sprDoc.WorkbookPart.WorksheetParts中的工作表部分工作表部分)
{               
文件部分(工作表部分、文件);
}       
记忆位置=0;
toReturn=mem.ToArray();
}
回归回归;
}
私有静态无效重写xmlPart(OpenXmlPart,文档)
{
foreach(xmlPart.Parts中的IdPartPair部分)
重写xmlpart(part.OpenXmlPart,文档);
string docText=string.Empty;
使用(StreamReader sr=newstreamreader(xmlPart.GetStream()))
docText=sr.ReadToEnd();

if(docText.StartsWith)(“您没有显示
OverrideTokens
,它是代码的一个关键部分。这里的令牌到底是什么:占位符?如果是这样,请将其图像如下:私有字符串OverrideTokens(string docText,Document Document){return docText.Replace(“token_id,Document.id);}”它有点复杂,但基本上这部分工作正常。你能添加一个最小的例子吗(我想需要一个基本的xlsx)以便我们能够验证当前与预期的结果?此帖子的答案包含缺少的部分:您没有显示
OverrideTokens
,它是您代码的关键部分。这里的确切标记是什么:占位符?如果是,请像这样看:私有字符串OverrideTokens(字符串docText,文档文档){return docText.Replace(“token_id”,document.id);}这有点复杂,但基本上这部分工作正常。你能添加一个最小的示例(我想需要一个基本的xlsx)吗,这样我们就可以验证当前和预期的结果了?这篇文章的答案包含缺少的部分: