当前位置:   article > 正文

java操作word文档(文字,图片,表格添加以及替换操作)_document.getsections

document.getsections

注:本文由于个人工作需要,有对多个他人博文进行借鉴,但是多数博文都只是讲到了小部分,例如图片/表格的操作,都只有根据书签进行替换,比较片面,本人有总结到根据文字进行图片/表格的替换,希望可以帮到更多有需要的朋友 。

java代码对word文档进行文字,图片,表格的添加以及替换,效果图如下:

原文档:

替换后文档:


正文开始

前提:需要引入包  Spire.Doc.jar  大家可以去官网进行下载:https://www.e-iceblue.cn/ 

代码正文如下:

  1. public static void main(String[] args) {
  2. Document document = new Document("C:/Users/moreyou0426003/Desktop/测试文字-图片-表格模板.docx");
  3. /****** 1.使用新文本替换文档中的指定文本 begin ******/
  4. document.replace("${title}", "水晶之痕", false, true);
  5. document.replace("${currentYear}", "2019", false, true);
  6. document.replace("${currentMonth}", "12", false, true);
  7. document.replace("${currentDate}", "25", false, true);
  8. document.replace("${startYear}", "2010", false, true);
  9. document.replace("${endYear}", "2020", false, true);
  10. document.replace("${name}", "艾欧尼亚", false, true);
  11. /********************* 1.使用新文本替换文档中的指定文本 end *********************/
  12. /********************* 2.图片替换文字 begin *********************/
  13. //获取第二段
  14. //Paragraph para = document.getSections().get(0).getParagraphs().get(1);
  15. //添加图片,并设置图片高、宽
  16. //DocPicture picture = para.appendPicture("C:/Users/moreyou0426003/Desktop/img.jpg");
  17. //picture.setHeight(200);
  18. //picture.setWidth(300);
  19. /**********以上是根据段落添加图片************/
  20. //获取第一个section
  21. Section section = document.getSections().get(0);
  22. TextSelection selection = document.findString("${img}", true, true);
  23. //查找文档中的指定文本内容
  24. TextSelection[] selections = document.findAllString("${img}", true, true);
  25. int index = 0;
  26. TextRange range = null;
  27. //遍历文档,移除文本内容,插入图片
  28. for (TextSelection selection : selections) {
  29. DocPicture pic = new DocPicture(document);
  30. pic.loadImage("C:/Users/moreyou0426003/Desktop/img.jpg");
  31. range = selection.getAsOneRange();
  32. index = range.getOwnerParagraph().getChildObjects().indexOf(range);
  33. range.getOwnerParagraph().getChildObjects().insert(index, pic);
  34. range.getOwnerParagraph().getChildObjects().remove(range);
  35. }
  36. /********************* 2.图片替换文字 end *********************/
  37. /********************* 3.表格替换文字 begin *********************/
  38. //声明数组内容
  39. /*
  40. String[][] data =
  41. {
  42. new String[]{"班级", "姓名", "学号"},
  43. new String[]{"1班", "刘楠", "Y12534"},
  44. new String[]{"2班", "刘莉", "Y12547"},
  45. new String[]{"3班", "方红", "Y12365"},
  46. };
  47. //创建表格
  48. Table table = new Table(document, true);
  49. table.resetCells(4, 3);
  50. for (int i = 0; i < data.length; i++) {
  51. TableRow dataRow = table.getRows().get(i);
  52. for (int j = 0; j < data[i].length; j++) {
  53. TextRange range = dataRow.getCells().get(j).addParagraph().appendText(data[i][j]);
  54. range.getOwnerParagraph().getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
  55. range.getCharacterFormat().setFontName("楷体");
  56. dataRow.getRowFormat().setHorizontalAlignment(RowAlignment.Center);
  57. dataRow.getCells().get(j).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
  58. }
  59. }
  60. //定位到指定书签位置,添加表格
  61. BookmarksNavigator bookmarksNavigator = new BookmarksNavigator(document);
  62. bookmarksNavigator.moveToBookmark("bookmark1");
  63. bookmarksNavigator.insertTable(table);
  64. */
  65. /**********以上是根据书签添加表格**************/
  66. //查找关键字符串文本
  67. Section section = document.getSections().get(0);
  68. TextSelection[] selections2 = document.findAllString("${list}", true, true);
  69. for (TextSelection selection2 : selections2) {
  70. //获取关键字符串所在段落的索引
  71. TextRange range2 = selection2.getAsOneRange();
  72. Paragraph paragraph = range2.getOwnerParagraph();
  73. Body body = paragraph.ownerTextBody();
  74. int index2 = body.getChildObjects().indexOf(paragraph);
  75. //添加一个两行三列的表格
  76. Table table = section.addTable(true);
  77. table.resetCells(2, 3);
  78. range2 = table.get(0, 0).addParagraph().appendText("学号");
  79. range2 = table.get(0, 1).addParagraph().appendText("姓名");
  80. range2 = table.get(0, 2).addParagraph().appendText("性别");
  81. range2 = table.get(1, 0).addParagraph().appendText("XH001");
  82. range2 = table.get(1, 1).addParagraph().appendText("张三");
  83. range2 = table.get(1, 2).addParagraph().appendText("男");
  84. //移除段落,插入表格
  85. body.getChildObjects().remove(paragraph);
  86. body.getChildObjects().insert(index2, table);
  87. }
  88. /********************* 3.表格替换文字 end *********************/
  89. //保存文档
  90. document.saveToFile("C:/Users/moreyou0426003/Desktop/测试文字-图片-表格模板.docx");
  91. }

