隐藏

C# 使用NPOI处理word

发布:2024/6/8 8:04:49作者:管理员 来源:本站 浏览次数:46

需要引入referece: Microsoft.Office.Interop.Word.dll (适用于word2007,2010等早期版本)


适用于word2016可以使用NPOI(在Preferences->Manage Nuget Packages中搜索NPOI)


下面是使用npoi创建word文档和读取其中段落文字的简单方法:


static void Main(string[] args)

       {

           CreateFile();

           Console.WriteLine(ExcuteWordText());

           Console.ReadLine();

       }

       public static void CreateFile()

       {

           XWPFDocument doc = new XWPFDocument(); //文档


           XWPFParagraph p1 = doc.CreateParagraph(); //段落

           p1.Alignment = ParagraphAlignment.CENTER; //字体居中

           p1.IndentationFirstLine = (int)100; //首行缩进

           XWPFRun r1 = p1.CreateRun();                //向该段落中添加文字

           r1.SetText("测试段落一");

           XWPFParagraph p2 = doc.CreateParagraph();

           p2.Alignment = ParagraphAlignment.LEFT;

           XWPFRun r2 = p2.CreateRun();

           r2.SetText("测试段落二");


           FileStream out1 = new FileStream("simple.docx", FileMode.Create);

           doc.Write(out1);

           out1.Close();

       }

       //读段落

       public static string ExcuteWordText()

       {

           StringBuilder sb = new StringBuilder();

           using (FileStream stream = File.OpenRead(AppDomain.CurrentDomain.BaseDirectory+ "\\"+"simple.docx"))

           {

               XWPFDocument doc = new XWPFDocument(stream);

               foreach (var para in doc.Paragraphs)

               {

                   string text = para.ParagraphText; //获得文本

                   var runs = para.Runs;

                   string styleid = para.Style;

                   for (int i = 0; i < runs.Count; i++)

                   {

                       var run = runs[i];

                       text = run.ToString(); //获得run的文本

                       sb.Append(text + ",");

                   }

               }

           }

           return sb.ToString();

       }


下面是两个处理table中文字格式的方法(未调试)


       /// <summary>

       /// 设置字体格式

       /// </summary>

       /// <param name="doc"></param>

       /// <param name="table"></param>

       /// <param name="setText"></param>

       /// <returns></returns>

       public XWPFParagraph SetCellText(XWPFDocument doc, XWPFTable table, string setText)

       {

           //table中的文字格式设置

           CT_P para = new CT_P();

           XWPFParagraph pCell = new XWPFParagraph(para, table.Body);

           pCell.Alignment = ParagraphAlignment.CENTER;//字体居中

           pCell.VerticalAlignment = TextAlignment.CENTER;//字体居中


           XWPFRun r1c1 = pCell.CreateRun();

           r1c1.SetText(setText);

           r1c1.FontSize = 12;

           r1c1.SetFontFamily("华文楷体", FontCharRange.None);//设置雅黑字体

                                                          //r1c1.SetTextPosition(20);//设置高度


           return pCell;

       }


       /// <summary>

       /// 设置单元格格式

       /// </summary>

       /// <param name="doc">doc对象</param>

       /// <param name="table">表格对象</param>

       /// <param name="setText">要填充的文字</param>

       /// <param name="align">文字对齐方式</param>

       /// <param name="textPos">rows行的高度</param>

       /// <returns></returns>

       public XWPFParagraph SetCellText(XWPFDocument doc, XWPFTable table, string setText, ParagraphAlignment align, int textPos)

       {

           CT_P para = new CT_P();

           XWPFParagraph pCell = new XWPFParagraph(para, table.Body);

           //pCell.Alignment = ParagraphAlignment.LEFT;//字体

           pCell.Alignment = align;


           XWPFRun r1c1 = pCell.CreateRun();

           r1c1.SetText(setText);

           r1c1.FontSize = 12;

           r1c1.SetFontFamily("华文楷体", FontCharRange.None);//设置雅黑字体

           r1c1.SetTextPosition(textPos);//设置高度


           return pCell;

       }


参考文档:


NPOI创建DOCX常用操作 - gltide的专栏 - CSDN博客


使用NOPI读取Word、Excel文档内容 - 马洪彪 - 博客园


C#word(2007)操作类--新建文档、添加页眉页脚、设置格式、添加文本和超链接、添加图片、表格处理、文档格式转化 - lantionzy - 博客园