エクセルデータをHTMLに変換する方法を考えてみた。
http://higehige0.blog.fc2.com/blog-entry-57.html
を参考にさせていただきました。
int cct,int yiがセルの列位置、行位置
List<CellRangeAddress> rangeLstは、上記リンクを参照
Javaも関数型プログラミングが使えるようになってきたので、早速使ってみました。
String LTdt= rangeLst.stream().filter(x->x.getFirstRow()==yi&&x.getFirstColumn()==cct).map(x->cct+","+yi+","+x.getLastColumn()+","+x.getLastRow()).findAny().orElse("");
String LTdt2= rangeLst.stream().filter(
x->x.getFirstRow()<yi && x.getLastRow()>=yi && x.getFirstColumn()<cct && x.getLastColumn()>=cct
|| x.getFirstRow()==yi && x.getFirstColumn()<cct && x.getLastColumn()>=cct
|| x.getFirstRow()<yi && x.getLastRow()>=yi && x.getFirstColumn()==cct
).map(x->"DEL").findAny().orElse("");
LTdt、LTdt2の文字があるかどうかで、3パターンに分類して処理するとOkでした。
分類部分は省略しますが、表示部分は以下のような感じです。
・cst="<td >"+cellValue+"</td>";
・String CrSt[]=LTdt.split(",");
String tdst="";
if(!CrSt[0].equals(CrSt[2])) {
tdst=" colspan=\""+ ( Integer.parseInt(CrSt[2])-Integer.parseInt(CrSt[0]) +1 )+"\"";
}
if(!CrSt[1].equals(CrSt[3])) {
tdst=tdst+" rowspan=\""+ ( Integer.parseInt(CrSt[3])-Integer.parseInt(CrSt[1]) +1 )+"\"";
}
cst="<td "+width+" align=left "+tdst+">"+cellValue+"</td>";
・cst="";