Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Excel方眼紙を支えるJava技術 2015

5,478 views

Published on

Excel方眼紙を支えるJava技術 2015年版

※2014年版はこちら
http://d.hatena.ne.jp/takezoe/20140106/p1

Published in: Software
  • Be the first to comment

Excel方眼紙を支えるJava技術 2015

  1. 1. Excel方眼紙を支えるJava技術   2015 @takezoen   BizReach,  Inc
  2. 2. Excel方眼紙を支える   基盤技術
  3. 3. Apache  POI •  様々なライブラリの基盤技術として活用され ている   •  JavaExcel  APIというライブラリもあったがExcel   2007に対応しておらず開発も停止している   •  使いこなすには修練が必要だが、より高度な ライブラリを使う場合でも細かい操作に必要 だったりする
  4. 4. 流れるようなPOI
  5. 5. poi4s •  POIによるExcelの読み込みをScalaのコレク ションAPIで行うことができるライブラリ // 列の見出しを検索 sheet.find(_.text == "Name").map { header => // その列を一番下までスキャンしてセルの値を出力 sheet.column(header.colNum) .filter(_.rowNum > header.rowNum).foreach { cell => println(cell.text) } }
  6. 6. Excelテンプレートエンジン
  7. 7. JETT •  Fisshplate、jXLSなどの類似品があるが、 JETTが最も高機能   •  jXLSとの比較   hGp://jeG.sourceforge.net/jxls_comp.html  
  8. 8. Object/Excelマッピング
  9. 9. XLSBeans •  アノテーションでExcelをJavaBeanにマッピング @Sheet(name="Users") public class UserList { @LabelledCell(label="Title", type=LabelledCellType.Right) public String title; @HorizontalRecords(tableLabel="User list", recordClass=User.class) public List<User> users; public static class User { @Column(columnName="ID") public int id; @Column(columnName="Name") public String name; @Column(columnName="Gender", merged=true) public String gender; } }
  10. 10. PDF帳票もExcelで
  11. 11. JODReport •  OpenDocumentをFreeMarkerを使って処理す るという大雑把なアーキテクチャ
  12. 12. JODConverter •  OpenOffice  or  LibreOfficeのエンジンを使用して OpenDocumentをPDFに変換する   •  OpenDocumentだけでなくOpenOffice/LibreOfficeが サポートしているファイル形式であれば相互に変換 が可能  
  13. 13. 割とつらい •  OpenOfficeで保存したファイルを展開してXMLに直 接FreeMarkerのタグを挿入しないといけないケース があったりしてつらい   •  細かいレイアウトを気にしないのであればJETTなど で作成したExcelファイルをJODConverterでPDFに変 換するのもありかも
  14. 14. 最終兵器COM
  15. 15. JACOB •  POIではできない操作も行うことができる   •  シンプルに使えるJCOMや、ソースコードを自 動生成することでタイプセーフに使えるcom4j などもある
  16. 16. COMであればなんでも叩ける ActiveXComponent xl = new ActiveXComponent("Excel.Application"); Object xlo = xl.getObject(); try { System.out.println("version="+xl.getProperty("Version")); System.out.println("version="+Dispatch.get(xlo, "Version")); xl.setProperty("Visible", new Variant(true)); Object workbooks = xl.getProperty("Workbooks").toDispatch(); Object workbook = Dispatch.get(workbooks,"Add").toDispatch(); Object sheet = Dispatch.get(workbook,"ActiveSheet").toDispatch(); Object a1 = Dispatch.invoke(sheet, "Range", Dispatch.Get,                            new Object[] {"A1"}, new int[1]).toDispatch(); Object a2 = Dispatch.invoke(sheet, "Range", Dispatch.Get,                            new Object[] {"A2"}, new int[1]).toDispatch(); Dispatch.put(a1, "Value", "123.456"); Dispatch.put(a2, "Formula", "=A1*2"); System.out.println("a1 from excel:"+Dispatch.get(a1, "Value")); System.out.println("a2 from excel:"+Dispatch.get(a2, "Value")); Variant f = new Variant(false); Dispatch.call(workbook, "Close", f); } catch (Exception e) { e.printStackTrace(); } finally { xl.invoke("Quit", new Variant[] {}); }
  17. 17. デメリットも多い •  Windows環境でしか使えない   •  実行環境にExcelが必要   •  不安定、エラーハンドリングが難しい  
  18. 18. そして2015年
  19. 19. (公開されたのは2014年)
  20. 20. Excel方眼紙  meets  Web
  21. 21. axebomber-­‐clj •  ClojureでExcel方眼紙をHTMLライクに生成 (create-style ".title1" :background-color "lightblue") (create-style ".title2" :background-color "lightgreen") (render sheet 1 1 [:table [:tr [:td.title1 {:data-width 3} "ID"] [:td.title2 {:data-width 8} "名前"]] [:tr [:td 1] [:td "りんご"]] [:tr [:td 2] [:td "ばなな"]]])
  22. 22. Enjoy  your  Excel  life  with  Java…

×