- ベストアンサー
jakarta poiを使用し、EXCELの行コピーはできないのでしょうか?
- フォーマット.xlsには、タイトル行の雛型を作成しておきます。そのフォーマット.xlsをpoiを利用し読み込み、新しいエクセルを出力する際にタイトル行を何度もコピーしたいと考えています。
- HSSFSheet#shiftRowsは完全なる移動のため、タイトル行を使う場合には不都合が生じます。単純な行コピーの方法があれば教えていただきたいです。
- jakarta poiを使用してEXCELの行をコピーする方法をご存じの方がいらっしゃいましたら、教えていただけますと幸いです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
コピーのようなメソッドは用意されていないんですね。 ちょっと面倒ですが、行の内容を取得して、その中のセルの値およびスタイルをコピーするという方法でしたらどうでしょうか。 // テンプレートの読み込み POIFSFileSystem fs = new POIFSFileSystem( new FileInputStream(new File("src.xls"))); HSSFWorkbook book = new HSSFWorkbook(fs); HSSFSheet sheet = book.getSheetAt(0); // タイトル行(1行目)の取得 HSSFRow titleRow = sheet.getRow(0); // タイトル行を別の行(ここでは2行目)へコピーします。 HSSFRow row = sheet.createRow(1); // セルをコピーします。 int length = titleRow.getLastCellNum(); for (int i=0; i<length; i++) { HSSFCell titleCell = titleRow.getCell((short)i); HSSFCell cell = row.createCell((short)i); if (titleCell != null) { // 値を取得 switch (titleCell.getCellType()) { case HSSFCell.CELL_TYPE_BLANK : break; case HSSFCell.CELL_TYPE_BOOLEAN : cell.setCellValue(titleCell.getBooleanCellValue()); break; case HSSFCell.CELL_TYPE_ERROR : cell.setCellValue(titleCell.getErrorCellValue()); break; case HSSFCell.CELL_TYPE_FORMULA : cell.setCellValue(titleCell.getStringCellValue()); break; case HSSFCell.CELL_TYPE_NUMERIC : cell.setCellValue(titleCell.getNumericCellValue()); break; case HSSFCell.CELL_TYPE_STRING : cell.setCellValue(titleCell.getStringCellValue()); break; default : } // スタイルを取得 cell.setCellStyle(titleCell.getCellStyle()); } } // 保存 FileOutputStream fos = new FileOutputStream(new File("dest.xls")); book.write(fos); fos.close(); ※例外処理は抜いています。