2017-07-12 4 views
0

こんにちは、JavaでapachePOIを使用してxlsファイルを生成する作業を進めています。私は日付の列を持っています。今問題は、ExcelがデフォルトのOS設定から日付形式を選択することです。ExcelでapachePOIを使用してJavaでOSのデフォルト日付形式を使用しないように制限する

私はExcelにdd-mm-yyyyを常に選択させるという問題があります。しかし、OS設定が米国のシステムでは、mm-dd-yyyyが選択されます。したがって、17〜2017年のような有効な日付は、17日目がないため米国のシステムで無効になります。

私の質問には、Excelに必要な日付形式を使用させることができます。つまり、OSの設定を使用しないようにExcelを制限できますか?可能でない場合は、他の回避策に感謝します。ありがとう。

コード:

private static void doCreate() throws FileNotFoundException, ParseException { 

     Workbook workbook; 
     Row row; 
     Sheet spreadsheet; 

     workbook = new HSSFWorkbook(); 
     spreadsheet = workbook.createSheet("Order Details"); 

     dateCellStyle = workbook.createCellStyle(); 
//  LocaleUtil.setUserTimeZone(LocaleUtil.TIMEZONE_UTC); 
//  // Locale.setDefault(); 
//  final String excelFormatPattern = DateFormatConverter.convert(Locale.JAPANESE, "dd MMMM, yyyy"); 
//  // final DataFormatter dataFormatter = new DataFormatter(Locale.ENGLISH); 
     final short df = workbook.createDataFormat().getFormat("dd-mm-yyyy"); 
     dateCellStyle.setDataFormat(df); 

     final String inputDate = "2017-10-24"; 

     row = spreadsheet.createRow(0); 
     final Cell cell = row.createCell(0); 

     final Date creationDate = inputCreationDateFormat.parse(inputDate); 
     cell.setCellValue(outputCreationDateFormat.format(creationDate)); 
     cell.setCellStyle(dateCellStyle); 

     final FileOutputStream out = new FileOutputStream(new File("Writesheet.xls")); 
     try { 
      workbook.write(out); 
      workbook.close(); 
     } catch (final IOException e) { 

     } 
     System.out.println("Writesheet.xls written successfully"); 
    } 
} 

答えて

1

掲載のコードは完全ではないが、セルの書式がDD-MM-YYYYに設定されて表示されます。

しかし、コードがDateをとる:

Date creationDate = inputCreationDateFormat.parse(inputDate); 

と実際のセル値のためのいくつかの他のタイプ(String?)に変換されます。

cell.setCellValue(outputCreationDateFormat.format(creationDate)); 

代わりに、ちょうどDateを使用します。

cell.setCellValue(creationDate); 

ので、Excelが日付値に書式を適用することができます。ここで

は、複数の形式での例です:

public class XlsApp { 
    public static void main(String[] args) throws IOException { 
     XlsApp app = new XlsApp(); 
     app.doCreate(); 
    } 

    private void doCreate() throws IOException { 
     Workbook workbook = new HSSFWorkbook(); 

     CellStyle mmddyyyy = workbook.createCellStyle(); 
     mmddyyyy.setDataFormat(workbook.createDataFormat().getFormat("mm-dd-yyyy")); 

     CellStyle ddmmyyyy = workbook.createCellStyle(); 
     ddmmyyyy.setDataFormat(workbook.createDataFormat().getFormat("dd-mm-yyyy")); 

     Sheet sheet = workbook.createSheet(); 
     for (int r = 0; r < 10; r++) { 
      Date date = new Date(System.currentTimeMillis() - ThreadLocalRandom.current().nextInt()); 

      Row row = sheet.createRow(r); 

      Cell cell = row.createCell(0); 
      cell.setCellStyle(mmddyyyy); 
      cell.setCellValue(date); 

      cell = row.createCell(1); 
      cell.setCellStyle(ddmmyyyy); 
      cell.setCellValue(date); 
     } 

     sheet.autoSizeColumn(0); 
     sheet.autoSizeColumn(1); 

     FileOutputStream out = new FileOutputStream(new File("c:\\temp\\test.xls")); 
     workbook.write(out); 
     workbook.close(); 
    } 

} 
関連する問題