Java POI Excel 行高自適應

2021-09-01 23:03:00 字數 2927 閱讀 6692

在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...