使用 Apache ODF Toolkit Simple API 和 Java 格式化单元格
Formatting cells with Apache ODF Toolkit Simple API and Java
我需要使用 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
基本上,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
。
我需要使用 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
基本上,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
。