ビルドパスの設定ぐらいは簡単にできる方
SCALAを実際につかってみて、どれだけ楽に記述できるようになったのか検証してみたいとおもいます。
http://sourceforge.net/projects/jexcelapi/files/
ダウンロードしてきたzip解凍 SCALAのをインストールディレクトリにlibディレクトリがあるとおもいますが
たとえば、scala.exeのある場所に起動用バッチを作成。ファイル名はscalaa.batとする。
今後jarファイルを取り込む数が増える可能性大でありながら、 Excelという業務で最も使われているであろうファイルにアクセスするjarファイルがデフォルトで入っていないのはけしからん、
とはいえ、毎回クラスパスを通すのは面倒である。というわけでバッチファイルから指定ディレクトリにあるjarファイルは有無をいわさずクラスパスに追加する
@echo off setlocal ENABLEDELAYEDEXPANSION set CP=. set BASE=C:\scala\lib for %%f in (%BASE%\*) do set CP=!CP!;%%f set BASE=C:\scala\lib\user for %%f in (%BASE%\*) do set CP=!CP!;%%f SET SCALA_DOC_HOME="C:\scala\doc" ECHO %CP% scala -classpath %CP% %1
ダウンロードしてきたファイルを解凍すると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 {
dynamicvariable.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" を渡す