質問 |
||
QNo.1397355 | jakarta poiを使用し、EXCELの行コピーはできないのでしょうか? | |
---|---|---|
質問者:tomoiida |
以下のような処理を検討しています。 フォーマット.xlsには、タイトル行の雛型(背景色などを定義済)をを作成しておきます。 そのフォーマット.xlsをpoiを利用し読み込み、 ■タイトル行 ・明細 ・明細 ・明細 ■タイトル行 ・明細 ・明細 の要領でタイトル行を何度もコピーし、新しいエクセルを出力したいと考えています。 HSSFSheet#shiftRowsは完全なる移動のようですので、 何度もタイトル行を使う場合には不都合がでてしまいます。 単純な行コピーなのでできそうな感じもするのですが、 ご存じな方いらっしゃいましたら、 ご教授いただけますようお願いいたします。 |
|
困り度:
|
||
質問投稿日時: 05/05/19 17:42 |
回答 |
|
ANo.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(); ※例外処理は抜いています。 |
---|---|
回答者:tsumooh | |
種類:回答 どんな人:専門家 自信:参考意見 |
|
回答日時: 05/05/22 01:49 |
|
| |
この回答への補足 | この回答に補足をつける(質問者のみ) |
この回答へのお礼 | この回答にお礼をつける(質問者のみ) |