首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用c#/openxml重编号脚注

用c#/openxml重编号脚注
EN

Stack Overflow用户
提问于 2013-12-11 09:44:12
回答 1查看 632关注 0票数 1

我的程序应该在一个word文件中重新编号脚注。

我们有一个VBA,它也是这样做的,但是太慢了。

代码语言:javascript
复制
    Dim fussnote As Footnote
    For Each fussnote In ActiveDocument.Footnotes
    fussnote.Reference.Select
    With Selection
       With .FootnoteOptions
            .Location = wdBottomOfPage
            .NumberingRule = wdRestartContinuous
            .StartingNumber = 1
            .NumberStyle = wdNoteNumberStyleArabic
            .NumberingRule = wdRestartSection
       End With
       .Footnotes.Add range:=Selection.range, Reference:=""
    End With
Next

我试图克隆所有脚注,然后遍历它们(以及它们的引用)并更改它们的 Id (Id是正确的属性吗?)

我的代码看起来像这样(不起作用):

代码语言:javascript
复制
        public override void Work(WordprocessingDocument args)
    {
        var __allFootnotes = (Footnotes)args.MainDocumentPart
            .FootnotesPart.Footnotes.Clone();
        var footnotes = __allFootnotes.Elements<Footnote>()
            .SkipWhile(f => !(f.Id.Value > 0)).ToList();
        RenumberFootnotes(footnotes, 
            args.MainDocumentPart.Document.Body.Descendants<Paragraph>().ToList());

        var __styles = args.MainDocumentPart
            .StyleDefinitionsPart.Styles;

        for (int i = 0; i < footnotes.Count(); i++)
        {
            //var footnote = footnotes[i];
        }

        args.MainDocumentPart.FootnotesPart
            .Footnotes = __allFootnotes;
    }


    private void RenumberFootnotes(List<Footnote> footnotes, List<Paragraph> paragraphs)
    {
        var __p = paragraphs.Where(p => p.Descendants<FootnoteReference>().Any());
        var __references = __p.SelectMany(p => p.Descendants<FootnoteReference>());
        for (int i = 1; i < footnotes.Count; i++)
        {
            var __tempId = footnotes[i].Id.Value;
            footnotes[i].Id.Value = i;
            var __reference = __references.First(fr => fr.Id.Value == __tempId);
            __reference.Id.Value = i;
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2015-03-03 00:39:12

从问题中提取的解决办法:

您必须在脚注中将一个新的'FootnoteReferenceMark‘对象添加到运行中。“脚注”是我脚注的变量。然后,我只拿第一个后裔的类型'Run‘,并附加了一个新的子’脚注参考标记‘。

代码语言:javascript
复制
footnote.Descendants<Run>().First().AppendChild(new FootnoteReferenceMark());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20515655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档