我是docx4j和openxml的新手。我有必要根据这些表创建包含N个单独表(现有模板)的预先创建的图表的excel文件。实际上,我需要用数据库中的值替换一些文本占位符,并向用户显示完全生成的Excel文档。 我用替换值检查了样本,在获得源代码中的最新补丁后,它对我有用。不幸的是,我的图表无法根据公式进行评估,因为替换的值是字符串类型。 好吧,我最初可以标记一些行以便将来将它们转换为数字,但是当我为这些行设置STCellType.N时,缺少必要的值并且已经将未知值插入到此处。
源xlsm文件包含:
F5 = ${gender:1} G5 = ${gender:1:value} H5 = =IF(G5>0; G5/SUM($G$5:$G$6)*100; "")
F6 = ${gender:2} G6 = ${gender:2:value} H6 = =IF(G6>0; G6/SUM($G$5:$G$6)*100; "")
替换之后,我在结果xlsm文件中看到:
F5 = Man G5 = 30 H5 = #VALUE!
F6 = Woman G6 = 32 H6 = #VALUE!
注意:我正在插入" 20"和" 30",而不是" 30"和" 32"。
这是我的代码:
List<String> numbers = new ArrayList<String>(); //convert to number the cell type with this address when all placeholders will be replaced
numbers.add("G5");
numbers.add("G6");
JaxbSmlPart smlPart = (JaxbSmlPart)pkg.getParts().get(new PartName("/xl/sharedStrings.xml"));
HashMap<String, String> mappings = new HashMap<String, String>();
mappings.put("gender:1", "Man");
mappings.put("gender:1:value", "20");
mappings.put("gender:2", "Woman");
mappings.put("gender:2:value", "30");
smlPart.variableReplace(mappings);
//when replacements done, iterating over all rows and columns in the sheet and set the type "Number" for the selected cells
for (int i=0; i<sheetData.getRow().size(); i++) {
for (int j=0;j<sheetData.getRow().get(i).getC().size();j++) {
if (numbers.contains(sheetData.getRow().get(i).getC().get(j).getR())) {
sheetData.getRow().get(i).getC().get(j).setT(STCellType.N);
}
}
}
你能告诉我我做错了什么,是否有可能将字符串值转换为数字(不是改变单元格的类型)? 我也尝试使用在线服务http://webapp.docx4java.org,但在这种情况下没有找到任何有用的东西:(
谢谢!