如何使用xlsx4j格式化单元格类型?

时间:2015-03-31 00:02:34

标签: java excel openxml xlsx docx4j

我是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,但在这种情况下没有找到任何有用的东西:(

谢谢!

0 个答案:

没有答案