导航:首页 > 网络数据 > 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读取大数据相关的资料

热点内容
app官方下载在哪里 浏览:511
iphone5s改名字 浏览:772
win10文件夹打开一直闪跳 浏览:208
win10摄像头不能拍照 浏览:56
云阳数控编程培训哪里学 浏览:519
文件的存放路径怎么改 浏览:583
cad字体文件如何导出 浏览:236
cs16需要cdkey哪个文件里 浏览:817
如何让另一个表格的数据关联 浏览:368
来自app的快捷指令是怎么有的 浏览:844
保留文件的原始文字图片 浏览:385
国外网站的店怎么看呢 浏览:56
ps入门必备文件 浏览:348
以前的相亲网站怎么没有了 浏览:15
苹果6耳机听歌有滋滋声 浏览:768
怎么彻底删除linux文件 浏览:379
编程中字体的颜色是什么意思 浏览:534
网站关键词多少个字符 浏览:917
汇川am系列用什么编程 浏览:41
笔记本win10我的电脑在哪里打开摄像头 浏览:827

友情链接