• NPOI 操作Word


         /// <summary>
            /// 替换word中指定内容
            /// </summary>
            /// <param name="wordPath">路径</param>
            /// <param name="keyName">被替换内容</param>
            /// <param name="keyValue">替换内容</param>
            /// <returns></returns>
            public string ReplaceValueByKeyName(string wordPath, string keyName, string keyValue)
            {
                FileStream fs = new FileStream(wordPath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
                XWPFDocument docx = new XWPFDocument(fs);//打开07(.docx)以上的版本的文档
                //遍历word中的段落
                foreach (var para in docx.Paragraphs)
                {
                    if (!para.ParagraphText.Contains(keyName)) continue;
                    para.ReplaceText(para.ParagraphText, keyValue);
    // NewLine(para, "测试换行"); } FileStream output
    = new FileStream(wordPath, FileMode.Create); docx.Write(output); fs.Close(); fs.Dispose(); output.Close(); output.Dispose(); return wordPath; }
         /// <summary>
            /// 替换指定内容为图片|图片居中
            /// </summary>
            /// <param name="wordPath">文件路径</param>
            /// <param name="keyName">需被替换内容</param>
            /// <param name="imgPath">图片路径</param>
            /// <param name="imgType">图片类型</param>
            public void InsertImgToKey(string wordPath, string keyName, string imgPath, PictureType imgType = PictureType.JPEG)
            {
                FileStream fs = new FileStream(wordPath, FileMode.Open, FileAccess.Read);
                XWPFDocument myDocx = new XWPFDocument(fs);//打开07(.docx)以上的版本的文档
                //遍历word中的段落
                foreach (var para in myDocx.Paragraphs)
                {
                    if (!para.ParagraphText.Contains(keyName)) continue;
                    para.ReplaceText(para.ParagraphText, string.Empty);
    
                    XWPFRun run = para.CreateRun();
                    using (FileStream picData = new FileStream(imgPath, FileMode.Open, FileAccess.Read))
                    {
                        run.AddPicture(picData, (int)imgType, imgPath, 100 * 9525, 100 * 9525);
                    }
                    para.Alignment = ParagraphAlignment.CENTER;
                    break;
                }
    
                //遍历表格      
                foreach (var table in myDocx.Tables)
                {
                    foreach (var row in table.Rows)
                    {
                        foreach (var cell in row.GetTableCells())
                        {
                            foreach (var para in cell.Paragraphs)
                            {
                                if (!para.ParagraphText.Contains(keyName)) continue;
                                para.ReplaceText(para.ParagraphText, string.Empty);
    
                                XWPFRun run = para.CreateRun();
                                using (FileStream picData = new FileStream(imgPath, FileMode.Open, FileAccess.Read))
                                {
                                    run.AddPicture(picData, (int)imgType, imgPath, 100 * 9525, 100 * 9525);
                                }
                                para.Alignment = ParagraphAlignment.CENTER;
                                break;
                            }
                        }
                    }
                }
    
                FileStream output = new FileStream(wordPath, FileMode.Create);
                myDocx.Write(output);
                fs.Close();
                fs.Dispose();
                output.Close();
                output.Dispose();
            }

     换行

     private void NewLine(XWPFParagraph paragraph)
            {
                paragraph.CreateRun().AddCarriageReturn();//新增式换行--当前行之后
                paragraph.CreateRun().SetText("");
                //para.InsertNewRun(row).AddCarriageReturn();  //插入式换行--当前行之前
                //para.InsertNewRun(row).SetText("换行001");
            }
    

    注:换行问题,不同版本的word或者npoi 版本操作方式存在不一致现象,需要亲测

          private void NewLine(XWPFParagraph paragraph, string value)
            {
                value = value + "
    ";
                //paragraph.CreateRun().AddCarriageReturn();//新增式换行--当前行之后
                paragraph.CreateRun().SetText(value);
                //paragraph.CreateRun().AddCarriageReturn();
                //paragraph.CreateRun().Paragraph.CreateRun().AddCarriageReturn();
                //paragraph.CreateRun().Paragraph.CreateRun().SetText(value);
            }
  • 相关阅读:
    C++顺序性容器、关联性容器与容器适配器
    Groovy与Java集成常见的坑--转
    selenium打开chrome浏览器代码
    分组密码的工作模式--wiki
    linux下C语言多线程编程实例
    C语言多线程pthread库相关函数说明
    C语言使用pthread多线程编程(windows系统)二
    C语言使用pthread多线程编程(windows系统)一
    使用_beginThreadex创建多线程(C语言版多线程)
    浅谈C语言中的联合体
  • 原文地址:https://www.cnblogs.com/YYkun/p/10243397.html
Copyright © 2020-2023  润新知