導航:首頁 > 網路數據 > javaexcel讀取大數據

javaexcel讀取大數據

發布時間:2024-04-04 04:01:39

java數據導出excel或其他文件格式,數據量大怎麼優化

可以嘗試用FineReport報表軟體,純Java編寫,它可以無縫導入導出excel,報表伺服器比較牛,對大數據量的資料庫也能應付。

Ⅱ java excel poi 大數據量50W 內存溢出

Workbook workbook = new SXSSFWorkbook(1000);
poi有個機制 每次往內存中寫1000條數據,這個1000你可以改的 盡量別大於10000條數據,寫完1000條數據後再內重新寫,這樣就不會內存溢容出了。

Ⅲ 用java從excel中讀取大量數據,驗證後顯示在頁面上,再把數據插入的資料庫中。

瀏覽器上用分頁顯示看看。IE是很占內存的,特別是運行時間長了之後性能會越來越差(新裝的IE性能還是差不多的,用時間長了遠不如firefox),所以我們大部分web開發都用firefox測試。

Ⅳ JAVA如何實現導出大數量EXCEL報表 數據大概100W條

好像是你的excel文件問題,你另外新建一個,再寫點東西在裡面試下隨便給你一個我以前用過的importjava.io.*;importjava.text.SimpleDateFormat;importjava.util.*;importjava.sql.*;importjava.util.Date;importjava.util.HashMap;importjava.util.Map;importjxl.*;publicclassSimUpdate{privateStringfileName;publicSimUpdate(StringfileName){this.fileName=fileName;}staticMaptNames;static{tNames=newHashMap();}//下面是主要代碼privatevoipdateDb(){try{Connectionconn=DbPool.connectDB();if(conn!=null){Statementstmt=conn.createStatement();/**********************************************/jxl.Workbookrwb=null;try{//構建Workbook對象只讀Workbook對象//直接從本地文件創建Workbook//從輸入流創建WorkbookInputStreamis=newFileInputStream(fileName);rwb=Workbook.getWorkbook(is);//Sheet(術語:工作表)就是Excel表格左下角的Sheet ,Sheet ,Sheet 但在程序中//Sheet的下標是從 開始的//獲取第一張Sheet表Sheetrs=rwb.getSheet( );//獲取Sheet表中所包含的總列數intrsColumns=rs.getColumns();//獲取Sheet表中所包含的總行數intrsRows=rs.getRows();//獲取指這下單元格的對象引用StringsimNumber="",termSeqId="";//指定SIM卡號及序列號for(inti= ;i ){System.out.println("成功插入第"+i+"條數據");}}}//以下代碼為寫入新的EXCEL,這里不使用,所以注釋/*//利用已經創建的Excel工作薄創建新的可寫入的Excel工作薄jxl.write.WritableWorkbookwwb=Workbook.createWorkbook(newFile("D://Book .xls"),rwb);//讀取第一張工作表jxl.write.WritableSheetws=wwb.getSheet( );//獲取第一個單元格對象jxl.write.WritableCellwc=ws.getWritableCell( , );//決斷單元格的類型,做出相應的轉化if(wc.getType()==CellType.LABEL){Labell=(Label)wc;l.setString("Thevaluehasbeenmodified.");}//寫入Excel對象wwb.write();wwb.close();*/}catch(Exceptione){e.printStackTrace();}finally{//操作完成時,關閉對象,翻譯佔用的內存空間rwb.close();}/*********************************************/}}catch(Exceptione){e.printStackTrace();}}}

Ⅳ Excel如何抓取網頁數據之JSON數據抓取

打開Chrome,在拉勾網搜索深圳市的「數據分析」職位,使用檢查功能查看網頁源代碼,發現拉勾網有反爬蟲機制,職位信息並不在源代碼里,而是保存在JSON的文件里,因此我們直接下載JSON,並使用字典方法直接讀取數據。

抓取網頁時,需要加上頭部信息,才能獲取所需的數據。
在搜索結果的第一頁,我們可以從JSON里讀取總職位數,按照每頁15個職位,獲得要爬取的頁數。再使用循環按頁爬取,將職位信息匯總,輸出為CSV格式。
程序運行如圖:

抓取結果如圖:

數據清洗占數據分析工作量的大頭。在拉勾網搜索深圳市的「數據分析」職位,結果得到369個職位。查看職位名稱時,發現有4個實習崗位。由於我們研究的是全職崗位,所以先將實習崗位剔除。由於工作經驗和工資都是字元串形式的區間,我們先用正則表達式提取數值,輸出列表形式。工作經驗取均值,工資取區間的四分位數值,比較接近現實。
4. 詞雲
我們將職位福利這一列的數據匯總,生成一個字元串,按照詞頻生成詞雲實現python可視化。以下是原圖和詞雲的對比圖,可見五險一金在職位福利里出現的頻率最高,平台、福利、發展空間、彈性工作次之。

5. 描述統計

可知,數據分析師的均值在14.6K,中位數在12.5K,算是較有前途的職業。數據分析散布在各個行業,但在高級層面上涉及到數據挖掘和機器學習,在IT業有長足的發展。
我們再來看工資的分布,這對於求職來講是重要的參考:

工資在10-15K的職位最多,在15-20K的職位其次。個人愚見,10-15K的職位以建模為主,20K以上的職位以數據挖掘、大數據架構為主。
我們再來看職位在各區的分布:

數據分析職位有62.9%在南山區,有25.8%在福田區,剩下少數分布在龍崗區、羅湖區、寶安區、龍華新區。我們以小窺大,可知南山區和福田區是深圳市科技業的中心。
我們希望獲得工資與工作經驗、學歷的關系,由於學歷分三類,需設置3個虛擬變數:大專、本科、碩士。多元回歸結果如下:

在0.05的顯著性水平下,F值為82.53,說明回歸關系是顯著的。t檢驗和對應的P值都小於0.05表明,工作經驗和3種學歷在統計上都是顯著的。另外,R-squared的值為0.41,說明工作經驗和學歷僅僅解釋了工資變異性的41%。這點不難理解,即使職位都叫數據分析師,實際的工作內容差異比較大,有的只是用Excel做基本分析,有的用Python、R做數據挖掘。另外,各個公司的規模和它願意開出的工資也不盡相同。而工作內容的差異和公司的大方程度是很難單憑招聘網頁上的宣傳而獲得實際數據,導致了模型的擬合優度不是很好這一現實。

Ⅵ 求Java poi 大數據量導出(五萬行數據) 例子

我給你個辦法,是要導出excel嗎?別使用poi,使用xml來描述excel即可,就像流文件一樣,多少都不會流出,給你個思路,你自己擴展,希望你能看明白。

/**
* @author J.W
* 2011-06-08
*/
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
try {
DataOutputStream rafs = new DataOutputStream(
new BufferedOutputStream(new FileOutputStream(new File(
"d://test.xml"))));
sb.append("<?xml version=\"1.0\"?>");
sb.append("\n");
sb.append("<?mso-application progid=\"Excel.Sheet\"?>");
sb.append("\n");
sb.append("<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"");
sb.append("\n");
sb.append(" xmlns:o=\"urn:schemas-microsoft-com:office:office\"");
sb.append("\n");
sb.append(" xmlns:x=\"urn:schemas-microsoft-com:office:excel\"");
sb.append("\n");
sb.append(" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"");
sb.append("\n");
sb.append(" xmlns:html=\"http://www.w3.org/TR/REC-html40\">");
sb.append("\n");
sb.append(" <Styles>\n");
sb.append(" <Style ss:ID=\"Default\" ss:Name=\"Normal\">\n");
sb.append(" <Alignment ss:Vertical=\"Center\"/>\n");
sb.append(" <Borders/>\n");
sb.append(" <Font ss:FontName=\"宋體\" x:CharSet=\"134\" ss:Size=\"12\"/>\n");
sb.append(" <Interior/>\n");
sb.append(" <NumberFormat/>\n");
sb.append(" <Protection/>\n");
sb.append(" </Style>\n");
sb.append(" </Styles>\n");
int sheetcount = 0;
int recordcount = 20;
int currentRecord = 0;
int total = 100;
int col = 20;
sb.append("<Worksheet ss:Name=\"Sheet0\">");
sb.append("\n");
sb.append("<Table ss:ExpandedColumnCount=\"" + col
+ "\" ss:ExpandedRowCount=\"" + total
+ "\" x:FullColumns=\"1\" x:FullRows=\"1\">");
sb.append("\n");
for (int i = 0; i < total; i++) {
if ((currentRecord == recordcount
|| currentRecord > recordcount || currentRecord == 0)
&& i != 0) {// 一個sheet寫滿
currentRecord = 0;
rafs.write(sb.toString().getBytes());
sb.setLength(0);
sb.append("</Table>");
sb.append("<WorksheetOptions xmlns=\"urn:schemas-microsoft-com:office:excel\">");
sb.append("\n");
sb.append("<ProtectObjects>False</ProtectObjects>");
sb.append("\n");
sb.append("<ProtectScenarios>False</ProtectScenarios>");
sb.append("\n");
sb.append("</WorksheetOptions>");
sb.append("\n");
sb.append("</Worksheet>");
sb.append("<Worksheet ss:Name=\"Sheet" + i / recordcount
+ "\">");
sb.append("\n");
sb.append("<Table ss:ExpandedColumnCount=\"" + col
+ "\" ss:ExpandedRowCount=\"" + recordcount
+ "\" x:FullColumns=\"1\" x:FullRows=\"1\">");
sb.append("\n");
}
sb.append("<Row>");
for (int j = 0; j < col; j++) {
System.out.println(i);
sb.append("<Cell><Data ss:Type=\"String\">10000000000000000123</Data></Cell>");
sb.append("\n");
}
sb.append("</Row>");
if (i % 5000 == 0) {
rafs.write(sb.toString().getBytes());
rafs.flush();
sb.setLength(0);
}
sb.append("\n");
currentRecord++;
}
rafs.write(sb.toString().getBytes());
sb.setLength(0);
sb.append("</Table>");
sb.append("<WorksheetOptions xmlns=\"urn:schemas-microsoft-com:office:excel\">");
sb.append("\n");
sb.append("<ProtectObjects>False</ProtectObjects>");
sb.append("\n");
sb.append("<ProtectScenarios>False</ProtectScenarios>");
sb.append("\n");
sb.append("</WorksheetOptions>");
sb.append("\n");
sb.append("</Worksheet>");
sb.append("</Workbook>");
sb.append("\n");
rafs.write(sb.toString().getBytes());
rafs.flush();
rafs.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

可以直接執行,只是給你個思路。

Ⅶ 學會如何用Java操作Excel文件,有一個文本文件,可以將裡面內容讀

import java.io.*;
import java.util.ArrayList;
import jxl.*;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

public class NewT {
public static int v=0;
public void painting(String test1,String test2) throws Exception {
Workbook rwb = Workbook.getWorkbook(new File(test1));
Sheet sheet = rwb.getSheet("Sheet1");// 由指定sheet名獲得工作簿表單對象
OutputStream os = new FileOutputStream(test2);//輸出的Excel文件URL
WritableWorkbook wwb = Workbook.createWorkbook(os);//創建可寫工作薄
WritableSheet ws = wwb.createSheet("sheet1", 1);//創建可寫工作表
int rowss = sheet.getRows();
int columns = sheet.getColumns();
ArrayList list =new ArrayList();
int j;
int h;

//DAO =new DAO();
for (j = 0; j < rowss; j++) {

for (h = 0; h < columns; h++) {

Cell cellg = sheet.getCell(0, j);
String g = cellg.getContents();
Cell cellh = sheet.getCell(h, 0);
String s = cellh.getContents();
if (s.equals("end")&&g.endsWith("end")) {
for (int k = 4; k < h; k++) {
for (int x = 1; x < j; x++) {

//System.out.println("");
Cell cells1 = sheet.getCell(0, x);//物料長代碼
Cell cells2 = sheet.getCell(1, x);//項目型號
Cell cells3 = sheet.getCell(2, x);//描述
Cell cells4 = sheet.getCell(3, x); //總數
Cell cells5 = sheet.getCell(k, 0);//地址
Cell cells6 = sheet.getCell(k,x);//局點數

String cell1 = cells1.getContents();
String cell2 = cells2.getContents();
String cell3 = cells3.getContents();
String cell4 = cells4.getContents();
String cell5 = cells5.getContents();
String cell6 = cells6.getContents();
if(cell6.equals("0")){
System.out.print("");
}
else{

v++;
//System.out.print("行"+x+" 列"+k+" " );
//System.out.print(cell1+" ");
//System.out.print(cell2+" ");
// System.out.print(cell3+" ");
//System.out.print(cell4+" ");
// System.out.print(cell5+" ");
// System.out.print(cell6+" ");
Label a=new Label(0,v,cell1);
// System.out.print(cell1);
Label b=new Label(1,v,cell5);
// System.out.print(cell5);
Label c=new Label(2,v,cell6);
Label d=new Label(3,v,cell2);
Label e=new Label(4,v,cell3);
Label f=new Label(5,v,cell4);
// System.out.print(v+" ");
// System.out.println(cell6);
ws.addCell(a);
ws.addCell(b);
ws.addCell(c);
ws.addCell(d);
ws.addCell(e);
ws.addCell(f);

}

}
}
//list.add(si);
wwb.write();
wwb.close();
os.close();
//System.out.print("h:" + h);
//System.out.println("j:" + j);
}
}
}
}

public static void main(String args[]) throws Exception {

NewT t = new NewT();
//t.painting();

}
}
加分哦!不過這個要用到jxl去網站下載就好

Ⅷ java怎麼在數據超過百萬後分頁導出

用過POI的人都知道,在POI以前的版本中並不支持大數據量的處理,如果數據量過多還會常報OOM錯誤,
這時候調整JVM的配置參數
也不是一個好對策(註:
jdk在32位系統中支持的內存不能超過2個G,而在64位中沒有限制,但是在64位的系統中,性能並不是太好
),好在POI3.8版本新出來了一個SXSSFWorkbook對象,它就是用來解決大數據量以及超大數據量的導入導出操作的,但是SXSSFWorkbook只支持.xlsx格式,不支持.xls格式的Excel文件。
這里普及一下,在POI中使用HSSF對象時,excel 2003最多隻允許存6553數據,一般用來處理較少的數據量,這時對於百萬級別數據,Excel肯定
容納不了,而且在計算機性能稍低的機器上測試,就很容易導致堆溢出。當我升級到XSSF對象時,它可以直接支持excel2007以上版本,因為它採用
ooxml格式。這時excel可以支持1048576條數據,單個sheet表就支持近104
萬條數據了,雖然這時導出100萬數據能滿足要求,但使用XSSF測試後發現偶爾還是會發生堆溢出,所以也不適合百萬數據的導出。現在我們知道excel2007及以上版本可以輕松實現存儲百萬級別的數據,但是系統中的大量數據是如何能夠快速准確的導入到excel中這好像是個難題,對於一般的web系統,我們為了解決成本,基本都是使用的入門級web伺服器tomcat,既然我們不推薦調整JVM的大小,那我們就要針對我們的代碼來解決我們要解決的問題。在POI3.8之後新增加了一個類,
SXSSFWorkbook
,採用當數據加工時不是類似前面版本的對象,它可以控制excel數據佔用的內存,他通過控制在內存中的行數來實現資源管理,即當創建對象超過了設定的行數,它會自動刷新內存,將數據寫入文件,
這樣導致列印時,佔用的CPU,和內存很少。但有人會說了,我用過這個類啊,他好像並不能完全解決,當數據量超過一定量後還是會內存溢出的,而且時間還很長。對你只是用了這個類,但是你並沒有針對你的需求進行相應的設計,僅僅是用了,所以接下來我要說的問題就是,如何通過SXSSFWorkbook以及相應的寫入設計來實現百萬級別的數據快速寫入。
我先舉個例子,以前我們[資料庫
中存在大量的數據,我們要查詢,怎麼辦?我們在沒有經過設計的時候是這樣來處理的,先寫一個集合,然後執行jdbc,將返回的結果賦值給list,然後再返回到頁面上,但是當數據量大的時候,就會出現數據無法返回,內存溢出的情況,於是我們在有限的時間和空間下,通過分頁將數據一頁一頁的顯示出來,這樣可以避免了[大數據
量數據對內存的佔用,也提高了用戶的體驗,在我們要導出的百萬數據也是一個道理,內存突發性佔用,我們可以限制導出數據所佔用的內存,
這里我先建立一個list容器,list中開辟10000行的存儲空間,每次存儲10000行,用完了將內容清空,然後重復利用
,這樣就可以有效控制內存,所以我們的設計思路就基本形成了,所以分頁數據導出共有以下3個步驟:
1、求資料庫中待導出數據的行數
2、根據行數求數據提取次數
3、按次數將數據寫入文件

Ⅸ java poi Excel大數據量導入怎麼提高速度

記得有個屬性,

POI3.8的SXSSF包是XSSF的一個擴展版本,支持流處理,在生成大數據量的電子表內格且堆空間有容限時使用。SXSSF通過限制內存中可訪問的記錄行數來實現其低內存利用,當達到限定值時,新一行數據的加入會引起老一行的數據刷新到硬碟。
比如內存中限制行數為100,當行號到達101時,行號為0的記錄刷新到硬碟並從內存中刪除,當行號到達102時,行號為1的記錄刷新到硬碟,並從內存中刪除,以此類推。
rowAccessWindowSize代表指定的內存中緩存記錄數,默認為100,此值可以通過
new SXSSFWorkbook(int rowAccessWindowSize)或SXSSFSheet.setRandomAccessWindowSize(int windowSize)來設置。

閱讀全文

與javaexcel讀取大數據相關的資料

熱點內容
ps入門必備文件 瀏覽:348
以前的相親網站怎麼沒有了 瀏覽:15
蘋果6耳機聽歌有滋滋聲 瀏覽:768
怎麼徹底刪除linux文件 瀏覽:379
編程中字體的顏色是什麼意思 瀏覽:534
網站關鍵詞多少個字元 瀏覽:917
匯川am系列用什麼編程 瀏覽:41
筆記本win10我的電腦在哪裡打開攝像頭 瀏覽:827
醫院單位基本工資去哪個app查詢 瀏覽:18
css源碼應該用什麼文件 瀏覽:915
編程ts是什麼意思呢 瀏覽:509
c盤cad佔用空間的文件 瀏覽:89
不銹鋼大小頭模具如何編程 瀏覽:972
什麼格式的配置文件比較主流 瀏覽:984
增加目錄word 瀏覽:5
提取不相鄰兩列數據如何做圖表 瀏覽:45
r9s支持的網路制式 瀏覽:633
什麼是提交事務的編程 瀏覽:237
win10打字卡住 瀏覽:774
linux普通用戶關機 瀏覽:114

友情鏈接