主頁
博客
培訓學院
貴賓
應用
問題和答案
下載
社區
推薦頻道
活動
招募
專題
打開CSDN應用程序。
版權?CSDN.NET,1999-2020,版權所有
打開應用程序
大數據導出excel大小限制_java導出Excel大數據,自己總結經驗!引起
2020-12-19 01:58:16
微信_39655377
碼齡5年
密切註意
分析和導出實現代碼,XLSX支持:
/* * *生成XLSX,2007版excel,每張表沒有6.5W行的限制,但是到了壹定數量,內存可能會溢出。
*此方法適用於10W下的數據導出,本地測試後即可導出。列數約為8列。
*
*@paramfileOut
*輸出流
*@paramsheetMap
*要設置的數據信息
*@throwsSQLException*/
公共靜態void createxslxbyresultset(輸出流文件out,writexlsbean...beans)拋出sqlexception {try {//key Workbook。
workbook WB = newXSSFWorkbook();for (int i = 0,len = beans.length我& ltleni++) {
WriteXLSBean xls bean = beans[I];
sheet sheet = WB . create sheet(xls bean . get sheet name());
ResultSet RS = xls bean . getrs();
resultset metadata rsmd = RS . get metadata();
TypeHandlerRegistry tr = bean context . tr;
map th = xls bean . getth();int index = 0;while(RS . next()){ long t 1 = system . current time millis();
org . Apache . poi . ss . user model . row row = sheet
。createRow(index);for (int j = 0,numberOfColumns = rsmd . getcolumncount();j & lt列數;j++) {
string key = rsmd . get column label(j+1)。toLowerCase();if(th.containsKey(key)) {
TypeHandler & gttype = tr . gettype handler(JDBC type
。for code(rsmd . get columntype(j+1));
Object obj=type.getResult(rs,key);
row.createCell(j)。setCellValue(obj== null?" ":obj . tostring());
}
}
System.out.println(index+":"
+(system . current time millis()-t 1));
index++;
}
}//關鍵工作簿
WB . write(file out);
}catch(IOException e) {
e . printstacktrace();拋出新的serviceruntimeException("產生xls文檔出錯",e);
}最後{
}
}
上面標註了兩個關鍵點,即:
1.生成Excel對象
2.將對象寫入OutPutStream。
在構建的過程中,沒有地方寫OutPutSteam,也就是說整個Excel必須先在內存中構建,才能寫出。在數據量很大的情況下,所有數據都會加載到內存中,而不會輸出,導致最後內存溢出。
根據運行環境的不同,內存溢出的情況可能會有所不同。
根據情況,如果數據量達到10W以上,建議使用。
1,多個Excel,每個Excel壹個工作表,因為所有工作表都是工作簿的壹部分。如果不劃分多個Excel,那麽劃分工作表是沒有用的。
2.每個Excel中的列數適中。比如每個5W行的Excel文件,多次導出和分頁查詢的原理是壹樣的。
3.將多個Excel導出到壹個臨時目錄,通過程序壓縮,然後提供給客戶下載。
2003版本是通過數據庫結果存儲在列表中,然後產生:表是列表行和映射。
/* * *制作xls,2003版excel,每張表行限6.5W
*
*@paramfileOut
*輸出流,未關閉
*@paramsheetMap
*要導出的數據信息*/
public static void createXSLByMap(output stream file out,Map & gt& gtsheetMap) {try{
hssf workbook WB = newHSSFWorkbook();
set keys = sheet map . keyset();for(Iterator Iterator = keys . Iterator();叠代程序
。has next();) {
string sheet key = iterator . next();
sheet sheet = WB . create sheet(sheet key);
列表& gtsheet rows = sheet map . get(sheet key);for (int i = 0,len = sheet rows . size();我& ltleni++) {
map cell map = sheet rows . get(I);
set cell set = cell map . key set();
org . Apache . poi . ss . user model . row row = sheet . create row(I);int j = 0;for(Iterator ITER cell = cell set . Iterator();iterCell
。has next();j++) {
string cell key = ITER cell . next();
object obj = cell map . get(cell key);
row.createCell(j)。setCellValue(obj== null?" ":obj . tostring());
}
}
}
WB . write(file out);
}catch(IOException e) {
e . printstacktrace();拋出新的serviceruntimeException("產生xls文檔出錯",e);
}最後{
}
}
新版本的POI+office 2007 excel可以導出幾十萬個條目而不會出現內存溢出。參見:
將大量數據導出到excel中的xlsx文件。
靜態字符串src = " abcdeffslfelgtryjukjhgfdaterdjdsfghjkghfertuioabcdeffslfelgtryjukjhgfdaterdjdsfghjkdertjdsfghjghfertuioabcdefslelgtryjukjhgfdadertjdsfghjkghfertuio ";
公共靜態void main(String[] args)拋出可瀏覽{
sxssf workbook WB = new sxssf workbook(100);//這裏100是內存中的數字。如果大於這個數,就寫到硬盤,避免內存溢出內存。
sheet sh = WB . create sheet();
for(int rownum = 0;rownum & lt1000000;rownum++) {
row row = sh . create row(rownum);
for(int cell num = 0;cellnum & lt10;cellnum++) {
cell cell = row . create cell(cell num);
string address = newCellReference(cell)。formatAsString();
cell . setcellvalue(address+src . substring(rownum % 10 * 10+1,(rownum % 10+1)* 10));
}
}
File File = new File(" F:/aa . xlsx ");
file . create new file();
file output stream out = newfile output stream(file);
WB . write(out);
out . close();
}
內存使用:
根據以上前輩的經驗,考慮到自己的需求,我集成了壹個工具。解決了excle表中65535行的限制。xls格式。我是通過導出壹個多頁的表格實現的。
(我有65000頁)
下面是使用所有傳入實體的屬性值的反映。這僅適用於字符串和基本數據類型。如果有自己定義的類型,需要自己添加。
package com . tommy . fundation . util;import Java . lang . reflect . field;import Java . lang . reflect . invocationtargetexception;import Java . lang . reflect . method;import Java . util . ArrayList;import Java . util . date;import Java . util . list;public Class relectutil { public static List reflect entity(T model,Class & gtcals)throwsNoSuchMethodException、IllegalAccessException、IllegalArgumentException、InvocationTargetException、SecurityException、NoSuchFieldException{
list list = new ArrayList();
Field[] field= model.getClass()。getDeclaredFields();//獲取實體類的所有屬性,返回字段數組。
for(int j = 0;j
String nam = field[j]。getName();//獲取屬性的名稱
String name = nam
name= name.substring(0,1)。toupper case()+name . substring(1);
字符串類型=字段[j]。getGenericType()。toString();//獲取屬性的類型
If(type . equals(" class Java . lang . string "){//如果type是類類型,則前面是" class ",後面是類名。
方法m = model.getClass()。get method(" get "+name);
字符串值=(String)m . invoke(model);//調用getter方法獲取屬性值。
如果(值!= null){
list.add(值);
}否則{
list . add(" ");
}
} if(type . equals(" class Java . lang . integer "){
方法m= model.getClass()。get method(" get "+name);
整數值=(Integer)m . invoke(model);如果(值!= null){
list.add(值);
}否則{
list . add(" ");
}
} if(type . equals(" class Java . lang . short "){
方法m= model.getClass()。get method(" get "+name);
短值=(Short)m . invoke(model);如果(值!= null){
list.add(值);
}否則{
list . add(" ");
}
} if(type . equals(" class Java . lang . double "){
方法m= model.getClass()。get method(" get "+name);
Double value =(Double)m . invoke(model);如果(值!= null){
list.add(值);
}否則{
list . add(" ");
}
} if(type . equals(" class Java . lang . boolean "){
方法m= model.getClass()。get method(" get "+name);
布爾值=(布爾)m.invoke(模型);如果(值!= null){
list.add(值);
}否則{
list . add(" ");
}
} if(type . equals(" class Java . util . date "){
方法m= model.getClass()。get method(" get "+name);
日期值=(日期)m.invoke(模型);如果(值!= null){
list.add(值);
}否則{
list . add(" ");
}
}
} returnlist
}
}
下面將重點介紹導出excel表格。
package com . tommy . fundation . util;import Java . io . output stream;import Java . util . ArrayList;import Java . util . date;import Java . util . hashmap;import Java . util . iterator;import Java . util . list;import Java . util . map;import Java . util . set;importjavax.servlet..阿裏巴巴& lt/groupId & gt;& ltartifactId & gteasyexcel & lt/artifact id & gt;& lt版本& gt2 . 0 . 5 & lt;/version & gt;& lt/d...
繼續參觀
...以excel文件(xls格式)保存實驗結果(單張表格最多可有65536行)&;船方不負擔裝貨費用...
使用POI將MySQL數據庫數據導出為excel文件(xls格式)註意:單張表最多可以存儲65,536行!否則報告錯誤!原因:Java . lang . illegalargumentexception:無效的行號(65536)超出了允許的範圍(0..65535) !
利用Apache POI導出百萬EXCEL數據_橘子樂果博客
工作中需要每天早上00:05從數據庫中導出三個月以上的訂單流水信息,保存為excel文件。去做吧。1.介紹POM依賴關系
Linux下的讀寫文件操作
在Linux #下讀寫文件包括
繼續參觀
Java導出壹個大的Excel文件來防止內存溢出。
Java導出壹個超大的Excel文件,防止內存溢出。1.將Poi引入SXSSFWorkbook2.maven中的Poi。3.測試過程。4.單元測試Java代碼。5.結論將業務數據導出到Excel表時,導出的項目會溢出內存。本文使用Java操作POI的SXSFWorkbook類進行導出,解決了內存溢出問題。1.在Poi中使用SXSSFWorkbook導出excel時,數據量過大時總是容易出現內存溢出。可以使用POI提供的SXSSFWorkbook類來避免內存溢出。
繼續參觀
Apache Poi導出Excel多表頁面詳細信息!_ Ao馬蓬的博客
Apache poi是目前常用的導出excel的方式。最近想實現導出excel多表頁的表功能。我在網上查了壹下,大部分都是針對某個特定對象的導出,所以不能導出任何對象。現在我把自己開發的代碼貼出來供大家參考。//註意:這裏實現的關鍵是設置。...
Apache poi多表導出excel表格_朋友圈博客
Excel */public class Apache poi { public static void main(string[]args)throwsioexception {//todo自動生成的方法存根導出Excel();} @SuppressWarnings("resource ")公共靜態字符串exportExcel...
Java導出excel限制大小_解決java poi導出excel2003不能超過65536行的問題
/* * *達到50000條數據重新創建工作表的邏輯*/@ override public void export excel(list formlist,servlet output stream output stream){ try {//工作表名稱後的數字,如table 1,table 2 int I = 0;//記錄總行數。int rownum = 0;//記錄每張工作表的行數int tempnum = 0;//分頁欄...
繼續參觀
熱門推薦java poi導出Excel超大數據解決方案
。測試;導入Java . io . buffered writer;導入Java . io . file;導入java.io...
繼續參觀
Excel單元格數據超過32767的解決方案。
java興趣點32767
繼續參觀
SXSSFWorkbook Excel導出大量數據
請註意,SXSSFWorkbook用於導出大量數據。Sssfworkbook用於生成大量的excel數據文件。主要原理是借助臨時存儲空間生成excel。Sssfworkbook專門處理大數據。對於沒有內存溢出的大型excel的創建,Sssfworkbook是不二之選。它的原理很簡單:用硬盤空間換內存(就像hashmap用空間換時間壹樣)。SXSSFWorkbook是streami...
繼續參觀
EXCEL大數據導出解決方案
將網頁上顯示的報告導出到excel文件是壹個常見的要求。但當數據量較大時,excel本身支持多達65535行數據的問題就凸顯出來了。以下是將大量數據導出到excel的解決方案。首先,對於數據超過65535行的問題,很自然的想到將整個數據分塊,利用excel中多表頁的功能,將超過65535行的數據寫入下壹個表頁,也就是通過多表頁的方式,這就突破了。...
繼續參觀
幾行代碼,復雜的Excel導入導出,真的很強大!
點擊上方藍色字體,精選優質文章“明星微信官方賬號”,將盡快在項目中使用:功能介紹:IMPORT1,ExcelHandle核心處理器;2.ExcelWorkbookManageexcel管理所有工作表;3.初始化ExcelInitConfig配置文件;4.AbstractFileParser文件轉換類;阿蘭波進口有什麽優勢?1,用戶不需要引入poi。...
繼續參觀
java中poi導出到excel的總結
java中poi導出到excel的總結
繼續參觀
Java POI導出excel,列數限制在256。
有兩篇寫得很好的文章/p/4c6eec65fdc3。
繼續參觀
apache poi可以導出多少張表到excel?
大數據導出的Excel大小限制
寫評論
評論
收集
豎起大拇指
踩
分享