*目次 [#f6f871c7]
#contents

*対象読者 [#v1b80415]
ビルドパスの設定ぐらいは簡単にできる方

*SCALAをつかってExcelを扱う [#q379a6fe]
 SCALAを実際につかってみて、どれだけ楽に記述できるようになったのか検証してみたいとおもいます。

*Java Excel API [#me7def6d]
-http://jexcelapi.sourceforge.net/
**Download [#z1c51a49]
http://sourceforge.net/projects/jexcelapi/files/
**チュートリアル [#ya413957]
ダウンロードしてきたファイルを解凍するとtutorial.htmlがあるので、
それをみるといいとおもわれる。

**Java Excel API 日本語での紹介サイト [#uf4640ed]
***Java Excel API(読み込み機能) [#a3b50f93]
---http://www.emxas.co.jp/itblog/category_35/item_133.html

***Java Excel API(書き込み機能(1)) [#n2fdd81f]
---http://www.emxas.co.jp/itblog/category_35/item_151.html

***Java Excel API(書き込み機能(2)) [#y4349ece]
---http://www.emxas.co.jp/itblog/category_35/item_172.html


*Sheetの名前を出力してみる [#afc1ab76]
Javaをつかった場合とScalaをつかった場合を比較してみよう
**Javaをつかった場合 [#e40eec5f]
 import java.io.File;
 import java.io.IOException;
 
 import jxl.Workbook;
 import jxl.read.biff.BiffException;
 
 public class Main {
	public static void main(String[] args) throws BiffException, IOException {
		File excelFile = new File(args[0]);
		Workbook workbook = Workbook.getWorkbook(excelFile);
		System.out.println(workbook.getSheet(0).getName());
		workbook.close();
	}
 }

**Scalaをつかった場合 [#h2e6fd00]
 object ExcelSample {
  import java.io.File
  import java.io.IOException
**SCALAの特徴を使った場合 [#g6e7bb6a]
Java用につくられたExcelのWorkbookクラスを、そのままでも使えますが、
SCALAの特徴を生かしたobjectをつくります、ファイル名をWorkbookScala.scala
とでもしましょうか。

-WorkbookScala.scala
 import java.io.File
 import java.io.IOException
 import jxl.Workbook
 import jxl.read.biff.BiffException
 import scala.util.DynamicVariable
 
  import jxl.Workbook
  import jxl.read.biff.BiffException
  
   def main(args:Array[String])
    {
       var excelFile = new File(args(0))
 object WorkbookScala{
  val dynamicvariable= new DynamicVariable[Workbook](null)
  //自動的にcloseするopen
  def open (path:String)(block : => Unit){
 	         var excelFile = new File(path)
       var workbook = Workbook.getWorkbook(excelFile)
	   System.out.println(workbook.getSheet(0).getName());
	   workbook.close();
	   try {
	     out.withValue(workbook){block}
	   } finally {
		 workbook.close();  
	   }
  }
  //自動的に設定されるブロック変数のようなもの
  def $_()={
    dynamicvariable.value
  }
 }

-Sample.scala
SCALAは動的変数を使うことでブロック部分以外をカプセル化できる点がJavaより優れています。
--特徴
---自動的にファイルクローズする(Javaで困難な箇所)
---ブロック変数は宣言せずに$_で使えるようになっている
---複雑なインポートの宣言をimport WorkbookScala._だけで済ませている
 import WorkbookScala._
 object Sample{
  def main(args: Array[String]): Unit = {
    open(args(0)){
      println($_.getSheet(0).getName())
    }
  }    
 }
***確認の仕方 [#d862710d]

**確認の仕方 [#d862710d]
***コマンドラインでコンパイルする場合 [#neab0acc]
scalac --classpath jarファイルのパス コンパイルしたい.scala

***実行は [#d3e9b77a]
scala --classpath jarファイルのパス コンパイルしたい.scala

***引数 [#y99fc9ff]
 Excel版 Scale版 どちらも引数にEXCELのファイルを必要とする。
 たとえば c:\xxx\yyy.xslならば"c:\\xxx\\yyy.xsl"
 を渡す

**俺はこう思った。。。 [#m4f077b2]
-ぱっと見、騒ぐほど簡潔になってないジャン。
--メリット
--- 型宣言が不要になった。
--デメリット
---EclipseのCtrl+Space等のサポートが受けられないので未知のメソッドを調べるのが大変だ


*SCALAの動的メソッドをつかったら便利になるか確かめてみる [#ed546188]
def 動的関数名(引数)(動的変数 => Unit){

}

**Java Excel API 日本語での紹介サイト [#uf4640ed]
***Java Excel API(読み込み機能) [#a3b50f93]
---http://www.emxas.co.jp/itblog/category_35/item_133.html

***Java Excel API(書き込み機能(1)) [#n2fdd81f]
---http://www.emxas.co.jp/itblog/category_35/item_151.html

***Java Excel API(書き込み機能(2)) [#y4349ece]
---http://www.emxas.co.jp/itblog/category_35/item_172.html

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS