【问题标题】:С# NPOI Word list numerationС# NPOI 词表记数
【发布时间】:2021-09-08 16:13:50
【问题描述】:

我需要一个word文档中的列表,结构如下:

我已经想到了这个

这是代码。但我无法理解 ids 的实际工作原理以及它是什么,根本没有这个库的文档。如果您曾经找到一些解释或可以解释它,我将不胜感激

            XWPFDocument document = new XWPFDocument();
            XWPFNumbering numbering = document.CreateNumbering();
            string abstractNumId = "";
            string numId = numbering.AddNum(abstractNumId);
            
            numbering.AddNum(abstractNumId, numId);

            //Create paragragh and set its list level
            XWPFParagraph para1 = document.CreateParagraph();
            XWPFRun run1 = para1.CreateRun();
            run1.SetText("The first paragraph");
            para1.SetNumID(numId, "0");

            para1 = document.CreateParagraph();
            run1 = para1.CreateRun();
            run1.SetText("The first sub-item");
            para1.SetNumID(numId, "1");

            //Create paragragh and set the list level
            XWPFParagraph para2 = document.CreateParagraph();
            XWPFRun run2 = para2.CreateRun();
            run2.SetText("The second paragraph");
            para2.SetNumID(numId, "0");

            para2 = document.CreateParagraph();
            run2 = para2.CreateRun();
            run2.SetText("The second sub-item");
            para2.SetNumID(numId, "1");

            //Create paragragh and apply multi level list
            XWPFParagraph para3 = document.CreateParagraph();
            XWPFRun run3 = para3.CreateRun();
            run3.SetText("The third paragraph");
            para3.SetNumID(numId, "0");
            para3 = document.CreateParagraph();
            run3 = para3.CreateRun();
            run3.SetText("The first sub-item");
            para3.SetNumID(numId, "1");
            para3 = document.CreateParagraph();
            run3 = para3.CreateRun();
            run3.SetText("The second sub-item");
            para3.SetNumID(numId, "1");
            para3 = document.CreateParagraph();
            run3 = para3.CreateRun();
            run3.SetText("The sub-sub-item");
            para3.SetNumID(numId, "2");

