主要问题和要求:
1.以此为模板,实现java填写并导出。
2._____年 需要填写。
3.表头的月日需要填写。
4.检查内容不确定哪里是拆分单元格。动态变化的。
5.表格不一定是多少页。
原始表格
最终表格
public static void main(String[] args) throws IOException, InvalidFormatException {
/**
* 加载文档/填写_____年
*/
Document doc = new Document();
doc.loadFromFile("D:/1.doc");
for (int i = 0; i < doc.getSections().getCount(); i++) {
int j = doc.getSections().get(i).getParagraphs().getCount();
for (int k = 0; k < j; k++) {
Paragraph paragraph = doc.getSections().get(i).getParagraphs().get(k);
paragraph.getText().indexOf("年");
doc.setReplaceFirst(true);
paragraph.replace(" ", " 2020", false, true);
}
}
/**
* 删除表头的 月 日
*/
Table table = null;
for (int k = 0; k < doc.getSections().getCount(); k++) {
for (int t=0;t<doc.getSections().get(k).getTables().getCount();t++){
try {
table = doc.getSections().get(k).getTables().get(t);
//遍历表格每行
for (int j = 0; j < table.getRows().getCount(); j++) {
if (j == 0) {
for (int d = 3; d < table.getRows().get(0).getCells().getCount(); d++) {
TableCell cell = table.getRows().get(0).getCells().get(d);
cell.getChildObjects().clear();
}
}
}
} catch (Exception e) {
System.out.println("这一页没表格");
}
}
}
/**
* 插入数据
*/
for (int k = 0; k < doc.getSections().getCount(); k++) {
for (int t=0;t<doc.getSections().get(k).getTables().getCount();t++){
try {
table = doc.getSections().get(k).getTables().get(t);
//遍历表格每行
for (int j = 0; j < table.getRows().getCount(); j++) {
if (j == 0) {
for (int d = 3; d < table.getRows().get(0).getCells().getCount(); d++) {
TableCell cell = table.getRows().get(0).getCells().get(d);
cell.addParagraph().appendText("2020-9-9");
}
}else if (IsNumber.isNumeric(table.getRows().get(j).getCells().get(0).getFirstParagraph().getText().trim())){//判断第一列是不是序号,数字(区分开执行人和备注)
if (table.getRows().get(j).getCells().getCount()==table.getRows().get(0).getCells().getCount()){//判断一行几列,第三列是否是第二项的子项,这是否的情况下,聪第四列开始填
for (int q=3;q<table.getRows().get(j).getCells().getCount();q++){
table.getRows().get(j).getCells().get(q).getFirstParagraph().appendText("1212");
}
}else{//第三列是第二列的子项,所以列数多一位,应该从第五列开始
for (int q=4;q<table.getRows().get(j).getCells().getCount();q++){
table.getRows().get(j).getCells().get(q).getFirstParagraph().appendText("1213");
}
}
}else if (table.getRows().get(j).getRowIndex()==table.getRows().getCount()-2){//如果行标等于总行数-1,说明是倒数第二行
for (int q = 1;q<table.getRows().get(j).getCells().getCount();q++){
table.getRows().get(j).getCells().get(q).getFirstParagraph().appendText("张三");
}
}else if (table.getRows().get(j).getRowIndex()==table.getRows().getCount()-1){//如果行标等于总行数-1,说明是倒数第二行
for (int q = 0;q<7;q++){
table.getRows().get(j).getCells().get(1).addParagraph().appendText("555");
}
}
}
} catch (Exception e) {
System.out.println("这一页没表格");
}
}
}
//保存文档
doc.saveToFile("D:/addrow.doc", FileFormat.Docx_2013);
doc.dispose();
}