SlideShare a Scribd company logo
Excel方眼紙を支えるJava技術	
  
2015	
@takezoen	
  
BizReach,	
  Inc
Excel方眼紙を支える	
  
基盤技術
Apache	
  POI	
•  様々なライブラリの基盤技術として活用され
ている	
  
•  JavaExcel	
  APIというライブラリもあったがExcel	
  
2007に対応しておらず開発も停止している	
  
•  使いこなすには修練が必要だが、より高度な
ライブラリを使う場合でも細かい操作に必要
だったりする
流れるようなPOI
poi4s	
•  POIによるExcelの読み込みをScalaのコレク
ションAPIで行うことができるライブラリ	
// 列の見出しを検索	
sheet.find(_.text == "Name").map { header =>
// その列を一番下までスキャンしてセルの値を出力	
sheet.column(header.colNum)
.filter(_.rowNum > header.rowNum).foreach { cell =>
println(cell.text)
}
}
Excelテンプレートエンジン
JETT	
•  Fisshplate、jXLSなどの類似品があるが、
JETTが最も高機能	
  
•  jXLSとの比較	
  
hGp://jeG.sourceforge.net/jxls_comp.html	
  
Object/Excelマッピング
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;
}
}
PDF帳票もExcelで
JODReport	
•  OpenDocumentをFreeMarkerを使って処理す
るという大雑把なアーキテクチャ
JODConverter	
•  OpenOffice	
  or	
  LibreOfficeのエンジンを使用して
OpenDocumentをPDFに変換する	
  
•  OpenDocumentだけでなくOpenOffice/LibreOfficeが
サポートしているファイル形式であれば相互に変換
が可能	
  
割とつらい	
•  OpenOfficeで保存したファイルを展開してXMLに直
接FreeMarkerのタグを挿入しないといけないケース
があったりしてつらい	
  
•  細かいレイアウトを気にしないのであればJETTなど
で作成したExcelファイルをJODConverterでPDFに変
換するのもありかも
最終兵器COM
JACOB	
•  POIではできない操作も行うことができる	
  
•  シンプルに使えるJCOMや、ソースコードを自
動生成することでタイプセーフに使えるcom4j
などもある
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[] {});
}
デメリットも多い	
•  Windows環境でしか使えない	
  
•  実行環境にExcelが必要	
  
•  不安定、エラーハンドリングが難しい	
  
そして2015年
(公開されたのは2014年)
Excel方眼紙	
  meets	
  Web
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 "ばなな"]]])
Enjoy	
  your	
  Excel	
  life	
  with	
  Java…

More Related Content

Viewers also liked (18)

ODP
The Introduction to Vector Graphics
emaame
 
PDF
今Cinderが熱い! #cinder
KatsuyaENDOH
 
PDF
Math1 Vector
Keisuke Hata
 
DOCX
Rでの対称行列の固有値・固有ベクトルの最適な求め方
wada, kazumi
 
PDF
Javaの資格試験(OCJ-P)を取って何を学んだか
Hiroki Uchida
 
PPT
ビジネスアイデアマンコンテスト
Yu Uchida
 
PPTX
第1回ビジネスプランコンテスト
DigitalHealthConnect
 
PDF
OpenGL 3DCG
Takenori Nakagawa
 
PPT
ビジネスプラン収支 20120907b
SEEDx
 
PDF
Processingでジャバジャバ稼ぐ
reona396
 
PDF
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
Hiro H.
 
PPSX
2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座
真乙 九龍
 
PDF
Excel方眼紙にさよならなんて言えない
Atsuko MATSUOKA
 
PDF
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
Hiro H.
 
PDF
初歩から始めるJava勉強会 プレゼンテーション資料
Terumi Tamura
 
PDF
ピーFIの研究開発現場
Yuya Unno
 
PDF
ビジネスプランの評価ポイント20110706
Takeshi Motohashi
 
PDF
Dbts2015 tokyo vector_in_hadoop_vortex
Koji Shinkubo
 
The Introduction to Vector Graphics
emaame
 
今Cinderが熱い! #cinder
KatsuyaENDOH
 
Math1 Vector
Keisuke Hata
 
Rでの対称行列の固有値・固有ベクトルの最適な求め方
wada, kazumi
 
Javaの資格試験(OCJ-P)を取って何を学んだか
Hiroki Uchida
 
ビジネスアイデアマンコンテスト
Yu Uchida
 
第1回ビジネスプランコンテスト
DigitalHealthConnect
 
OpenGL 3DCG
Takenori Nakagawa
 
ビジネスプラン収支 20120907b
SEEDx
 
Processingでジャバジャバ稼ぐ
reona396
 
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
Hiro H.
 
2012.11.03 #odstudy Excel方眼紙に魂を削られない為のoffice講座
真乙 九龍
 
Excel方眼紙にさよならなんて言えない
Atsuko MATSUOKA
 
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
Hiro H.
 
初歩から始めるJava勉強会 プレゼンテーション資料
Terumi Tamura
 
ピーFIの研究開発現場
Yuya Unno
 
ビジネスプランの評価ポイント20110706
Takeshi Motohashi
 
Dbts2015 tokyo vector_in_hadoop_vortex
Koji Shinkubo
 

Similar to Excel方眼紙を支えるJava技術 2015 (17)

PDF
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
 
PPTX
AWS Elastic Beanstalk のススメ
Taiji INOUE
 
