2009年9月24日木曜日

groovy の eachWithIndex

前々回のエントリについて、上司からダメ出しをもらう。

「kanemu の poi のコード、なんで for 使ってんの?each 使えばいいじゃん」
自分しばし考え
「 i と j が使いたかったんですよ」
「index が欲しかったってこと?じゃあ eachWithIndex は?」
「???」
groovy-jdk を確認すると、eachほにゃららってメソッドがあるわあるわ…。
ためしにgroovyconsoleで
def myVal=[
["あああ","いいい","ううう"],
["かかか","ききき","くくく"],
["さささ","ししし","すすす"]
]

myVal.eachWithIndex{v,i->
println "${i} => ${v}";
v.eachWithIndex{vv,ii->
println "------ ${ii} => ${vv}";
}
}
0 => [あああ, いいい, ううう]
------ 0 => あああ
------ 1 => いいい
------ 2 => ううう
1 => [かかか, ききき, くくく]
------ 0 => かかか
------ 1 => ききき
------ 2 => くくく
2 => [さささ, ししし, すすす]
------ 0 => さささ
------ 1 => ししし
------ 2 => すすす
ははあ、なるほど。
ということは先日のコードは、
import org.apache.poi.hssf.usermodel.*;

def myVal=[
["あああ","いいい","ううう"],
["かかか","ききき","くくく"],
["さささ","ししし","すすす"]
]

//新規ワークブック作成
HSSFWorkbook myWb = new HSSFWorkbook();
//新規シート作成
HSSFSheet mySheet = myWb.createSheet();

myVal.eachWithIndex{v,i ->
//新規行作成
HSSFRow myRow = mySheet.createRow(i);
v.eachWithIndex{vv,ii ->
//新規セル作成
HSSFCell myCel = myRow.createCell((short)ii);
myCel.setEncoding(HSSFCell.ENCODING_UTF_16);
myCel.setCellValue(vv);
}
}
//作成したワークブックを保存する
new File("Test.xls").withOutputStream{myWb.write(it)}
ですね。

0 件のコメント: