8

フォーマットを含む既存のテンプレートから Excel シートを作成し、それにデータを追加して新しいファイルに保存する次のコードを見つけました

POIFSFileSystem fs = new POIFSFileSystem(
            new FileInputStream("template.xls"));
HSSFWorkbook wb = new  HSSFWorkbook(fs, true);
Will load an xls, preserving its structure (macros included). You can then modify it,

HSSFSheet sheet1 = wb.getSheet("Data"); ...

保存します。

FileOutputStream fileOut = new FileOutputStream("new.xls"); 
wb.write(fileOut);
fileOut.close();

これは絶対にうまくいきます。しかし、私の問題は、現在新しいバージョンの Excel を扱っていることです。そのため、新しいバージョンのテンプレートを処理するために同様のコードを開発する必要があります。誰かがこれを行う方法を提案できますか? HSSWorkbook を XSSFWorkbook に変更してみました。ただし、XSSFWorkbook には、ブール値を渡すことができるコンストラクターがありません。また。試してみると、データはコピーされますが、データを含む行は、テンプレートにある列の書式設定を保持しません。

4

2 に答える 2

9

これで問題なく動作するはずです (ただし、すべてのバグ修正には常に最新バージョンの POI を使用することをお勧めします)。

Workbook wb = new XSSFWorkbook( OPCPackage.open("template.xlsx") );
Sheet sheet = wb.getSheetAt(0);

// Make changes to the sheet
sheet.getRow(2).getCell(0).setCellValue("Changed value"); // For example

// All done
FileOutputStream fileOut = new FileOutputStream("new.xls"); 
wb.write(fileOut);
fileOut.close();

インターフェイスに対してコーディングする場合は、コンストラクターで HSSF と XSSF を交換するだけで、コードを両方の形式で機能させることができます。

于 2012-01-26T09:45:51.950 に答える