更换表格内容采取以下方法
WordUtils更换表格中同行多占位符,目前本人没有时间优化这部分内容,所以直接采取了替换方法的行为,请各位见谅
private static void parseTable(XWPFTable table, Map<String, Object> dataMap) {
Map<String, String> source = (Map<String, String>) dataMap.get("source");
log.info(source.keySet().toString()); //可能为null 所以转字符串
Map<String, Object> imageMap = (Map<String, Object>) dataMap.get("${image}"); // 这块儿内容我采取过image,但效果不太好,直接使用了${image}
log.info(imageMap.keySet().toString());
int count = 0;
log.info("所有key : " + dataMap.keySet().toString());
for (XWPFTableRow row : table.getRows()) { // 行
for (XWPFTableCell cell : row.getTableCells()) { // 单元格
for (XWPFParagraph p : cell.getParagraphs()) { // 段落
for (XWPFRun run : p.getRuns()) {
String text = run.getText(0);
log.info("等待替换文字: " + text);
for (String s : dataMap.keySet()) {
log.info("当前key:" + s);
if (s.equals("source") && !source.isEmpty()) { //替换文本内容
String value = "";
for (String key : source.keySet()) {
if (text != null && text.contains(key)) {
value = text.replace(key, source.get(key));
log.info("替换后文字:" + text);
run.setText(value, 0);
}
}
}
if (text != null && text.contains("${image}") && !imageMap.isEmpty()) { //替换图片
if (count == 1) {
break; // 因为会循环访问key,而我所需操作当中只需要一张图片,所以计数为1不进入替换
}
run.setText("", 0); //清空段落文字内容,方便填充图片
// 获取元素
int width = (int) imageMap.get("width");
int height = (int) imageMap.get("height");
int picType = getPictureType((String) imageMap.get("type"));
byte[] bs = (byte[]) imageMap.get("con");
String fileName = (String) imageMap.get("fileName");
try {
// 写入图片
run.addPicture(new ByteArrayInputStream(bs), picType, fileName, width, height);
log.info("写入完成");
count++;
} catch (Exception e) {
e.printStackTrace();
log.info("图片写入失败");
}
}
}
}
}
}
}
}