2016-08-26 5 views
1

リストからExcelファイルを作成しようとしていますが、エクセルが作成され、データが追加されます。 Excelファイルを開こうとすると、「Excelがxx.xlsxで判読不能なコンテンツを検出しました」と表示されます。以下はApache POI - Excelがxx.xlsxで判読不能なコンテンツを見つけた

は私のコードです:

public static String createExcel(List<Localization> locs, 
             String location, 
             String revision, 
             String[] columnTitles) { 

    int columns = columnTitles.length; 
    FileOutputStream outputStream; 
    File file = null; 
    try { 
     file = new File("localization.xlsx"); 
     outputStream = new FileOutputStream(file); 
     XSSFWorkbook wb = new XSSFWorkbook(); 
    wb.getPackage().getPackageProperties().setRevisionProperty(revision); 

     // create an editable cell style 
     CellStyle unlockedCellStyle = wb.createCellStyle(); 
     unlockedCellStyle.setLocked(false); 

     XSSFSheet sheet = wb.createSheet(); 
     sheet.lockFormatCells(false); 
     sheet.lockFormatColumns(false); 
     sheet.lockFormatRows(false); 
     sheet.lockInsertRows(false); 
     // lock the sheet for editing 
     sheet.protectSheet("password"); 

     for (int i = 0; i <= locs.size(); i++) { 
      Row row = sheet.createRow(i); 
      for (int j = 0; j < columns; j++) { 
       if (i == 0) { 
        row.createCell(j).setCellValue(columnTitles[j]); 
       } 

       else { 
        switch(j){ 
         case 0: 
          row.createCell(j).setCellValue(locs.get(i - 1).getId()); 
          break; 
         case 1: 
          row.createCell(j).setCellValue(locs.get(i - 1).getEntityId()); 
          row.getCell(j).setCellStyle(unlockedCellStyle); 
          break; 
         case 2: 
          row.createCell(j).setCellValue(locs.get(i - 1).getValue()); 
          row.getCell(j).setCellStyle(unlockedCellStyle); 
          break; 
         case 3: 
          row.createCell(j).setCellValue(locs.get(i - 1).getLanguage().getLanguageCode()); 
          row.getCell(j).setCellStyle(unlockedCellStyle); 
          break; 
         case 4: 
          row.createCell(j).setCellValue(locs.get(i - 1).getCountry().getCountryCode()); 
          row.getCell(j).setCellStyle(unlockedCellStyle); 
          break; 
        } 
       } 
      } 
     } 
     wb.write(outputStream); 
     outputStream.close(); 
     wb.close(); 
     // file.delete(); 
    } catch (Exception e) { 
     log.error(e.getMessage()); 
    } 
    if (file != null) 
     return file.getAbsolutePath().toString(); 
    else 
     return null; 
} 
+0

Apache POIのどのバージョンを使用していますか?最新のものでない場合は、アップグレードするとどうなりますか? – Gagravarr

+0

'wb.getPackage()。getPackageProperties()。setRevisionProperty(revision)'ここで 'revision'とは何ですか?それは単一の数字でなければなりません。 http://www.ecma-international.org/news/TC45_current_work/Office%20Open%20XML%20Part%202%20-%20Open%20Packaging%20Conventions.pdf#page=42&zoom=auto,51,720 –

+0

@Axel Richterを参照してください。 。私はリビジョンの浮動小数点値を設定しています。 – gameOne

答えて

2

オフィスOpenXMLドキュメントのCore propertiesがtypeable無料ではありません。

だから、EcmaのOfficeオープンXMLファイル形式の標準はrevisionプロパティのために言う:。

「リビジョン番号[例:この値は保存またはリビジョンの数 を示している可能性があり、アプリケーションの更新にそれを提供各 改正後。例の終了]」

これは、文書が保存または改訂された頻度を意味するのでrevisionプロパティは、整数値であることを意味します。

関連する問題