【问题讨论】:

    标签: c# word doc npoi


    【解决方案1】:

    您可以创建自己的编号并为每个级别指定格式。

    使用 NPOI 2.5.4 测试

    XWPFDocument document = new XWPFDocument();
    XWPFNumbering numbering = document.CreateNumbering();
            
    var ct_abn = new CT_AbstractNum();
    var mlt = new CT_MultiLevelType();
    mlt.val = ST_MultiLevelType.multilevel;
    ct_abn.multiLevelType = mlt;
    ct_abn.lvl = new System.Collections.Generic.List<CT_Lvl>
            {
                new CT_Lvl{ ilvl = "0", start = new CT_DecimalNumber(){ val = "1"}, numFmt = new CT_NumFmt(){ val= ST_NumberFormat.@decimal },
                lvlText = new CT_LevelText(){ val ="%1." }, lvlJc=new CT_Jc(){ val = ST_Jc.left },
                pPr = new CT_PPr{ ind = new CT_Ind{ left = "360", hanging = 360 } } },
                new CT_Lvl{ ilvl = "1", start = new CT_DecimalNumber(){ val = "1"}, numFmt = new CT_NumFmt(){ val= ST_NumberFormat.@decimal },
                lvlText = new CT_LevelText(){ val ="%1. %2." }, lvlJc=new CT_Jc(){ val = ST_Jc.left },
                pPr = new CT_PPr{ ind = new CT_Ind{ left = "792", hanging = 432 } } },
                new CT_Lvl{ ilvl = "2", start = new CT_DecimalNumber(){ val = "1"}, numFmt = new CT_NumFmt(){ val= ST_NumberFormat.@decimal },
                lvlText = new CT_LevelText(){ val ="%1. %2. %3." }, lvlJc=new CT_Jc(){ val = ST_Jc.left },
                pPr = new CT_PPr{ ind = new CT_Ind{ left = "1224", hanging = 504 } } },
                new CT_Lvl{ ilvl = "3", start = new CT_DecimalNumber(){ val = "1"}, numFmt = new CT_NumFmt(){ val= ST_NumberFormat.@decimal },
                lvlText = new CT_LevelText(){ val ="%1. %2. %3. %4." }, lvlJc=new CT_Jc(){ val = ST_Jc.left },
                pPr = new CT_PPr{ ind = new CT_Ind{ left = "1728", hanging = 648 } } },
                new CT_Lvl{ ilvl = "4", start = new CT_DecimalNumber(){ val = "1"}, numFmt = new CT_NumFmt(){ val= ST_NumberFormat.@decimal },
                lvlText = new CT_LevelText(){ val ="%1. %2. %3. %4. %5." }, lvlJc=new CT_Jc(){ val = ST_Jc.left },
                pPr = new CT_PPr{ ind = new CT_Ind{ left = "2232", hanging = 792 } } },
                new CT_Lvl{ ilvl = "5", start = new CT_DecimalNumber(){ val = "1"}, numFmt = new CT_NumFmt(){ val= ST_NumberFormat.@decimal },
                lvlText = new CT_LevelText(){ val ="%1. %2. %3. %4. %5. %6." }, lvlJc=new CT_Jc(){ val = ST_Jc.left },
                pPr = new CT_PPr{ ind = new CT_Ind{ left = "2736", hanging = 936 } } },
                new CT_Lvl{ ilvl = "6", start = new CT_DecimalNumber(){ val = "1"}, numFmt = new CT_NumFmt(){ val= ST_NumberFormat.@decimal },
                lvlText = new CT_LevelText(){ val ="%1. %2. %3. %4. %5. %6. %7." }, lvlJc=new CT_Jc(){ val = ST_Jc.left },
                pPr = new CT_PPr{ ind = new CT_Ind{ left = "3240", hanging = 1080 } } },
                new CT_Lvl{ ilvl = "7", start = new CT_DecimalNumber(){ val = "1"}, numFmt = new CT_NumFmt(){ val= ST_NumberFormat.@decimal },
                lvlText = new CT_LevelText(){ val ="%1. %2. %3. %4. %5. %6. %7. %8." }, lvlJc=new CT_Jc(){ val = ST_Jc.left },
                pPr = new CT_PPr{ ind = new CT_Ind{ left = "3744", hanging = 1224 } } },
                new CT_Lvl{ ilvl = "8", start = new CT_DecimalNumber(){ val = "1"}, numFmt = new CT_NumFmt(){ val= ST_NumberFormat.@decimal },
                lvlText = new CT_LevelText(){ val ="%1. %2. %3. %4. %5. %6. %7. %8. %9." }, lvlJc=new CT_Jc(){ val = ST_Jc.left },
                pPr = new CT_PPr{ ind = new CT_Ind{ left = "4320", hanging = 1440 } } },
            };
    string abstractNumId = numbering.AddAbstractNum(new XWPFAbstractNum(ct_abn));
    string numId = numbering.AddNum(abstractNumId);
    
    //Create paragragh and set its list level
    XWPFParagraph para1 = document.CreateParagraph();
    XWPFRun run1 = para1.CreateRun();
    run1.SetText("The first paragraph");
    para1.SetNumID(numId, "0");
    
    para1 = document.CreateParagraph();
    run1 = para1.CreateRun();
    run1.SetText("The first sub-item");
    para1.SetNumID(numId, "1");
    
    //Create paragragh and set the list level
    XWPFParagraph para2 = document.CreateParagraph();
    XWPFRun run2 = para2.CreateRun();
    run2.SetText("The second paragraph");
    para2.SetNumID(numId, "0");
    
    para2 = document.CreateParagraph();
    run2 = para2.CreateRun();
    run2.SetText("The second sub-item");
    para2.SetNumID(numId, "1");
    
    //Create paragragh and apply multi level list
    XWPFParagraph para3 = document.CreateParagraph();
    XWPFRun run3 = para3.CreateRun();
    run3.SetText("The third paragraph");
    para3.SetNumID(numId, "0");
    para3 = document.CreateParagraph();
    run3 = para3.CreateRun();
    run3.SetText("The first sub-item");
    para3.SetNumID(numId, "1");
    para3 = document.CreateParagraph();
    run3 = para3.CreateRun();
    run3.SetText("The second sub-item");
    para3.SetNumID(numId, "1");
    para3 = document.CreateParagraph();
    run3 = para3.CreateRun();
    run3.SetText("The sub-sub-item");
    para3.SetNumID(numId, "2");
    
    //Save the file and Launch
    using (FileStream sw = new FileStream("ListNumbering.doc", FileMode.Create))
    {
        document.Write(sw);
    }
    

    【讨论】:

    • 谢谢。真的很有帮助
    • 如何设置列表数字的样式?能否请您提供一些示例或链接,找不到 NPOI 的任何内容
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    相关资源
    最近更新 更多