Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xceed.Words.NET DocX-将文档添加到主文档并将编号列表重置为1_C#_.net_Ms Word_Docx_Xceed - Fatal编程技术网

C# Xceed.Words.NET DocX-将文档添加到主文档并将编号列表重置为1

C# Xceed.Words.NET DocX-将文档添加到主文档并将编号列表重置为1,c#,.net,ms-word,docx,xceed,C#,.net,Ms Word,Docx,Xceed,你好 我尝试在连接两个文档时重置编号列表。如下例所示 我使用Xceed.Words.NET DocX库 在此示例中,模板为: 测试标题 列表: 1) /// <summary> /// Insert complete WordFile /// </summary> /// <param name="wordFile"></param> public void Inser

你好

我尝试在连接两个文档时重置编号列表。如下例所示

我使用Xceed.Words.NET DocX库

在此示例中,模板为:

  • 测试标题
    列表:
    1)
            /// <summary>
            /// Insert complete WordFile
            /// </summary>
            /// <param name="wordFile"></param>
            public void InsertWordTemplate(IWordFile wordFile, bool InsertPageBreak)
            {
                if (wordFile != null && wordFile.IsFileOk)
                {
                    int pargraphCount = Document.Paragraphs.Count - 1;
    
                   // NotNeeded for this Problem wordFile.RemoveStyles();
    
                  // NotNeeded for this Problem   RemoveHeaderAndFooter(wordFile);
    
                    Document.InsertDocument(wordFile.Document);
    
                  // NotNeeded for this Problem   ReplaceSectionBreak(InsertPageBreak, pargraphCount);
    
                    ResetNumberedList(pargraphCount);
    
                    logger.Info("Word file inserted: " + wordFile.File.FullName);
    
                }
                else
                {
                    logger.Warn("Word file is not okay - will not be inserted: " + wordFile?.File?.FullName);
                }
            }
    
      private void ResetNumberedList(int pargraphCount)
            {
                string styleName1 = "ListNumbers";
                string styleName2 = "PIgeordneteListe2Ebene";
                string styleName3 = "PIgeordneteListe3Ebene";
    
                NumberedListReset numberedListReset = new NumberedListReset(Document, styleName1, styleName2, styleName3);
    
                bool OnlyFirstFoundList = true;
                numberedListReset.Reset(pargraphCount, OnlyFirstFoundList);
            }
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml.Linq;
    using Xceed.Document.NET;
    using Xceed.Words.NET;
    
    namespace PIB.Report.DataWriter.WordExport
    {
        public class NumberedListReset
        {
    
            private readonly DocX _Document;
            private readonly string _StyleName1;
            private readonly string _StyleName2;
            private readonly string _StyleName3;
            public NumberedListReset(DocX Document, string StyleName1, string StyleName2, string StyleName3)
            {
                _Document = Document;
                _StyleName1 = StyleName1;
                _StyleName2 = StyleName2;
                _StyleName3 = StyleName3;
            }
    
            public void Reset(int StartParagraphNumber, bool OnlyFirstFinding)
            {
                for (int i = StartParagraphNumber; i < _Document.Paragraphs.Count; i++)
                {
                    var paragraph = _Document.Paragraphs[i];
                    if (paragraph.IsListItem == true && paragraph.ListItemType == ListItemType.Numbered && paragraph.StyleName == _StyleName1)
                    {
                        //int? numId = GetNumId(paragraph);
                        //if (numId != -1)
                        //{
    
                        //}
                        ResetFoundList(ref i);
    
                        if (OnlyFirstFinding == true)
                        {
                            break;
                        }
                    }
                }
            }
    
            private void ResetFoundList(ref int ParagraphCounter)
            {
                List<ParagraphMemorize> ParagraphMemorizes = CreateMemorizeListItems(ParagraphCounter);
    
                if (ParagraphMemorizes.Count != 0)
                {
                    RemoveOldParagraphsFromDocument(ParagraphMemorizes);
    
                    List numberedList = CreateNewDocumentList();
    
                    FillDocumentList(ParagraphMemorizes, numberedList);
    
                    List<Paragraph> actualListData = numberedList.Items;
    
                    ResetSyleNames(ParagraphMemorizes, actualListData);
    
                    InsertNewParagraphsToDocument(ParagraphCounter, actualListData);
    
                    ParagraphCounter += ParagraphMemorizes.Count;
    
    
                }
            }
            private List<ParagraphMemorize> CreateMemorizeListItems(int ParagraphCounter)
            {
                List<ParagraphMemorize> ParagraphMemorizes = new List<ParagraphMemorize>();
    
    
                for (int ii = ParagraphCounter; ii < _Document.Paragraphs.Count; ii++)
                {
                    var paragraph = _Document.Paragraphs[ii];
    
                    if (!NameIsKnown(paragraph.StyleName))
                    {
                        break;
                    }
    
                    ParagraphMemorize paragraphMemorize = new ParagraphMemorize(paragraph);
    
                    paragraphMemorize.ListLevel = GetListLevel(paragraph);
    
                    ParagraphMemorizes.Add(paragraphMemorize);
    
                }
    
                return ParagraphMemorizes;
            }
    
            private void RemoveOldParagraphsFromDocument(List<ParagraphMemorize> ParagraphMemorizes)
            {
                ParagraphMemorizes.ForEach(m => _Document.RemoveParagraph(m.Paragraph));
            }
    
            private List CreateNewDocumentList()
            {
                return _Document.AddList(startNumber: 1);
            }
    
            private void FillDocumentList(List<ParagraphMemorize> ParagraphMemorizes, List numberedList)
            {
                for (var ii = 0; ii < ParagraphMemorizes.Count; ii++)
                {
                    //numberedList.AddItem(ParagraphMemorizes[ii].Paragraph); //Raised an Error
    
                    ParagraphMemorize paragraphMemorize = ParagraphMemorizes[ii];
    
                    int listLevel = GetListLevel(paragraphMemorize);
                    _Document.AddListItem(numberedList, paragraphMemorize.Text, listLevel);
    
                }
            }
    
            private static void ResetSyleNames(List<ParagraphMemorize> ParagraphMemorizes, List<Paragraph> actualListData)
            {
                for (int ii = 0; ii < actualListData.Count; ii++)
                {
                    actualListData[ii].StyleName = ParagraphMemorizes[ii].StyleName;
                }
            }
    
            private void InsertNewParagraphsToDocument(int i, List<Paragraph> actualListData)
            {
                Paragraph paragraph = _Document.Paragraphs[i];
                for (int ii = 0; ii < actualListData.Count; ii++)
                {
                    paragraph.InsertParagraphBeforeSelf(actualListData[ii]);
                }
            }
    
    
            private bool NameIsKnown(string Name)
            {
                return Name == _StyleName1 | Name == _StyleName2 | Name == _StyleName3;
            }
    
            private int GetListLevel(ParagraphMemorize paragraphMemorize)
            {
                if (paragraphMemorize.StyleName == _StyleName1)
                {
                    return 0;
                }
                else if (paragraphMemorize.StyleName == _StyleName2)
                {
                    return 1;
                }
                else if (paragraphMemorize.StyleName == _StyleName3)
                {
                    return  (int)paragraphMemorize.ListLevel;
                }
                else
                {
                    return 0;
                }
    
            }
    
            private int? GetNumId(Paragraph paragraph)
            {
    
                var numIds = paragraph.ParagraphNumberProperties.Descendants().Where(e => e.Name.LocalName.Equals("numId"));
    
                foreach (var numId in numIds)
                {
                    XNamespace nsW = Namespace.WordNamespace;
    
                    var values = numId.Attributes(XName.Get("val", nsW.ToString()));
                    foreach (var value in values)
                    {
                        int resultId = 0;
                        int.TryParse(value.Value, out resultId);
                        return resultId;
                    }
    
                }
                return null;
            }
    
    
            private int? GetListLevel(Paragraph paragraph)
            {
    
                var numIds = paragraph.ParagraphNumberProperties.Descendants().Where(e => e.Name.LocalName.Equals("ilvl"));
    
                foreach (var numId in numIds)
                {
                    XNamespace nsW = Namespace.WordNamespace;
    
                    var values = numId.Attributes(XName.Get("val", nsW.ToString()));
                    foreach (var value in values)
                    {
                        int resultId = 0;
                        int.TryParse(value.Value, out resultId);
                        return resultId;
                    }
    
                }
                return null;
            }
    
            private class ParagraphMemorize
            {
                public Paragraph Paragraph { get; set; }
                public string Text { get; set; }
                public string StyleName { get; set; }
                public int? ListLevel { get; set; }
    
                public ParagraphMemorize(Paragraph Paragraph)
                {
                    this.Paragraph = Paragraph;
                    this.Text = Paragraph.Text;
                    this.StyleName = Paragraph.StyleName;
                }
    
            }
        }
    }