gpt4 book ai didi

java - POI 电子表格本地化

转载 作者:行者123 更新时间:2023-12-02 09:44:52 24 4
gpt4 key购买 nike

使用Apache POI OOXML和XSSF模式,创建一个新的工作簿,如何设置电子表格的语言(即英语(美国))?我在上面找不到任何东西。该设置不需要特定于单元格,并且应适用于所有工作表。我使用的是 POI 版本 4.1.0。

最佳答案

Excel 文件中工作表数据的存储未本地化。就函数名称、列表分隔符以及小数和千位分隔符而言,工作表数据的存储始终为美国英语。仅 Excel 应用程序已本地化。 Excel GUI 从文件中读取数据,然后翻译函数名称、列表分隔符以及小数和千位分隔符。

让我们举个例子:

import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.util.GregorianCalendar;

class CreateExcel {

public static void main(String[] args) throws Exception {

try (Workbook workbook = new XSSFWorkbook();
FileOutputStream fileout = new FileOutputStream("Excel.xlsx") ) {

Object[][] data = new Object[][] {
new Object[] {"Value", "Date", "Formatted value", "Formula"},
new Object[] {123.456789, new GregorianCalendar(2019, 0, 15), 123.456789, "ROUND(A2,2)"},
new Object[] {1234.56789, new GregorianCalendar(2019, 5, 15), 1234.56789, "ROUND(A3,2)"}
};

DataFormat dataFormat = workbook.createDataFormat();
CellStyle dateStyle = workbook.createCellStyle();
dateStyle.setDataFormat(dataFormat.getFormat("DDDD, MMMM, DD, YYYY"));
CellStyle numberStyle = workbook.createCellStyle();
numberStyle.setDataFormat(dataFormat.getFormat("#,##0.00 \" Coins\""));

Sheet sheet = workbook.createSheet();

for (int r = 0; r < data.length; r++) {
Row row = sheet.createRow(r);
for (int c = 0; c < data[0].length; c++) {
Cell cell = row.createCell(c);

if (r == 0) cell.setCellValue((String)data[r][c]);
if (r > 0 && c == 0) {
cell.setCellValue((Double)data[r][c]);
} else if (r > 0 && c == 1) {
cell.setCellValue((GregorianCalendar)data[r][c]);
cell.setCellStyle(dateStyle);
} else if (r > 0 && c == 2) {
cell.setCellValue((Double)data[r][c]);
cell.setCellStyle(numberStyle);
} else if (r > 0 && c == 3) {
cell.setCellFormula((String)data[r][c]);
}
}
}

for (int c = 0; c < data[0].length; c++) {
sheet.autoSizeColumn(c);
}

workbook.write(fileout);
}

}
}

如您所见,代码中没有任何内容被本地化。一切都是en_US。公式中函数名称为ROUND,函数参数之间的分隔符为逗号,列表分隔符也是如此, double 值中的小数分隔符为点。此外,数字格式代码为 en_US

Excel.xlsx 文件中存储的内容均未以任何方式本地化。

但是如果我在德语 Excel 中打开 Excel.xlsx,那么它看起来像:

enter image description here

注意公式=RUNDEN(A3;2)。函数名称翻译为德语,函数参数之间的分隔符是分号,列表分隔符也是如此, double 值中的小数分隔符是逗号,千位分隔符是点。

此外,数字格式代码现在是德语:

enter image description here

这是为什么呢?主要是因为它是德语 Excel 应用程序。而且还因为 Windows 区域设置决定了日期格式

enter image description here

...以及小数分隔符、列表分隔符和千位分隔符。

enter image description here

关于java - POI 电子表格本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56740976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com