DocumentFormat.OpenXml版本2.8在使用MergeField时不起作用

问题描述 投票:0回答:1

我正在尝试用数据库中的Text替换mergeField。我之前在2.5版中就已经做到了,它可以完美地工作(.Net framework 4)。我尝试通过与.Net标准一起使用.Net Core来执行相同操作,但是存在问题。我尝试调试,但发现找不到在文档中插入的mergeFields。因此,我复制,清除了文档并粘贴了它,然后它起作用了。之后,我尝试对其进行编辑,但更改未反映出来。我尝试再次复制和粘贴,这是提取的同一合并字段。它的怪异。这是一个代码片段。请帮助。

 using (WordprocessingDocument _document = WordprocessingDocument.Open(filePath, true))
        {

            _document.ChangeDocumentType(WordprocessingDocumentType.Document);

            _document.GetMergeFields("ref_no").ReplaceWithText(refNo);
            _document.MainDocumentPart.Document.Save();

            mergeFields = _document.MainDocumentPart.RootElement.Descendants<FieldCode>().ToList();

            for (int i = 0; i < request.Data.Count; i++)
            {
                if (request.Data[i].ControlTypeId == (int)FormControlTypeEnum.DATE)
                {
                    _document.GetMergeFields("v" + request.Data[i].Index.ToString().Trim()).ReplaceWithText(DateTime.Parse(request.Data[i].Data).ToShortDateString());
                    _document.MainDocumentPart.Document.Save();
                }
                else if (request.Data[i].ControlTypeId == (int)FormControlTypeEnum.MONEY)
                {

                    _document.GetMergeFields( request.Data[i].Index.ToString().Trim()).ReplaceWithText(string.Format(formatter, "{0:c}", double.Parse(request.Data[i].Data)));
                    _document.MainDocumentPart.Document.Save();

                }
                else

                {
                    _document.GetMergeFields(request.Data[i].Index.ToString().Trim()).ReplaceWithText(request.Data[i].Data);
                    _document.MainDocumentPart.Document.Save();
                }



            }
            ////document.GetMergeFields(newDoc.jsonFields[i].controlName).ReplaceWithText(newDoc.jsonFields[i].data);
            ////document.MainDocumentPart.Document.Save();


        }







 public static IEnumerable<FieldCode> GetMergeFields(this WordprocessingDocument doc, string mergeFieldName = null)
    {
        if (doc == null)
            return null;

        List<FieldCode> mergeFields = doc.MainDocumentPart.RootElement.Descendants<FieldCode>().ToList();
        foreach (var header in doc.MainDocumentPart.HeaderParts)
        {
            mergeFields.AddRange(header.RootElement.Descendants<FieldCode>());
        }
        foreach (var footer in doc.MainDocumentPart.FooterParts)
        {
            mergeFields.AddRange(footer.RootElement.Descendants<FieldCode>());
        }

        if (!string.IsNullOrWhiteSpace(mergeFieldName) && mergeFields != null && mergeFields.Count() > 0)
            return mergeFields.WhereNameIs(mergeFieldName);

        return mergeFields;
    }
c# ms-word openxml-sdk
1个回答
0
投票

我必须降级该库的较低版本才能正常工作

© www.soinside.com 2019 - 2024. All rights reserved.