PDF
Api meetup LT
Daisuke Kasuya
 
PDF
Elasticsearch 2014/04/21 勉強会資料 「Couchbase と Elasticsearch が手を結んだら」
Masahiro Satake
 
PDF
オープンソースでExcelレポートプログラミング
Sho Okada
 
PDF
Swiftでの関数型プログラミングについて考えていること
Shingo Sato
 
PPTX
Apache NiFi 流れるデータにもスキーマを
Koji Kawamura
 
PDF
Scalaz-StreamによるFunctional Reactive Programming
Tomoharu ASAMI
 
PPT
Microsoft Access講習
Tetsuya Yamamoto
 
PDF
Trait in scala
Yuta Shimakawa
 
PDF
AWS Black Belt Online Seminar 2017 Amazon Athena
Amazon Web Services Japan
 
PDF
2015/11/15 Javaでwebアプリケーション入門
Asami Abe
 
PPTX
WordPressでExcelインポート - Word Fes 2015 -
Yuusuke Yoshida
 
PDF
ES6 in Practice
Teppei Sato
 
PPTX
スキーマ 付き 分散ストリーム処理 を実行可能な FlinkSQLClient の紹介
Sotaro Kimura
 
KEY
恐るべきApache, Web勉強会@福岡
Aya Komuro
 
PDF
PHP フィールドインジェクションに挑戦する PHP勉強会2014
Yuuki Takezawa
 
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
 
AWS Elastic Beanstalk のススメ
Taiji INOUE
 
Api meetup LT
Daisuke Kasuya
 
Elasticsearch 2014/04/21 勉強会資料 「Couchbase と Elasticsearch が手を結んだら」
Masahiro Satake
 
オープンソースでExcelレポートプログラミング
Sho Okada
 
Swiftでの関数型プログラミングについて考えていること
Shingo Sato
 
Apache NiFi 流れるデータにもスキーマを
Koji Kawamura
 
Scalaz-StreamによるFunctional Reactive Programming
Tomoharu ASAMI
 
Microsoft Access講習
Tetsuya Yamamoto
 
Trait in scala
Yuta Shimakawa
 
AWS Black Belt Online Seminar 2017 Amazon Athena
Amazon Web Services Japan
 
2015/11/15 Javaでwebアプリケーション入門
Asami Abe
 
WordPressでExcelインポート - Word Fes 2015 -
Yuusuke Yoshida
 
ES6 in Practice
Teppei Sato
 
スキーマ 付き 分散ストリーム処理 を実行可能な FlinkSQLClient の紹介
Sotaro Kimura
 
恐るべきApache, Web勉強会@福岡
Aya Komuro
 
PHP フィールドインジェクションに挑戦する PHP勉強会2014
Yuuki Takezawa
 
Ad

More from takezoe (20)

PDF
Journey of Migrating Millions of Queries on The Cloud
takezoe
 
PDF
GitBucket: Open source self-hosting Git server built by Scala
takezoe
 
PDF
Testing Distributed Query Engine as a Service
takezoe
 
PDF
Revisit Dependency Injection in scala
takezoe
 
PDF
How to keep maintainability of long life Scala applications
takezoe
 
PDF
頑張りすぎないScala
takezoe
 
PDF
GitBucket: Git Centric Software Development Platform by Scala
takezoe
 
PDF
Non-Functional Programming in Scala
takezoe
 
PDF
Scala警察のすすめ
takezoe
 
PDF
Scala製機械学習サーバ「Apache PredictionIO」
takezoe
 
PDF
The best of AltJava is Xtend
takezoe
 
PDF
Scala Warrior and type-safe front-end development with Scala.js
takezoe
 
PDF
Tracing Microservices with Zipkin
takezoe
 
PDF
Type-safe front-end development with Scala
takezoe
 
PDF
Scala Frameworks for Web Application 2016
takezoe
 
PDF
Macro in Scala
takezoe
 
PDF
Java9 and Project Jigsaw
takezoe
 
PDF
Reactive database access with Slick3
takezoe
 
PDF
markedj: The best of markdown processor on JVM
takezoe
 
PDF
ネタじゃないScala.js
takezoe
 
Journey of Migrating Millions of Queries on The Cloud
takezoe
 
GitBucket: Open source self-hosting Git server built by Scala
takezoe
 
Testing Distributed Query Engine as a Service
takezoe
 
Revisit Dependency Injection in scala
takezoe
 
How to keep maintainability of long life Scala applications
takezoe
 
頑張りすぎないScala
takezoe
 
GitBucket: Git Centric Software Development Platform by Scala
takezoe
 
Non-Functional Programming in Scala
takezoe
 
Scala警察のすすめ
takezoe
 
Scala製機械学習サーバ「Apache PredictionIO」
takezoe
 
The best of AltJava is Xtend
takezoe
 
Scala Warrior and type-safe front-end development with Scala.js
takezoe
 
Tracing Microservices with Zipkin
takezoe
 
Type-safe front-end development with Scala
takezoe
 
Scala Frameworks for Web Application 2016
takezoe
 
Macro in Scala
takezoe
 
Java9 and Project Jigsaw
takezoe
 
Reactive database access with Slick3
takezoe
 
markedj: The best of markdown processor on JVM
takezoe
 
ネタじゃないScala.js
takezoe
 
Ad

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