亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

POI 電子表格本地化

POI 電子表格本地化

藍山帝景 2023-02-16 16:29:53
使用Apache POI OOXML 和XSSF 模式,創建一個新的工作簿,如何設置電子表格的語言(即英語(美國))?我在上面找不到任何東西。該設置不需要是特定于單元格的,應該適用于所有工作表。我正在使用 POI 4.1.0 版。
查看完整描述

1 回答

?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

文件中工作表數據的存儲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.xlsx我的 German打開Excel,那么它看起來像:

http://img1.sycdn.imooc.com//63edead10001ec3e10190321.jpg

注意公式=RUNDEN(A3;2)。函數名稱翻譯成德語,函數參數之間的分隔符是分號,同樣是列表分隔符,double 值中的小數點分隔符是逗號,千位分隔符是點。

此外,數字格式代碼現在是德語:

http://img1.sycdn.imooc.com//63edeadd0001076405380454.jpg

為什么是這樣?主要是因為是德文Excel申請。但也因為Windows決定日期格式的區域設置

http://img1.sycdn.imooc.com//63edeaea00017eb404700539.jpg

...和十進制分隔符、列表分隔符和千位分隔符。

http://img1.sycdn.imooc.com//63edeaf60001eb5604630571.jpg


查看完整回答
反對 回復 2023-02-16
  • 1 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號