代码之家  ›  专栏  ›  技术社区  ›  Enrico Scantamburlo

使用Apache ODF Toolkit Simple API和Java格式化单元格

  •  2
  • Enrico Scantamburlo  · 技术社区  · 6 年前

    我需要使用Apache ODF Toolking创建一个ods文档,并格式化其单元格的内容。

    我能够设置日期和简单数字的格式,但由于某种原因,当我尝试用科学符号格式化时,它不起作用。它无法解析字符串或将E00包装为“E00”

    SpreadsheetDocument document = SpreadsheetDocument.newSpreadsheetDocument();
        document.removeSheet(0);
    
        document.setLocale(Locale.US);
    
        Table sheet = document.appendSheet("My chart");
        List<Row> rows = sheet.appendRows(10);
    
        sheet.getColumnByIndex(0).setWidth(27.06);
        Row headerRow = rows.get(0);
        headerRow.getCellByIndex(0).setStringValue("This is a string");
    
        Row dateRow = rows.get(1);
    
        Calendar date = GregorianCalendar.getInstance();
        dateRow.getCellByIndex(0).setDateValue(date);
        dateRow.getCellByIndex(0).setFormatString("yyyy-MM-dd");
    
        Row numRow = rows.get(1);
        numRow.getCellByIndex(0).setDoubleValue(9.12345678);
    
        //numRow.getCellByIndex(0).setFormatString("0.000"); // works
        //numRow.getCellByIndex(0).setFormatString("0.00E+00"); // crashes
        numRow.getCellByIndex(0).setFormatString("0.00E00"); // does not work, it becomes 0.00"E00"
    
        document.save(new File("c:\\Users\\enrico\\Desktop\\openoffice.ods"));
    

    如果有人能帮忙,我将不胜感激,谢谢。

    此处为完整代码 https://gist.github.com/EnricoScantamburlo/b06d3a9e52682276b8ca4f6bf51e6f6a

    1 回复  |  直到 6 年前
        1
  •  2
  •   Babl    6 年前

    Apache ODF Toolkit(从版本0.8.2开始)基本上不支持您想要做的事情。 能够在中使用科学数字格式。ods文件底层库(在您的例子中是Apache ODF工具)应该能够生成 <number:scientific-number> 数字样式。有关科学数字样式的更多信息,请参见 http://docs.oasis-open.org/office/v1.1/OS/OpenDocument-v1.1-html/OpenDocument-v1.1.html#14.7.1.Number%20Style|outline .

    似乎Apache ODF Toolkit将 E0 作为货币或其他特殊符号

    <number:number-style style:name="N117">
        <number:scientific-number number:decimal-places="2" number:min-exponent-digits="2" number:min-integer-digits="1">
        </number:scientific-number>
    </number:number-style>
    

    它只是产生了这个

    <number:number-style style:name="n3cf821">
        <number:number number:decimal-places="2" number:min-integer-digits="1"></number:number>
        <number:text>E0</number:text>
    </number:number-style>
    

    好消息是,Apache ODF Toolkit是开源的,因此您可以提供修复,这将非常简单,只需修复 OdfNumberStyle.buildFromFormat .

    推荐文章