Apache POI日期区域设置问题

jba*_*ski 0 java excel apache-poi

在不使用Apache POI的情况下(例如,您手动生成xml以创建电子表格),您可以设置css类

mso-number-format: "General Date"
Run Code Online (Sandbox Code Playgroud)

要么

mso-number-format: "Short Date"
Run Code Online (Sandbox Code Playgroud)

使用Apache POI似乎不太可能,您将被锁定使用单个定义的日期格式,该格式始终依赖于物理服务器的区域设置或硬编码的某些值,而不是上面的客户端操作系统区域设置.

以下是我的代码,用户在美国服务器但在另一个国家/地区生活,希望在其所在地区查看日期,因此这不太好

    protected CellStyle getDateCellStyle(SXSSFWorkbook wb)
{
    CellStyle style = wb.createCellStyle();
    style .setDataFormat(wb.getCreationHelper().createDataFormat().getFormat("MM/dd/yyyy"));
    return style;
}
Run Code Online (Sandbox Code Playgroud)

基本上我想用"短日期"或"通用日期"替换"MM/dd/yyyy",但这些选项不起作用.有人有主意吗?我不能只根据服务器所在的位置获取区域设置,因为另一个国家可能会遇到它(因此我无法像其他答案所建议的那样在Java src中获取区域设置).

以前有人处理过这个吗?

Axe*_*ter 5

在Excel中,有一些内置数据格式没有明确的数据格式字符串.其中一个是"日期",数字格式为id 14.

此格式在Excel中的显示方式取决于Excel语言版本和Windows系统的区域设置.将显示en_US Excel m/d/yy.将显示en_GB Excel dd/mm/yyyy.de_DE Excel将显示dd.mm.yyyy...

因此,如果需要,那么使用

style.setDataFormat((short)14);
Run Code Online (Sandbox Code Playgroud)

内置数字格式更多.请参阅https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/BuiltinFormats.html.但并非所有语言都适用于所有语言的所有Excel版本.但默认的货币格式(5,6,7,8)也会起作用.

例:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.IOException;


class BuiltInFormats {

 public static void main(String[] args) {
  try {

    Workbook wb = new XSSFWorkbook();

    CellStyle builtInShortDate = wb.createCellStyle();
    builtInShortDate.setDataFormat((short)14);
    CellStyle builtInCurrency = wb.createCellStyle();
    builtInCurrency.setDataFormat((short)8);

    Sheet sheet = wb.createSheet();

    Row row = sheet.createRow(0);
    Cell cell = row.createCell(0);
    cell.setCellValue(new java.util.Date());
    cell.setCellStyle(builtInShortDate);

    row = sheet.createRow(1);
    cell = row.createCell(0);
    cell.setCellValue(1234.56);
    cell.setCellStyle(builtInCurrency);

    FileOutputStream os = new FileOutputStream("BuiltInFormats.xlsx");
    wb.write(os);
    os.close();

  } catch (IOException ioex) {
  }
 }
}
Run Code Online (Sandbox Code Playgroud)