结果集容器初始化之后,要做的就是从文档模板中读取所有需要替换的标签文本,并一一与容器中的数据项进行对应,继而进行替换,追回将替换完毕的文档另存为新的Word文档。代码6是另存Word文档的主要代码。
代码6 另存Word文档
文件名:DocBuilder.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//读取模板和输出信息,调用保存模块
public void saveAs(String tempPath, String outPath) {
__saveAs(tempPath+getTemplate(), outPath+getOutput() );
}
//替换模板并保存输出
private void __saveAs(String tempFilePath, String outFilePath) {
if(mWordUtil.connect(false) == false) {
return;
//打开文档模板
if(mWordUtil.open(tempFilePath) == false) {
mWordUtil.disconnect();
//获取文档模板中所有标签文本
HashSet<String> texts = mWordUtil.getTagText(TAG_LEFT, TAG_RIGHT);
if(texts == null) {
mWordUtil.close();
//解析标签文本并进行替换
Iterator<String> it = texts.iterator();
while(it.hasNext() ) {
TagParser parser = new TagParser(it.next() );
switch(parser.getType() ) {
case TagParser.TAG_TYPE_RS: {
handleRsTag(parser);
break;
default: {
//另存文档
try {
mWordUtil.saveAs(outFilePath);
} catch(Exception e) {
e.printStackTrace();
FooDebug.getInstance().println("文档处理完毕!");
代码7是替换标签文本的关键代码。
代码7 替换标签文本
//处理数据集标签(本数据集外)
private void handleRsTag(TagParser parser) {
//获取标签文本中的数据源和行列信息
final String dsId = parser.getItem1();
final int row = Integer.parseInt(parser.getItem2() );
final int col = Integer.parseInt(parser.getItem3() );
//获取对应数据源的记录集
ArrayList<ArrayList<String>> rows = mResuleSet.get(DS_PREFIX+dsId);
if(rows == null) {
String val = "";
//获取标签文本对应的列值
if( (row < rows.size()) && (col < rows.get(0).size() ) ) {
val = rows.get(row).get(col);
} catch(IndexOutOfBoundsException e) {
//替换标签文本
mWordUtil.replace(parser.getRawText(), val);
·2024年9月目录 ·2024年8月目录 ·2024年7月目录 ·2024年6月目录 ·2024年5月目录 ·2024年4月目录 ·2024年3月目录 ·2024年2月目录 ·2024年1月目录 ·2023年12月目录 ·2023年11月目录 ·2023年10月目录 ·2023年9月目录 ·2023年8月目录