在excel裡用ctrl+向下方向鍵可以到達最後一行。
可以看到:
1、對2003版,最大行數是65536行
2、對2007以上版本,最大行數是1048576行
hssfrow row = sheet.createrow((short) 0);目的是要將excel中的文字全部顯示出來,可以設定對齊格式為【縮小字型填充】,但是這樣的話只能展示出一行資料,字型會變得很小。還有一種辦法,設定對齊格式為【自動換行】,然後讓單元格中的字型自動調整大小。hssfcellstyle style =workbook.createcellstyle();
style.setalignment(hssfcellstyle.align_center);
hssffont font =workbook.createfont();
style.setverticalalignment(hssfcellstyle.vertical_center);
style.setalignment(hssfcellstyle.align_center);
font.setfontname("宋體");
font.setfontheightinpoints((
short) 14);//
設定字型大小
我的實現思路是,設定單元格中的字型大小,最大10號字,最小5號字,判斷優先使用大的字型;如果最小的5號字也放不下,那就只能調整模板了。關鍵點就是判斷當前字型大小能否將內容完全展示在單元格中。
需要提前說明一點,我的這個方法是不精確的演算法,excel設定字型的時候太強大了,不同的字型的字間距、行間距都會不同。
判斷字型大小是否合理的思路:
1、計算出單元格的總寬度、總高度
2、計算出其中的內容的總長度,不同的字型大小,長度是不同的
3、內容總長度除以單元格寬度,得出實際上一共有多少行資料 x
4、單元格的總高度除以內字型的高度,得出能展示出來的資料有多少行 y
5、如果 y>=x ,那麼表示所有的資料都能展示出來
這個判斷單元格中的字型大小是否合理的思路也不難,難的是如何獲取到需要的引數。
1、設定單元格字型大小的方法是:font.setfontheightinpoints(k),但是獲取字型寬度和高度的方法並不精確,因為字型間會有字間距,換行以後行之間也有間距,所以這個演算法並不精確。
這個例子中,我的獲取字型高度的方法是直接取 k,獲取字型寬度的方法是 k*2
2、在上訴關鍵點的第5步中,本來我的想法是 y向下取整, x向上取整,然後再進行比較。但是測試後發現,設定的字型都會偏小。 直接取y>=x,結果反而更合理些。
3、進行相除運算,單位必須相同。poi中point(座標點)和pixel(畫素點)的大小關係,我在之前的文章有介紹過,引用結論,獲取行高的畫素值的方法就是: (row.getheightinpoints() / 72) * 96
樣例中的單元格是合併單元格,起始座標 (3,5),結束座標 (3,8)
public static void main(string args) catch (ioexception e)其中,獲取單元格總寬度的方法gettotalwidth(cell cell),有更簡單的方法,在《我的poi**庫》裡介紹}/**
* 設定單元格字型大小
*/private static void setfontsize(workbook book, cell cell)
}//解決單元格樣式覆蓋的問題
cellstyle cstyle = book.createcellstyle();
cstyle.clonestylefrom(cell.getcellstyle());
cstyle.setwraptext(true);
cstyle.setfont(font);
cell.setcellstyle(cstyle);
}/**
* 校驗單元格中的字型大小是否合理
*/private static boolean checkcellreasonable(cell cell, short fontsize)
/** * 獲取單元格的總寬度(單位:畫素)
*/private static double gettotalwidth(cell cell)
return totalwidthinpixels;
}/**
* 獲取單元格的列數,如果是合併單元格,就獲取總的列數
*/private static int getcolnum(sheet sheet, int row, int column)
}return 1;
}
使用poi匯出excel根據指定列自動合併行
一 效果圖 二 js function assemble dg columns arr.push arr.push arr.push arr.push arr.push arr.push arr.push arr.push arr.push arr.push arr.push arr.push re...
POI生成EXCEL,公式不自動執行的問題
當使用poi操作excel時,發現由poi生成的公式能夠在開啟excel是被執行,而事先手工寫入excel模板檔案的公式則不自動被呼叫,必須手動雙擊該cell才能生效。採取的辦法 1.使用cell.setcellformula方法重新在制定cell裡寫入公式。2.使用sheet.setforcefo...
使用POI讀取Excel時如何把數字轉換成字串
因為excel本身有格式型別,當它以數字格式存的時候我們在使用poi讀取的時候就需要呼叫與格式型別相匹配的方法 xssfworkbook wb new xssfworkbook fis xssfsheet sheet wb.getsheetat 0 int rows sheet.getphysica...