Ⅰ java poi 提取txt文件内容添加到excel
帮你在网上找了以下几个文章,可以解决你的问题,请参考。姿竖
Java POI Excel( pio:纯java操作源扰excel的api )
http://www.cnblogs.com/zqmingok/archive/2010/04/16/1713480.html
java的poi技术读取和导入Excel
http://www.cnblogs.com/hongten/archive/2012/02/22/java2poi.html
java poi 如何获取获得excel的总的行数和列数?
http://..com/question/220424660.html
利用Java+POI 读写Excel文档&向Excel中插入图片迹裂大
http://www.blogjava.net/renyangok/articles/63889.html
-------------------------------------------------------------------------------------------------
如果满意,请采纳。
Ⅱ java我在用poi导入文件夹下的Excel时,导入了几百条后,后台就报Stream closed,这是为什么
1.把你的内存弄大点。
2.升级到POI3.8(新版本对解析效率有改进)。
3.导入,到处最好统一到POI来。
4.一定要找到内存溢出的原因!!!
5.先把你的测渗尺碰试数据弄少一点,或者看看你困销的丛谈Office版本。。。
Ⅲ java,用POI实现将excel导入到数据库
用到的类 是 :
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
try {
// List<String[]> 中的元素 行数组String[]为excel中的每一行
List<String[]> list = new ArrayList<String[]>();
InputStream is = new FileInputStream("test.xls");
HSSFWorkbook hwk = new HSSFWorkbook(is);// 将is流实例到 一个excel流里
HSSFSheet sh = hwk.getSheetAt(0);// 得到book第一个工作薄sheet
int rows = sh.getLastRowNum()+1 - sh.getFirstRowNum(); // 总行数
for(int i=0; i<rows; i++){
HSSFRow row = sh.getRow(i);
int cols = row.getLastCellNum()+1 - row.getFirstCellNum(); // 该行的总列数
String[] str = new String[cols]; // 用来存放该行每一列的值
for (int j = 0; j < cols; j++) {
Object col = row.getCell((short)j);
str[j] = col.toString();
}
}
......
......
循环变量 i 和 j 可以自己设定从第几行开始读,第旦滚几列开始读,下标从0开始。
然后扮桥你想做什么判断想做模缺余什么数据匹配都可以自己加了。
poi.hssf.usermodel.* jar包要是网上找不到,就给我发邮件,我邮给你:[email protected]
Ⅳ 如何使用POI对Excel表进行导入和导出
导入POI的jar包
新建一个项目,在根目录在新建一个lib文件夹,将答没jar包复制粘贴到lib文件夹后,右键将其添加到项目的build path中,最后的结果如图所示:
2
编写java类,新建一个实体类,比如我们要导出数据库的有关电脑的信息,那么就建一个Computer实体类,代码如下:
package com.qiang.poi;
public class Computer {
private int id;
private String name;
private String description;
private double price;
private double credit;
public int getId() {
return id;
}
public Computer(int id, String name, String description, double price,
double credit) {
super();
this.id = id;
this.name = name;
this.description = description;
this.price = price;
this.credit = credit;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public double getCredit() {
return credit;
}
public void setCredit(double credit) {
this.credit = credit;
}
}
3
新建一个写入excel的方法,如write2excel,参数可以后面边写边决定(站在一个不熟悉POI的角度)
public static void write2Excel(){}
4
创建操作Excel的HSSFWorkbook对象
HSSFWorkbook excel= new HSSFWorkbook();
创建HSSFSheet对象
Excel中的一个sheet(工作表)对应着java中的一个HSSFSheet对象,利用HSSFWorkbook对象可以创建一个HSSFSheet对象
如:创建一个sheet名为computer的excel
HSSFSheet sheet = excel.createSheet("computer");
创建第一行标题信息的HSSFRow对象
我们都知道excel是表格,即由一行一行组成的,那么这一行在java类中就是一个HSSFRow对象,我们通过HSSFSheet对象就可以创建HSSFRow对象
如:创建表格中的第一行(我们常用来做标题的行) HSSFRow firstRow = sheet.createRow(0); 注意下标从0开始
创建标题行中的HSSFCell数组
当然,excel中每一行是由若干个轮举卜单元格,我们常称为cell,它对应着java中的HSSFCell对象
如:创建5个单元格 HSSFCell cells[] = new HSSFCell[5];
//假设我们一行有五列数据
创建标题数据,并通过HSSFCell对象的setCellValue()方法对每个单元格进行赋值
既然单元格都准备好了,那最后是不是该填腊穗充数据了呀。对的,没错。填充数据之前,得把数据准备好吧,
数据:String[] titles = new String[]{"id","name","description","price","credit"};
插入一句话: 在这个时代,能让机器做的,尽量不让人来做,记住这句话。
好的,继续。现在就通过for循环来填充第一行标题的数据
for (int i = 0; i < 5; i++) {
cells[0] = firstRow.createCell(i);
cells[0].setCellValue(titles[i]);
}
数据分析
第一行标题栏创建完毕后,就准备填充我们要写入的数据吧,在java中,面向对象给我们带来的好处在这里正好体现了,没错
把要填写的数据封装在对象中,即一行就是一个对象,n行就是一个对象列表嘛,好的,走起。
创建对象Computer,私有属性id,name,description,price,credit,以及各属性的setter和getter方法,如步骤二所示。
假设我们要写入excel中的数据从数据库查询出来的,最后就生成了一个List<Computer>对象computers
数据写入
具体数据有了,又该让机器帮我们干活了,向excel中写入数据。
for (int i = 0; i < computers.size(); i++) {
HSSFRow row = sheet.createRow(i + 1);
Computer computer = computers.get(i);
HSSFCell cell = row.createCell(0);
cell.setCellValue(computer.getId());
cell = row.createCell(1);
cell.setCellValue(computer.getName());
cell = row.createCell(2);
cell.setCellValue(computer.getDescription());
cell = row.createCell(3);
cell.setCellValue(computer.getPrice());
cell = row.createCell(4);
cell.setCellValue(computer.getCredit());
}
将数据真正的写入excel文件中
做到这里,数据都写好了,最后就是把HSSFWorkbook对象excel写入文件中了。
OutputStream out = null;
try {
out = new FileOutputStream(file);
excel.write(out);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("数据已经写入excel"); //温馨提示
看看我的main方法吧
public static void main(String[] args) throws IOException {
File file = new File("test1.xls");
if(!file.exists()){
file.createNewFile();
}
List<Computer> computers = new ArrayList<Computer>();
computers.add(new Computer(1,"宏碁","笔记本电脑",3333,9.0));
computers.add(new Computer(2,"苹果","笔记本电脑,一体机",8888,9.6));
computers.add(new Computer(3,"联想","笔记本电脑,台式机",4444,9.3));
computers.add(new Computer(4, "华硕", "笔记本电脑,平板电脑",3555,8.6));
computers.add(new Computer(5, "注解", "以上价格均为捏造,如有雷同,纯属巧合", 1.0, 9.9));
write2excel(computers, file);
}
工程目录及执行main方法后的test1.xls数据展示
源码分享,computer就不贴了
package com.qiang.poi;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class ReadExcel {
public static void main(String[] args) throws IOException {
File file = new File("test1.xls");
if(!file.exists()){
file.createNewFile();
}
List<Computer> computers = new ArrayList<Computer>();
computers.add(new Computer(1,"宏碁","笔记本电脑",3333,9.0));
computers.add(new Computer(2,"苹果","笔记本电脑,一体机",8888,9.6));
computers.add(new Computer(3,"联想","笔记本电脑,台式机",4444,9.3));
computers.add(new Computer(4, "华硕", "笔记本电脑,平板电脑",3555,8.6));
computers.add(new Computer(5, "注解", "以上价格均为捏造,如有雷同,纯属巧合", 1.0, 9.9));
write2excel(computers, file);
}
public static void write2excel(List<Computer> computers,File file) {
HSSFWorkbook excel = new HSSFWorkbook();
HSSFSheet sheet = excel.createSheet("computer");
HSSFRow firstRow = sheet.createRow(0);
HSSFCell cells[] = new HSSFCell[5];
String[] titles = new String[] { "id", "name", "description", "price",
"credit" };
for (int i = 0; i < 5; i++) {
cells[0] = firstRow.createCell(i);
cells[0].setCellValue(titles[i]);
}
for (int i = 0; i < computers.size(); i++) {
HSSFRow row = sheet.createRow(i + 1);
Computer computer = computers.get(i);
HSSFCell cell = row.createCell(0);
cell.setCellValue(computer.getId());
cell = row.createCell(1);
cell.setCellValue(computer.getName());
cell = row.createCell(2);
cell.setCellValue(computer.getDescription());
cell = row.createCell(3);
cell.setCellValue(computer.getPrice());
cell = row.createCell(4);
cell.setCellValue(computer.getCredit());
}
OutputStream out = null;
try {
out = new FileOutputStream(file);
excel.write(out);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Ⅳ 用POI将Mysql数据导入到Excel中去
在我们实际的开发中 表现层的解决方案虽然有多样 但是IE浏览器已成为最多人使用的浏览器 因为大家都用Windows 在企业办公系统中 常常有客户这样子要求 你要把我们的报表直接用Excel打开 或者是 我们已经习惯用Excel打印 这样子如果开发是没有问题的用来进行这些数据导入导出支持的都是很好 如果你使用的是SQL Server数据库那就更方便了 笔者也曾体会开发这些功能的方便性 但是有j ee这个更有前途的开放式的开发环境 难道我为了解决打印的要求去另写客户端的控件?或者在服务器端使用本地代码?第一种方案的问题是关键数据的处理有时候不能在客户端做 第 种方案的问题是牺牲了代码的可移植性和稳定性 如果让客户端只负责处理生成好的报表 那将是一种诱人的选择
Apache的Jakata项目的POI子项目 目标是处理ole 对象 目前比较成熟的是HSSF接口 处理MS Excel( )对象 它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西 而是真正的Excel对象 你可以控制森物一些属性如sheet cell等等 这是一个年轻的项目 所以象HDF这样直接支持Word对象的好东西仍然在设计此棚液中 其它支持word格式的纯java方案还有itext 不过也是仍在奋斗中 但是HSSF已经成熟到能够和足够我们使用了 另外 无锡永中Office的实现方案也是纯java的解决方案 不过那也是完全商业的产品 并不是公开代码项目 其实 从开发历史的角度讲 在 年代中期starOffice的原作者在德国成立了StarOffice suite公司 然后到 年夏天starOffice被sun收购 再到 年 月starOffice 的发布 并且从starOffice 开始 starOffice建立在OpenOffice的api的基础上 这个公开代码的office项目已经进行了很长的时间 虽然那是由C++写的 但是POI的代码部分也是由openOffice改过来的 所以 应该对POI充满足够的信心 国内已经有部分公司在他们的办公自动化等Web项目中使用poi了 如日恒的ioffice 海泰的HTOffice等
java当初把核心处理设成Unicode 带来的好处是另代码适应了多语言环境 然而由于老外的英语只有 个字母 有些情况下 一些程序员用 位的byte处理 一不小心就去掉了CJK的高位 或者是由于习惯在程序中采用硬编码 还有多种原因 使得许多java应用在CJK的处理上很烦恼 还好在POI HSSF中考虑到这个问题 可以设置encoding为双字节
POI可以到下载到 编译好的jar主要有这样 个 poi包 poi Browser包 poi hdf包 poi hssf例程包 实际和烂运行时 需要有poi包就可以了 如果用Jakarta ant编译和运行 下载apache Jakarta POI的release中的src包 它里面已经为你生成好了build文件了 只要运行ant就可以了(ant 的安装和使用在此不说了) 如果是用Jbuilder 运行 请在新建的项目中加入poi包 以Jbuilder 为例 选择Tools菜单项的config libraries 选项 新建一个lib 在弹出的菜单中选择poi包 如这个jakarta poi final jar 把poi添加到jbuilder中 然后 右键点击你的项目 在project的properties菜单中path的required Libraries中 点add 添加刚才加入到jbuilder中的poi到你现在的项目中 如果你仅仅是为了熟悉POI hssf的使用 可以直接看POI的samples包中的源代码 并且运行它 hssf的各种对象都有例程的介绍 hssf提供的例程在 apache poi hssf usermodel examples包中 共有 个 生成的目标xls都是workbook xls 如果你想看更多的例程 可以参考hssf的Junit test cases 在poi的包的源代码中有 hssf都有测试代码
首先 到上去下载POI 登录到该网址以后 选择红 *** 域的poi bin final zip来下载
下载以后解压 解压目录为
在Eclipse中设置对poi bin final jar的库引用
在Eclipse中新建一个名字叫POIExcel的Java工程 右键POIExcel项目的项目名 选择Build Path 再选择Add External Archives 然后找到poi bin final jar这个包将其引进到工程中来
Excel 结构 HSSFWorkbook excell 文档对象介绍 HSSFSheet excell的表单 HSSFRow excell的行 HSSFCell excell的格子单元 HSSFFont excell字体 HSSFName 名称 HSSFDataFormat 日期格式 辅助操作包括 HSSFDateUtil 日期 HSSFPrintSetup 打印 HSSFErrorConstants 错误信息表
将数据导出到Excel中的实例
创建一个空白的Excel文件
我们创建一个最普通的Java应用程序即可 程序代码如下: HSSFWorkbook wb=new HSSFWorkbook(); FileOutputStream fileout = new FileOutputStream( C:\test xls ); wb write(fileout); fileout close();
FileOutputStream属于JDK的数据流对象 通过它来将一个名为test xls文件创建在C盘根目录下 运行该程序后可以看到在C盘上的根目录上多了一个Excel文件
如果将程序中的FileOutputStream( C:\test xls )的参数改为 test xls 则文件就会创建在该项目的根目录下
往Excel的单元格中写入信息
POI把Excel分解成几个对象 自顶向下的关系是:工作薄(HSSFWorkbook) >表格(HSSFSheet) >表格行(HSSFRow) >单元格(HSSFCell) 将数据库中表的数据导入到Excel中 首先我们要将数据库中的表的数据查询出来 这里我们通过Hibernate来将数据库中addres *** ook_table表的数据查询出来 然后通过循环将表中的数据导入到Excel中去
HSSFWorkbook wb=new HSSFWorkbook(); HSSFSheet sheet=wb createSheet( new sheet ); try { //通过Hibernate来查询addres *** ook_table表中的数据 将其存储在List中 Transaction tx = session beginTransaction(); hibernate Query query= session createQuery( from Addres *** ookTable ); List list = query list(); mit(); int k = ; //创建表格 创建表格行和单元格 将数据库中表的字段存储在单元格中 for(Iterator it=erator();it hasNext();){ Addres *** ookTable user =(Addres *** ookTable)it next(); HSSFRow row=sheet createRow((short)k); row createCell((short) ) setCellValue(user getId()); row createCell((short) ) setCellValue(user getName()); row createCell((short) ) setCellValue(user getAddress()); row createCell((short) ) setCellValue(user getPhone()); k++; } FileOutputStream fileout = new FileOutputStream( C:\test xls ); wb write(fileout); fileout close(); log error( Successful!! ); } catch (HibernateException e) { log error( Insert Exception! ); e printStackTrace(); }
lishixin/Article/program/Oracle/201311/17278
Ⅵ java用poi实现将数据库里面的数据导入已经存在的excel模板中。最好有实例参考,谢谢。
/**
*通过EXCEL模板导入团队信息
*/
@ResponseBody
@RequestMapping("importTemp")
publicMap<String,String>importTemp(HttpServletRequestrequest,HttpSessionsession,
@RequestParam(value="excel",required=false)MultipartFilefile,HttpServletResponseresponse){
Yhbyhb=(Yhb)session.getAttribute(WebConstants.CURRENT_USER);
Stringzjr=yhb.getYhid();
List<DrTdb>tdxxList=newArrayList<DrTdb>();
Map<String,String>map=newHashMap<String,String>();
Stringsfcg="1";
Stringbcghs="";
Stringbcgyy="";
HSSFWorkbookworkbook=null;
try{
workbook=newHSSFWorkbook(file.getInputStream());
HSSFSheetsheet=workbook.getSheetAt(0);
if(sheet!=null)
{
intd=sheet.getPhysicalNumberOfRows();
other:for(inti=7;i<sheet.getPhysicalNumberOfRows();i++)
{
sfcg="2";
HSSFRowrow=sheet.getRow(i);
DrTdbtd=newDrTdb();
intrs=1;
//td.setTdbm("T"+DateUtil.CurrentTime("MM-dd"));
td.setZjr(zjr);
for(intj=0;j<8;j++)
{
HSSFCellcell=row.getCell(j);
if(j==0){
if(cell!=null){
搜喊姿StringcellStr=cell.toString();
if(isDigit(cellStr)!=""){
StringNDID=(String)tdglService.queryForObject("tdExcel.queryNd",isDigit(cellStr));
td.setNd(NDID);
}else{
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="请填写正确的年度";
breakother;
}
}else{
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="年度不可为空";
breakother;
}
}elseif(j==1){
if(cell!=null){
StringcellStr=cell.toString();
StringYXID=(String)tdglService.queryForObject("tdExcel.queryIdByYx",cellStr);
StringYXDM=(String)tdglService.queryForObject("tdExcel.queryDmByYx",cellStr);
if(YXDM==null||YXDM==""){
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="院系不存在";
breakother;
}
td.setSsyx(YXID);
//设置团队编码
StringcurrentYear=DateUtil.CurrentTime("yyyy");//当前年份
Stringtdbm="";
Stringstr=null;
str="T"+currentYear+YXDM;
StringmaxID=(String)tdglService.queryForObject("tdgl.queryMaxID",str);//当前团队最大ID
Stringstr_q=maxID.substring(1);
intMAXID=Integer.parseInt(str_q);//将返回的字符串去掉T
tdbm="T"+(MAXID+1);
世绝渗唯td.setTdbm(tdbm);
}else{
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="院系不存在";
breakother;
}
}elseif(j==3){
if(cell!=null){
StringcellStr=cell.toString();
String[]zdjs=cellStr.split(",");
for(intin=0;in<zdjs.length;in++){
zdjs[in]=zdjs[in].substring(1,zdjs[in].length()-1);
//zdjs[in]=isDigit(zdjs[in]);
zdjs[in]=(String)tdglService.queryForObject("tdExcel.queryIdByZgh",zdjs[in]);
if("".equals(zdjs[in])||zdjs[in]==null){
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="教师编号有误";
breakother;
}
}
td.setZdjs(zdjs);
}else{
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="指导教师不可为空";
breakother;
}
}elseif(j==5){
if(cell!=null){
StringcellStr=cell.toString();
cellStr=cellStr.substring(1,cellStr.length()-1);
//BigDecimalbg=newBigDecimal(cellStr);
//cellStr=bg.toPlainString();
cellStr=(String)tdglService.queryForObject("tdExcel.queryIdByXh",cellStr);
if("".equals(cellStr)||cellStr==null){
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="团队组长学号有误";
breakother;
}
else{
StringTdid=(String)tdglService.queryForObject("tdExcel.queryryid",cellStr);
StringXM=(String)tdglService.queryForObject("tdExcel.queryXmBy",cellStr);
if(Tdid!=null){
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="团队组长"+XM+"已存在";
breakother;
}
}
td.setTdzz(cellStr);
}else{
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="团队组长不可为空";
breakother;
}
}elseif(j==7){
if(cell!=null){
StringcellStr=cell.toString();
String[]tdzy=cellStr.split(",");
for(intk=0;k<tdzy.length;k++){
tdzy[k]=tdzy[k].substring(1,tdzy[k].length()-1);
tdzy[k]=(String)tdglService.queryForObject("tdExcel.queryIdByXh",tdzy[k]);
if("".equals(tdzy[k])||tdzy[k]==null){
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="团队组员学号有误";
breakother;
}
rs++;
}
td.setTdzy(tdzy);
}else{
sfcg="0";
bcghs=String.valueOf(i+1);
bcgyy="团队组员不可为空";
breakother;
}
}
}
td.setRs(String.valueOf(rs));
tdxxList.add(td);
}
}
}catch(IOExceptione){
e.printStackTrace();
}
if("2".equals(sfcg)){
for(DrTdbtdxx:tdxxList){
tdglService.insert("tdExcel.addTdxx",tdxx);
tdglService.insert("tdExcel.addTdzz",tdxx);
tdglService.insert("tdExcel.addTdzy",tdxx);
tdglService.insert("tdExcel.addZdjs",tdxx);
}
}
map.put("sfcg",sfcg);
map.put("bcghs",bcghs);
map.put("bcgyy",bcgyy);
returnmap;
}
看不懂留言
Ⅶ java poi Excel大数据量导入怎么提高速度
记得有个属性,
POI3.8的SXSSF包是XSSF的一个扩展版本,支持流处理,在生成大数据量的电子表格且堆空间有限时使用。SXSSF通过限制内存中可访问的记录行数来实现其低内存利用,当达到限定值时,新一行神肢派数据的加入会引起老一行的数据刷新到硬盘。
比如内存中限制行数为100,当行号到达101时,行号为0的记录刷新到硬盘并从内存中删除,当行号到达102时,游贺行号为1的记录刷新饥迟到硬盘,并从内存中删除,以此类推。
rowAccessWindowSize代表指定的内存中缓存记录数,默认为100,此值可以通过
new SXSSFWorkbook(int rowAccessWindowSize)或SXSSFSheet.setRandomAccessWindowSize(int windowSize)来设置。
Ⅷ java POI 导入excel时候日期格式转化
Java的不会,但是思路应该是差不瞎郑多的,你数据为Null那你就用三元表达式判断,庆卜如果为Null就赋一个值给它。(请自行网络三元表达式)磨差颂