ビルドパスの設定ぐらいは簡単にできる方
SCALAを実際につかってみて、どれだけ楽に記述できるようになったのか検証してみたいとおもいます。
http://sourceforge.net/projects/jexcelapi/files/
ダウンロードしてきたファイルを解凍するとtutorial.htmlがあるので、 それをみるといいとおもわれる。
Javaをつかった場合とScalaをつかった場合を比較してみよう
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(); } }
Java用につくられたExcelのWorkbookクラスを、そのままでも使えますが、 SCALAの特徴を生かしたobjectをつくります、ファイル名をWorkbookScala?.scala とでもしましょうか。
import java.io.File import java.io.IOException import jxl.Workbook import jxl.read.biff.BiffException import scala.util.DynamicVariable 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) try { out.withValue(workbook){block} } finally { workbook.close(); } } //自動的に設定されるブロック変数のようなもの def $_()={ dynamicvariable.value } }
import WorkbookScala._ object Sample{ def main(args: Array[String]): Unit = { open(args(0)){ println($_.getSheet(0).getName()) } } }
scalac --classpath jarファイルのパス コンパイルしたい.scala
scala --classpath jarファイルのパス コンパイルしたい.scala
Excel版 Scale版 どちらも引数にEXCELのファイルを必要とする。 たとえば c:\xxx\yyy.xslならば"c:\\xxx\\yyy.xsl" を渡す
def 動的関数名(引数)(動的変数 => Unit){
}