當前位置:吉日网官网 - 紀念幣收藏 - Java將數據導出到excel來計算其文件大小。

Java將數據導出到excel來計算其文件大小。

熱門頻道

主頁

博客

培訓學院

貴賓

應用

問題和答案

下載

社區

推薦頻道

活動

招募

專題

打開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大小限制

寫評論

評論

收集

豎起大拇指

分享

  • 上一篇:什麽是FIP世界郵票展覽會?關於世界郵展的那些事情是什麽?
  • 下一篇:尋找身邊的年味寫400字。
  • copyright 2024吉日网官网