diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiPublicUtil.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiPublicUtil.java index 649ba65..8136f8e 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiPublicUtil.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/util/PoiPublicUtil.java @@ -361,12 +361,10 @@ public final class PoiPublicUtil { Map map) throws Exception { String params = ""; while (currentText.indexOf(START_STR) != -1) { - params = currentText.substring(currentText.indexOf(START_STR) + 2, - currentText.indexOf(END_STR)); + params = currentText.substring(currentText.indexOf(START_STR) + 2, currentText.indexOf(END_STR)); Object obj = PoiElUtil.eval(params.trim(), map); //判断图片或者是集合 - if (obj instanceof ImageEntity || obj instanceof List - || obj instanceof ExcelListEntity) { + if (obj instanceof ImageEntity || obj instanceof List || obj instanceof ExcelListEntity) { return obj; } else if (obj != null){ currentText = currentText.replace(START_STR + params + END_STR, obj.toString()); @@ -456,6 +454,9 @@ public final class PoiPublicUtil { currentRun.addBreak(); } currentRun.setText(tempArr[tempArr.length - 1], tempArr.length - 1); + }else{ + //对blank字符串做处理,避免显示"{{" + currentRun.setText("",0); } } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/word/WordExportUtil.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/word/WordExportUtil.java index 33c1233..cdc1ddb 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/word/WordExportUtil.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/word/WordExportUtil.java @@ -56,8 +56,7 @@ public class WordExportUtil { * @param map * 解析数据源 */ - public static void exportWord07(XWPFDocument document, - Map map) throws Exception { + public static void exportWord07(XWPFDocument document, Map map) throws Exception { new ParseWord07().parseWord(document, map); } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/ParseWord07.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/ParseWord07.java index 7aff132..5bdc824 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/ParseWord07.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/ParseWord07.java @@ -27,10 +27,7 @@ import org.apache.poi.xwpf.usermodel.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +import java.util.*; import static cn.afterturn.easypoi.util.PoiElUtil.*; @@ -86,7 +83,9 @@ public class ParseWord07 { text = text.replace(FOREACH_NOT_CREATE, EMPTY).replace(FOREACH_AND_SHIFT, EMPTY) .replace(FOREACH, EMPTY).replace(START_STR, EMPTY); String[] keys = text.replaceAll("\\s{1,}", " ").trim().split(" "); - return PoiPublicUtil.getParamsValue(keys[0], map); + Object result=PoiPublicUtil.getParamsValue(keys[0], map); + //添加list默认值,避免将{{$fe: list t.sn t.hoby t.remark}} 这类标签直接显示出来 + return Objects.nonNull(result)?result:new ArrayList>(0); } return null; } @@ -120,14 +119,17 @@ public class ParseWord07 { * @author JueYue * 2013-11-16 */ - private void parseThisParagraph(XWPFParagraph paragraph, - Map map) throws Exception { + private void parseThisParagraph(XWPFParagraph paragraph, Map map) throws Exception { XWPFRun run; - XWPFRun currentRun = null;// 拿到的第一个run,用来set值,可以保存格式 - String currentText = "";// 存放当前的text + // 拿到的第一个run,用来set值,可以保存格式 + XWPFRun currentRun = null; + // 存放当前的text + String currentText = ""; String text; - Boolean isfinde = false;// 判断是不是已经遇到{{ - List runIndex = new ArrayList();// 存储遇到的run,把他们置空 + // 判断是不是已经遇到{{ + Boolean isfinde = false; + // 存储遇到的run,把他们置空 + List runIndex = new ArrayList(); for (int i = 0; i < paragraph.getRuns().size(); i++) { run = paragraph.getRuns().get(i); text = run.getText(0); @@ -147,7 +149,8 @@ public class ParseWord07 { currentText = ""; isfinde = false; } - } else if (text.indexOf(START_STR) >= 0) {// 判断是不是开始 + // 判断是不是开始 + } else if (text.indexOf(START_STR) >= 0) { currentText = text; isfinde = true; currentRun = run; @@ -168,6 +171,8 @@ public class ParseWord07 { } } + + /** * 解析这个表格 * @@ -188,10 +193,12 @@ public class ParseWord07 { parseThisRow(cells, map); } else if (listobj instanceof ExcelListEntity) { new ExcelEntityParse().parseNextRowAndAddRow(table, i, (ExcelListEntity) listobj); - i = i + ((ExcelListEntity) listobj).getList().size() - 1;//删除之后要往上挪一行,然后加上跳过新建的行数 + //删除之后要往上挪一行,然后加上跳过新建的行数 + i = i + ((ExcelListEntity) listobj).getList().size() - 1; } else { ExcelMapParse.parseNextRowAndAddRow(table, i, (List) listobj); - i = i + ((List) listobj).size() - 1;//删除之后要往上挪一行,然后加上跳过新建的行数 + //删除之后要往上挪一行,然后加上跳过新建的行数 + i = i + ((List) listobj).size() - 1; } } } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/excel/ExcelEntityParse.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/excel/ExcelEntityParse.java index bc80722..c0ff640 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/excel/ExcelEntityParse.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/excel/ExcelEntityParse.java @@ -161,7 +161,8 @@ public class ExcelEntityParse extends ExportCommonService { * @param entity */ public void parseNextRowAndAddRow(XWPFTable table, int index, ExcelListEntity entity) { - table.removeRow(index);// 删除这一行 + // 删除这一行 + table.removeRow(index); checkExcelParams(entity); // 获取表头数据 Map titlemap = getTitleMap(table, index, entity.getHeadRows());