在excel處理的過程中,可能有需要用到行高自適應的時候。
下面貼出用poi實現excel行高自適應的**。
該**可以處理一行excel按內容自適應高度。可以處理合併單元格。
上**:
/*** 根據行內容重新計算行高
* @param row
*/public static void calcandsetrowheigt(hssfrow sourcerow)
//單元格的寬高及單元格資訊
mapcellinfomap = getcellinfo(sourcecell);
integer cellwidth = (integer)cellinfomap.get("width");
integer cellheight = (integer)cellinfomap.get("height");
if(cellheight > maxheight)
system.out.println("單元格的寬度 : " + cellwidth + " 單元格的高度 : " + maxheight + ", 單元格的內容 : " + cellcontent);
hssfcellstyle cellstyle = sourcecell.getcellstyle();
hssffont font = cellstyle.getfont(sourcerow.getsheet().getworkbook());
//字型的高度
short fontheight = font.getfontheight();
//cell內容字串總寬度
double cellcontentwidth = cellcontent.getbytes().length * 2 * 256;
//字串需要的行數 不做四捨五入之類的操作
double stringneedsrows =(double)cellcontentwidth / cellwidth;
//小於一行補足一行
if(stringneedsrows < 1.0)
//需要的高度 (math.floor(stringneedsrows) - 1) * 40 為兩行之間空白高度
double stringneedsheight = (double)fontheight * stringneedsrows;
//需要重設行高
if(stringneedsheight > maxheight)
//最後取天花板防止高度不夠
maxheight = math.ceil(maxheight);
//重新設定行高 同時處理多行合併單元格的情況
boolean ispartofrowsregion = (boolean)cellinfomap.get("ispartofrowsregion");
if(ispartofrowsregion)
}else
}system.out.println("字型高度 : " + fontheight + ", 字串寬度 : " + cellcontentwidth + ", 字串需要的行數 : " + stringneedsrows + ", 需要的高度 : " + stringneedsheight + ", 現在的行高 : " + maxheight);
system.out.println();}}
/*** 解析乙個單元格得到資料
* @param cell
* @return
*/private static string getcellcontentasstring(hssfcell cell)
string result = "";
switch (cell.getcelltype())
}result = s;
break;
case cell.cell_type_string:
result = toolkits.nulltoempty(string.valueof(cell.getstringcellvalue())).trim();
break;
case cell.cell_type_blank:
break;
case cell.cell_type_boolean:
result = string.valueof(cell.getbooleancellvalue());
break;
case cell.cell_type_error:
break;
default:
break;
}return result;
}/**
* 獲取單元格及合併單元格的寬度
* @param cell
* @return
*/private static mapgetcellinfo(hssfcell cell) }}
mapmap = new hashmap();
integer width = 0;
integer height = 0;
boolean ispartofrowsregion = false;
if(ispartofregion)
for (int i = firstrow; i <= lastrow; i++)
if(lastrow > firstrow)
}else
map.put("ispartofrowsregion", ispartofrowsregion);
map.put("firstrow", firstrow);
map.put("lastrow", lastrow);
map.put("width", width);
map.put("height", height);
return map;
}
DataGridView設定行高
net中datagridview控制項如何設定行高 在datagridview控制項中,預設的行高很大,而標題頭的行高卻很小,感覺很不勻稱。標題頭的行高比較好設定 需要修改兩個屬性 1修改columnheadersheader 設定為你想要的高度,比如20 但這時候自動變回來。2修改columnhe...
改變QTableWidget 行高
方法一 int wide m pfieldtable columnwidth 0 int nrow m pfieldtable rowcount for int i 0 i 必須得setcolumnwidth和setrowheight一起使用才能改變行高,這兩個函式在qtableview中。方法二 ...
poi設定行高
這裡記錄下使用poi設定行高的方法。excel中的行高單位 px是相對長度,表示pixel 畫素 是螢幕上顯示資料的最基本的點。pt是絕對長度,表示point 磅 是印刷行業常用單位,等於1 72英吋。dpi 或ppi 表示解析度,即pixel dot per inch,每英吋的畫素 點 數。poi...