SlideShare a Scribd company logo
4
Most read
5
Most read
6
Most read
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

PDF
ClojureでElectronアプリを作ろう
PPTX
Excel 方眼紙撲滅委員会 活動報告 2012.11 #odstudy
PDF
イマドキのExcelスクショの撮り方
PDF
たとえ日本人同士でも必要な異文化理解力
PPTX
The Top 10 Facebook and Twitter Advertising Hacks of All Time - Larry Kim's P...
PDF
Mobile Is Eating the World (2016)
PPT
Javaを勉強する上で知っておく
ODP
Java の抽象クラス・インタフェース・無名クラスを理解しよう
ClojureでElectronアプリを作ろう
Excel 方眼紙撲滅委員会 活動報告 2012.11 #odstudy
イマドキのExcelスクショの撮り方
たとえ日本人同士でも必要な異文化理解力
The Top 10 Facebook and Twitter Advertising Hacks of All Time - Larry Kim's P...
Mobile Is Eating the World (2016)
Javaを勉強する上で知っておく
Java の抽象クラス・インタフェース・無名クラスを理解しよう

Viewers also liked (18)

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

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

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

More from takezoe (20)

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

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