访问jxls官网:http://jxls.sourceforge.net/
官网中也有例子:https://bitbucket.org/leonate/jxls-demo/src/master/。
笔者会在最后一篇总结中将笔者的项目和Excel文件打包上传
// 命令--updateCell
注意这个命令笔者没有使用JxlsHelper,官网也同样没有使用,笔者尝试使用后发现,要么函数乱了,要么干脆,所有的行的函数都相同。
第一个原因是缺少context.getConfig().setIsFormulaProcessingRequired(false);
第二个原因是缺少workbook.setForceFormulaRecalculation(true);//强制重新计算公式
所以笔者只好使用官网给出的updateCell代码进行学习,使用if,each中官网的代码就会出问题
OutputStream也是一个坑,当使用包装类BufferOutputStream,打开对应的excel报错。
笔者也没有去跟踪代码,有兴趣的朋友可以去跟踪看原因是什么,然后在笔者下留言
笔者的后台代码
// 命令--updateCell
public static void updateCellCommand() throws Exception {
BufferedInputStream is = new BufferedInputStream(
new FileInputStream("E:\\wrc\\jxls\\study\\updateCellTeplate.xlsx"));
OutputStream os = new FileOutputStream("E:\\wrc\\jxls\\study\\updateCell.xlsx");
Workbook workbook = WorkbookFactory.create(is);
Transformer transformer = PoiTransformer.createSxssfTransformer(workbook, 5, false);
AreaBuilder areaBuilder = new XlsCommentAreaBuilder(transformer);
List xlsAreaList = areaBuilder.build();
Area xlsArea = xlsAreaList.get(0);
Context context = new Context();
context.putVar("cellRefUpdater", new CellRefUpdater());
List
context.putVar("employees", list);
xlsArea.applyAt(new CellRef("Result!A1"), context);
context.getConfig().setIsFormulaProcessingRequired(false);
workbook.setForceFormulaRecalculation(true);
workbook.setActiveSheet(1);
((PoiTransformer) transformer).getWorkbook().write(os);
}
public class CellRefUpdater implements CellDataUpdater {
@Override
public void updateCellData(CellData cellData, CellRef targetCell, Context context) {
if( cellData.isFormulaCell() && cellData.getFormula() != null ){
cellData.setEvaluationResult(cellData.getFormula().replaceAll("(?<=[A-Za-z])\\d", Integer.toString(targetCell.getRow()+1)));
}
}
}
笔者的Excel,注意名字和后台代码中context的key值保持一致
注意使用这个代码,是单独在一个sheet中根据模板生成