• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:jakarta poiを使用し、EXCELの行コピーはできないのでしょうか?)

jakarta poiを使用し、EXCELの行コピーはできないのでしょうか?

このQ&Aのポイント
  • フォーマット.xlsには、タイトル行の雛型を作成しておきます。そのフォーマット.xlsをpoiを利用し読み込み、新しいエクセルを出力する際にタイトル行を何度もコピーしたいと考えています。
  • HSSFSheet#shiftRowsは完全なる移動のため、タイトル行を使う場合には不都合が生じます。単純な行コピーの方法があれば教えていただきたいです。
  • jakarta poiを使用してEXCELの行をコピーする方法をご存じの方がいらっしゃいましたら、教えていただけますと幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • tsumooh
  • ベストアンサー率50% (1/2)
回答No.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(); ※例外処理は抜いています。

関連するQ&A