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

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

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

原文档:

替换后文档:


正文开始

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

代码正文如下:

public static void main(String[] args) {
        Document document = new Document("C:/Users/moreyou0426003/Desktop/测试文字-图片-表格模板.docx");
        /****** 1.使用新文本替换文档中的指定文本 begin ******/
        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);
        /********************* 1.使用新文本替换文档中的指定文本 end *********************/
        
        /********************* 2.图片替换文字 begin *********************/
        //获取第二段
        //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);
        /**********以上是根据段落添加图片************/
        //获取第一个section
        Section section = document.getSections().get(0);
        TextSelection selection = document.findString("${img}", true, true);
        //查找文档中的指定文本内容
        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);
		}
        /********************* 2.图片替换文字 end *********************/
        
        /********************* 3.表格替换文字 begin *********************/
        //声明数组内容
        /*
        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);
        */
        /**********以上是根据书签添加表格**************/
        //查找关键字符串文本
        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);
        }
        /********************* 3.表格替换文字 end *********************/
        
        //保存文档
        document.saveToFile("C:/Users/moreyou0426003/Desktop/测试文字-图片-表格模板.docx");
	}

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

解析:

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");

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值