図形の書式設定を変えることは、一部の書式は変更することはできますが、それ以外の書式設定を変えるにはどうすれば良いのか、ちょっと調べてみました。今回の結論はリフレクションを使ったものになります。正規の方法では無いと思いますので、ご利用の際にはご注意ください。XSSFバージョン(Excel2007以降のファイルフォーマット、*.xlsxの形式)を最後に追記しました。こちらはリフレクション無しです。POIで直線の矢印を設定したい」というものがありました。図形の線の色、線のスタイル、線の幅、塗りつぶし色を設定するには、HSSFShapeにメソッドが用意されているので、それを使って変更することができます。HSSFShapeのメソッドで提供されている図形の書式設定は、Excelの図形の書式設定のごく一部だけです。私はPOIを使ったことがありましたが、ほとんどが読み取りの処理で、図形の処理はまったくやったことがありませんでした。今回はちょっと興味が湧いたので、少しだけ調べてみました。3.12普通の使い方で設定可能な書式を設定してみるまず最初に、新しいブックを作って図形を追加し、保存するプログラムを示します。今回は、Excel97-2003ブックで作成します。UncheckedIOException(e);}Excelで見てみると、こんな感じになります。前述のとおり、「ふつー」に設定できる書式設定はごく一部です。ほかの書式設定はどうすれば良いのでしょうか。formatに基づいています。POIの中では、org.apache.poi.ddfパッケージにこのフォーマットを扱うAPIがそろっています。Documentation)クラスを使うとできそうです。ところが、HSSFShapeにはsetPropertyValue(EscherProperty)メソッドがあるものの、protectedなので直接呼び出すことができません。HSSFShapeかHSSFSimpleShapeを継承したクラスを作ったり、HSSFPatriarchクラスはfinalなのでクローンを作ってみるのを検討したりしましたが、パッケージプライベートのメソッドが障碍になって上手くいきませんでした。リフレクションでEscherPropertyを設定するリフレクションでEscherPropertyを設定してみます。下記コードは、直線の終点を矢印にするプロパティーを設定する例です。RuntimeException(e);}毎回これを書くのは煩雑なので、関数型インターフェイスを使ってユーティリティー化してみましょう。UncheckedIOException(e);}図2:EscherPropertyで書式設定を追加したもの矢印と影が設定できました。リバースエンジニアリングEscherPropertyを図形に設定する方法は分かりましたが、EscherPropertyに設定する値が分かりません。LINESTYLE__LINEENDARROWHEADのようなプロパティーは当てずっぽうでもできましたが、全部のプロパティーを調べるのは大変です。そこで、既にExcel上で設定された図形の書式設定を読み取って出力するプログラムも作ってみました。こちらもリフレクション+関数型インターフェイスを使っています。(0x00080000)この出力結果を元に、EscherPropertyの値を決めていけばOKです。おわりに設定することはできましたが、冒頭でも述べているとおり、これが正規の方法ではありません。良い方法がありましたら、是非お教えください。Formatsに対応したAPIです。メインの部分はHSSFと大体同じですが、図形の拡張属性の変更はEscherPropertyではなく、CTXXXProperties(XXXの部分は種類によって変わる)を使って設定します。こちらのプロパティーは、リフレクション無しで扱えます。FormatsのAPIが含まれるpoi-ooxmlが必要です。UncheckedIOException(e);}影の付け方は分かりませんでした。それ以外は、結果はHSSFと完全ではないですがだいたい同じになります。XSSFのリバースエンジニアリングは、7-Zipアーカイバ―などでXLSXファイルを開いて、その中のxl\drawings\drawing1.xml辺りを見てみると何か分かるかもしれません。いうことでプログラムは作っていません。リリースしました自作のソフトをリリースしました。2017年・冬ここ半年くらいで参考になった情報のメモ。PythonでExcelから取得したデータからグラフ画像を生成Pythonを日常的に使うようになって、2か月*1が経過しました。...2016-02-26Javaでゲームパッドの入力をJInputを使って実現する突然、ゲームを作ってみたくなりました。(2)プロフィールid:argiusはてなブログをはじめよう!argiusさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。