Jakarta POIのHSSFで結合セル情報の取得

このQ&Aのポイント
  • 現在、Javaのサーブレット上でExcelファイルの入出力を行おうとしています。今回の質問は、Jakarta POIのHSSFを使用して結合セルの情報を抽出する方法についてです。
  • 現在、HSSFSheetクラスのgetNumMergedRegionsメソッドで結合セルの件数を取得し、getMergedRegionsAtメソッドで対象の結合セル情報を取得しています。しかし、対象の結合セル情報を取得するためにはすべてのセルを順番に見る必要があります。明示的に対象のセルが結合セルかどうかを指定して取得する方法はありませんか?
  • オートフィルを行うメソッドを作成し、テストしたところ、個々のセルの値やセル式、セル情報、書式、フォントは取得できましたが、結合セルの情報の取得は簡単ではありませんでした。何か良い方法はありませんか?ご教授お願いします。
回答を見る
  • ベストアンサー

Jakarta POI のHSSFで結合セル情報の取得

http://www.okweb.ne.jp/kotaeru.php3?q=688039 「Jakarta POI のHSSFで 行列挿入、オートフィルを行いたい」 から引き続いての質問です。前質問についてもご回答をお待ちしております。 Jakarta POI(1.10.0) のHSSFを使用して、 Java(j2sdk1.4.1_02)サーブレット上でExcelファイルの入出力を行おうと試みております。 今回お尋ねしたいのは、結合セルの情報の抽出方法についてです。 現状、当方でわかっているのは、HSSFSheetクラスのgetNumMergedRegionsメソッドで シートに登録されている結合セルの件数を取得し、 対象の結合セル情報をHSSFSheetクラスのgetMergedRegionsAtメソッドで取得し、Regionクラス変数にセット。 対象の結合開始終了行列を個々に抽出するというものなのですが、 HSSFSheetに存在するすべての対象の結合セル情報を頭から舐める必要があります。 対象のセルが結合セルなのかを、明示的に指定し、取得できないのでしょうか。 オートフィルを行うメソッドを試作として作成し、テストしたところ、 セルの値、セル式()、セルの情報(HSSFCell)、書式(HSSFCellStyle)、フォント(HSSFFont)は個々のセルで取得できたので、フィルする先のセルに反映出来たのですが、 結合セルは上記設定のように対象セルを指定して、取得。とは簡単に出来ませんでした。 なにかよい方法はございませんでしょうか。 ご教授をよろしくお願いいたします。

  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