代码可能存在很多注释的地方,并不是没用的代码,我将逐步解析!

解析:

Document document = new Document();
document.loadFromFile("C:/Users/moreyou0426003/Desktop/测试文字-图片-表格模板.docx");

以上代码是读取源文件

document.replace("${title}", "水晶之痕", false, true);
document.replace("${currentYear}", "2019", false, true);
document.replace("${currentMonth}", "12", false, true);
document.replace("${currentDate}", "25", false, true);
document.replace("${startYear}", "2010", false, true);
document.replace("${endYear}", "2020", false, true);
document.replace("${name}", "艾欧尼亚", false, true);

以上代码是对读取到的源文件进行文字替换操作

//获取第二段
Paragraph para = document.getSections().get(0).getParagraphs().get(1);
//添加图片,并设置图片高、宽
DocPicture picture = para.appendPicture("C:/Users/moreyou0426003/Desktop/img.jpg");
picture.setHeight(200);
picture.setWidth(300);

以上代码是根据段落进行图片的插入

TextSelection[] selections = document.findAllString("${img}", true, true);
        int index = 0;
        TextRange range = null;
        //遍历文档,移除文本内容,插入图片
        for (TextSelection selection : selections) {
            DocPicture pic = new DocPicture(document);
            pic.loadImage("C:/Users/moreyou0426003/Desktop/img.jpg");
            range = selection.getAsOneRange();
            index = range.getOwnerParagraph().getChildObjects().indexOf(range);
            range.getOwnerParagraph().getChildObjects().insert(index, pic);
            range.getOwnerParagraph().getChildObjects().remove(range);
        }

以上代码是对读取到的源文件中,包含  ${img}  的文字进行图片替换操作 ,如果如果不需要全局替换,只替换一个,可以使用以下代码块:

//获取第一个section
Section section = document.getSections().get(0);
TextSelection selection = document.findString("${img}", true, true);

//声明数组内容
String[][] data =
        {
                new String[]{"班级", "姓名", "学号"},
                new String[]{"1班", "刘楠", "Y12534"},
                new String[]{"2班", "刘莉", "Y12547"},
                new String[]{"3班", "方红", "Y12365"},
        };
//创建表格
Table table = new Table(document, true);
table.resetCells(4, 3);
for (int i = 0; i < data.length; i++) {
    TableRow dataRow = table.getRows().get(i);
    for (int j = 0; j < data[i].length; j++) {
        TextRange range = dataRow.getCells().get(j).addParagraph().appendText(data[i][j]);
        range.getOwnerParagraph().getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
        range.getCharacterFormat().setFontName("楷体");
        dataRow.getRowFormat().setHorizontalAlignment(RowAlignment.Center);
        dataRow.getCells().get(j).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
    }
}
//定位到指定书签位置,添加表格
BookmarksNavigator bookmarksNavigator = new BookmarksNavigator(document);
bookmarksNavigator.moveToBookmark("bookmark1");
bookmarksNavigator.insertTable(table);

以上代码块是对书签(bookmark1)位置插入表格

Section section = document.getSections().get(0);
TextSelection[] selections2 = document.findAllString("${list}", true, true);
for (TextSelection selection2 : selections2) {
     //获取关键字符串所在段落的索引
    TextRange range2 = selection2.getAsOneRange();
    Paragraph paragraph = range2.getOwnerParagraph();
    Body body = paragraph.ownerTextBody();
    int index2 = body.getChildObjects().indexOf(paragraph);
    //添加一个两行三列的表格
    Table table = section.addTable(true);
    table.resetCells(2, 3);
    range2 = table.get(0, 0).addParagraph().appendText("学号");
    range2 = table.get(0, 1).addParagraph().appendText("姓名");
    range2 = table.get(0, 2).addParagraph().appendText("性别");
    range2 = table.get(1, 0).addParagraph().appendText("XH001");
    range2 = table.get(1, 1).addParagraph().appendText("张三");
    range2 = table.get(1, 2).addParagraph().appendText("男");
    //移除段落,插入表格 
    body.getChildObjects().remove(paragraph);
    body.getChildObjects().insert(index2, table);
}

以上代码是对读取到的源文件中,包含  ${list}  的文字进行表格替换操作 ,如果如果不需要全局替换,只替换一个,请参照上文图片处所备注的方法即可

document.saveToFile("C:/Users/moreyou0426003/Desktop/测试文字-图片-表格模板.docx");

最后对文本进行操作完之后记得对文档进行保存,保存地址可以是源文件 ,也可以指定其他文件

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/326061
推荐阅读
相关标签
  

闽ICP备14008679号