在Offixe OpenXML的(*.xlsx),用于货币数字格式仅货币符号可以本地化但不是小数分隔符。小数点分隔符来自运行Excel的Windows系统的Windows系统区域设置。千位分隔符还默认为运行Excel的Windows系统的Windows系统区域设置。
在Excel中,这看起来像:
正如你看到的只是货币符号可以本地化。
至少可以使用格式字符串设置数千个分隔符。所以格式字符串可能是
"#\\ ###\\ ##0.00\\ [$€-40C];[RED]\\-#\\ ###\\ ##0.00\\ [$€-40C]"。
这是具有本地化的法国欧元货币符号和空间作为数千分隔符的货币数字格式。因为我们伪造了千位分隔符,所以我们必须在格式字符串中根据需要提供尽可能多的数字。
小数点分隔符是默认值,这意味着它来自运行Excel的Windows系统的Windows系统区域设置。因此格式字符串中的点.并不意味着始终使用小数点作为小数定界符,而是使用来自运行Excel的Windows系统的Windows系统区域设置的小数定界符。如果我们使用逗号,作为格式字符串中的千位分隔符,那么这也会使用来自运行Excel的Windows系统的Windows系统语言环境设置的千位分隔符。然后,我们不需要在格式字符串中输入太多的数字,因为那么千位分隔符设置会每隔数千位重复一次。所以
"#,##0.00\\ [$€-40C];[RED]\\-#,##0.00\\ [$€-40C]"
就足够了。
实施例:
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.streaming.SXSSFSheet;
public class CreateExcelNumberFormat {
public static void main(String[] args) throws Exception {
SXSSFWorkbook workbook = new SXSSFWorkbook(100);
DataFormat dataformat = workbook.createDataFormat();
CellStyle cellStyleCurrency = workbook.createCellStyle();
cellStyleCurrency.setDataFormat(dataformat.getFormat("#\\ ###\\ ##0.00\\ [$€-40C];[RED]\\-#\\ ###\\ ##0.00\\ [$€-40C]"));
Sheet sheet = workbook.createSheet();
Row row = sheet.createRow(1);
Cell cell = row.createCell(0);
cell.setCellValue(123456.78);
cell.setCellStyle(cellStyleCurrency);
((SXSSFSheet)sheet).trackColumnForAutoSizing(0);
sheet.autoSizeColumn(0);
workbook.write(new FileOutputStream("CreateExcelNumberFormat.xlsx"));
workbook.close();
workbook.dispose();
}
}
但这不是一样的局部货币格式是在LibreOffice的OpenDocument电子表格格式可用。这看起来像:
正如你在这里看到的这两个,货币符号和全格式的语言,可以本地化。
但它是Office OpenXML(*.xlsx)不能存储本地化的货币数字格式。 OpenDocument电子表格(*.ods)是OpenOffice/LibreOffice的原生格式,可以保存本地化的货币数量格式,但是如果Excel打开这样的文件,本地化将会丢失。
OpenOffice/Libreoffice的“Language”组合框的设置不能存储在*.xlsx中,也不能存储在OpenOffice/Libreoffice中。在OpenOffice/Libreoffice中设置别的默认值,将文件保存为*.xlsx,关闭OpenOffice/Libreoffice,再次在OpenOffice/Libreoffice中打开存储的*.xlsx文件。您会看到“语言”被重设为默认值。
JAVA设置输入数据范围 如何使用Apache POI(SXSSF)为特定单元格设置数据(数字)格式区域设置?...