Javadocを見る限りではセルから直接取得する手段は無いように思います。仰る通りMergedRegionsを頭からなめるしかないのではないでしょうか。ただ、なめると言っても基本的には、 for (int i = 0; i < sheet1.getNumMergedRegions(); i++) { if (sheet1.getMergedRegionAt(i).contains(row, col)) { //sheet1のセル(row,col)は結合セル break; } } なので、そんなに問題ではないような気がしますが…。 (なお私はこの質問を見て初めてPOIを試した程度なので、実は何かよい方法があるのかもしれません)

o_w_nakazaki
質問者

お礼

ご解答頂き、ありがとうございます。 せっかく意見を下さったのですが、HSSFはセル式のサポートがまだ完全ではないようで、 IF関数や、EXACT(文字列比較)などの関数があるワークブックを保存すると、 EXCELで開いたときにエラーが出てしまいます。 残念ながら、今回はHSSFをつかうのは控えようと思います。

関連するQ&A

  • Jakarta POI での、excelのシート保護

    こんにちは。いつも色々と参考にさせていただいております。POIを利用して、excelのシートの操作をやっているのですが、シートの保護がうまくいきません。 まず、sample.xlsを読み込み、 FileInputStream is = new FileInputStream("sample.xls"); HSSFWorkbook book = new HSSFWorkbook(is); HSSFSheet sheet = book.getSheetAt(0); HSSFSheetクラスのsetProtectメソッドを用いて、 sheet.setProtect(false); とすると、NullPointerExceptionが発生してしまいます。 メソッドの使い方が間違っているのでしょうか? どなたかご存知でしたらご教授いただきたいと思います。 よろしくお願い致します。

    • ベストアンサー
    • Java
  • EXCELでセルの結合にまつわるテクニック

    EXCELでセルの結合に関する2つの質問(+α)があります。 1.セルの結合を解除した際、セル内の元テキストは結合していた セルの中で一番上のセルにのみ残りますが、その下のセルにも同じものを 一括で反映させるための関数はどのようなものが適当でしょうか? 2.どうしても見栄えのためにセルの結合をしたいことがありますが そうすると並び替えができず不自由です。解決法はないのでしょうか? α.上記作業中に疑問に感じた余談ですが、オートフィルを使うと 連続データになるときと同じデータが反映される場合があり、 どういう場面で使い分けられているのかわかりません・・ 以上、いろいろと申し訳ございませんがご指導よろしくお願いいたします。

  • POIのHSSFCellStyleクラスを継承したい

    POI(http://jakarta.jp/poi/index.html)なる物を使ってExcelを作成するプログラムを作成しています 複数のプログラムで使用するため、機能を1つにまとめたクラスを用意し、そのクラスをプログラムで使用しようと考え作成していたのですが セル属性(HSSFCellStyle)を設定するクラスもまとめ用としたところ コンストラクタがprotected?のため、extendsして作成することができません (new HSSFCellStyle()ということも出来ません) HSSFCellStyleクラスで使用する機能をまとめたクラスを用意したいのですが 方法をご存知の方、よろしくお願いします HSSFCellStyle style = wb.createCellStyle(); style.setFillBackgroundColor(HSSFColor.AQUA.index); style.setFillPattern(HSSFCellStyle.BIG_SPOTS); HSSFCell cell = row.createCell((short) 1); cell.setCellStyle(style);

    • ベストアンサー
    • Java
  • セルが結合されている場合のオートフィルタ

    図のようにフィルタ抽出するセルが結合されています。 このままだと、3行ある下の2行は折りたたまれてしまいます。 該当する行を全て表示したい。 オートフィルタにこだわりませんが、何かいい知恵がありましたら、 よろしくお願いします。

  • エクセル>結合セルのオートフィルターで不具合?

    すいません。また、お知恵をお貸し下さい。 2行単位の結合セルが並ぶ一覧表で、オートフィルターを実行したところ、 2行目は空白として認識されるのか、1行目(結合したセルの一番上の行) しか、抽出(表示)されません。 さらに、各セルは罫線で囲ってあるのですが、抽出されたデータの最下段 に来るセル群には、下線のみが表示されず、印刷結果も画面通りです。 どなたか、お分かりになられる方はいらっしゃいますでしょうか。 恐らく初心者的な質問かと思いますが、よろしくお願い致します。

  • EXCELで、結合されたセルに連続して他のシートからセルの引用をしたい

    初めて「教えてgoo」を使用するため、説明不足かも知れませんがご容赦願います☆ EXCELで仕事用のデータ処理のテンプレートを作成していて不具合が起きて困っています☆ A列のセルは縦に三つずつ結合してあります。(A1~3、A4~6、A7~9・・・とそれぞれ結合してます) その結合してあるセルに、他のシートから順番になっているセルを引用したいのですが・・・ つまり・・・ A1~3の結合してあるセルに、=契約内訳書!A1、と引用して、 A4~6の結合してあるセルに、=契約内訳書!A2、と引用して、 A7~9の結合してあるセルに、=契約内訳書!A3、と引用して・・・ と続けたいのですが、オートフィルで入力しようとするとセルが結合してあるため、 =契約内訳書!A1、=契約内訳書!A4、=契約内訳書!A7と3つ飛びになってしまいます。 手入力すればいいのですが、この引用を何百行も行わなければいけないため、何か簡単な方法は無いかと思い書き込みしました。 説明が下手で申し訳ありませんが、どなたかお知恵を貸していただけないでしょうか? お願いします☆

  • エクセルVBAでの、結合したセルの扱いについて質問です

    エクセルVBAでの、結合したセルの扱いについて質問です A1とA2が結合されていたとします。 A1の値は、Range("A1")で取得できますが、 A2の値を取得しようとした場合、何もかえってきません 空の文字列が返ってきます。 A2がA1と結合されている、という情報を取得するにはどうしたらいいでしょうか。 ずっと困っていて、また困ったので聞いてみようと思いました。 よろしくお願いいたします。

  • エクセル:セルの色のコード番号のようなもの?を取得したい

    よろしくお願いします。 たとえば、セルA1のセルをピンクにしていたとします。そこで、B1に関数か何かを使ってA1セルの色を特定するコードを取得したいのです。 (その後、オートフィルでA列のピンク色のついたセルだけをB列のコードを使って選びたいのです) 雑誌の立ち読みで、可能なことまではわかっているのですが、やり方を忘れてしまいました。 その雑誌では「名前」と「マクロの色コード」と「関数」で可能だったように記憶しています。 よろしくお願いいたします。

  • 「Wordの表のセルの結合情報」をVBAで取得する

    「Wordの表のセルの結合情報」をVBAで取得する方法 EXCELのVBAであれば、下記サイトの下記マクロで判断できるようなのですが、 Word VBAには、「MergeCellsプロパティ」が無くて、駄目でした。 別の方法で判定出来ない物でしょうか? http://officetanaka.net/excel/vba/tips/tips50.htm ---------------------------------------------------------------------- Sub Sample2() Dim i As Long, buf As String For i = 2 To 9 If Cells(i, 1).MergeCells Then buf = buf & Cells(i, 1).Address(0, 0) & "-->結合されています" & vbCrLf Else buf = buf & Cells(i, 1).Address(0, 0) & "-->結合されていません" & vbCrLf End If Next i MsgBox buf End Sub ヘルプを調べましたが、ざっと見たところ載っていないように思います。 経験あるかた居たらご教授頂けると助かります。

  • OpenOffice表計算のマクロ(Basic)で選択中の結合セルからサイズを取得する方法について教えてください

    事情によりOpenOfficeの表計算ソフト上で簡単なマクロを作らなければならなくなったのですが、私は満足なプログラミングの知識をもっていず、また身近に頼れる詳しい人もいずに困り果ててしまいました。 マクロの内容は選択中の結合されたセルのサイズ(幅と高さ)にあわせて、はみ出さない範囲で拡大した画像を挿入するというものです。 ネットで検索するなどして調べたOOoBasicマクロの情報を元につぎはぎして、理解できないなりになんとか選択範囲のサイズを取得してあわせて拡大/縮小する所まではいきました。しかし、結合されたセルを選択している場合には、結合されたセルの中の一番左上の単一セルのサイズを取得してしまい、結合されたセル全体のサイズがどうしても取得できないという問題が残ってしまいました。 詳しく書くと、 Dim oSelection As Object oSelection = ThisComponent.CurrentSelection Dim w_len As Long Dim h_len As Long w_len = oSelection.size.Width h_len = oSelection.size.Height としたいうようになっていて、A1からC3まで結合されたセルを選択してマクロを実行するとA1の単一セルのサイズがw_lenとh_lenに入ってしまいます。 MicrosfOfficeに比べてOOoは情報が少なく、またあったとしても分かっている人向けに書いてあることが多く、関係がありそうなものを探しては闇雲にテストしてエラーを返され続けることに疲れました。 なにか良い方法があれば教えてください。よろしくお願いいたします。

専門家に質問してみよう