java实现导出excel
![java实现导出excel](https://img.360docs.net/img76/03k49eiqckut2qw4yeih-61.webp)
![java实现导出excel](https://img.360docs.net/img76/03k49eiqckut2qw4yeih-92.webp)
java实现导出excel
最近有个项目涉及到从java数据库access提取数据到excel中,我搜索了大概有两种办法一种是poi一种是jxl。下面介绍下这两种方法。POI为apache公司的一个子项目,主要是提供一组操作windows文档的Java API.Java Excel俗称jxl是一开放源码项目,通过它Java开发人员可以读取Excel 文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的,所以我们在Web应用中可以通过JSP、Servlet来调用API实现对Excel数据表的访问。
就这两者的区别,主要谈下JVM虚拟机内存消耗的情况.
数据量3000条数据,每条60列.JVM虚拟机内存大小64M.
使用POI:运行到2800条左右就报内存溢出.
使用JXL:3000条全部出来,并且内存还有21M的空间.
可想而知,在对内存的消耗方面差距还是挺大的.
也许是由于JXL在对资源回收利用方面做的还挺不错的.
关于两者效率方面,没有研究过,我想这个也是基于大数据量而言的,数据量小的话基本上差别不大,也不难被发觉.但是大的数据量,POI消耗的JVM内存远比JXL消耗的多.但相比提供的功能的话,JXL 又相对弱了点.所以如果要实现的功能比较复杂的情况下可以考虑使用POI,但如果只想生成一些大数据量可以考虑使用JXL,或者CSV也是一个不错的选择,不过CSV并不是真正的excel.
jxl.jar概述
通过java操作excel表格的工具类库
支持Excel 95-2000的所有版本
生成Excel 2000标准格式
支持字体、数字、日期操作
能够修饰单元格属性
支持图像和图表
应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。
基本操作
一、创建文件
拟生成一个名为“测试数据.xls”的Excel文件,其中第一个工作表被命名为“第一页”,大致效果如下:
代码(CreateXLS.java):
//生成Excel的类
import java.io.*;
import jxl.*;
import jxl.write.*;
public class CreateXLS
{
public static void main(String args[])
{
try
{
//打开文件
WritableWorkbook book=
Workbook.createWorkbook(new File(“测试.xls”));
//生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet=book.createSheet(“第一页”,0);
//在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
//以及单元格内容为test
Label label=new Label(0,0,”test”);
//将定义好的单元格添加到工作表中
sheet.addCell(label);
jxl.write.Number number = new jxl.write.Number(1,0,789.123);
sheet.addCell(number);
//写入数据并关闭文件
book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}
编译执行后,会在当前位置产生一个Excel文件。
二、读取文件
以刚才我们创建的Excel文件为例,做一个简单的读取操作,程序代码如下://读取Excel的类
import java.io.*;
import jxl.*;
public class ReadXLS
{
public static void main(String args[])
{
try
{
Workbook book=
Workbook.getWorkbook(new File(“测试.xls”));
//获得第一个工作表对象
Sheet sheet=book.getSheet(0);
//得到第一列第一行的单元格
Cell cell1=sheet.getCell(0,0);
String result=cell1.getContents();
System.out.println(result);
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}
程序执行结果:test
三、修改文件
利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的时候,除了打开文件的方式不同之外,其他操作和创建Excel是一样的。下面的例子是在我们已经生成的Excel文件中添加一个工作表:
//修改Excel的类,添加一个工作表
import java.io.*;
import jxl.*;
import jxl.write.*;
public class UpdateXLS
{
public static void main(String args[])
{
try
{
//Excel获得文件
Workbook wb=Workbook.getWorkbook(new File(“测试.xls”));
//打开一个文件的副本,并且指定数据写回到原文件
WritableWorkbook book=
Workbook.createWorkbook(new File(“测试.xls”),wb);
//添加一个工作表
WritableSheet sheet=book.createSheet(“第二页”,1);
sheet.addCell(new Label(0,0,”第二页的测试数据”));
book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}
高级操作
一、数据格式化
在Excel中不涉及复杂的数据类型,能够比较好的处理字串、数字和日期已经能够满足一般的应用。
1、字串格式化
字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主要由WritableFont和WritableCellFormat类来负责。假设我们在生成一个含有字串的单元格时,使用如下语句,为方便叙述,我们为每一行命令加了编号:
WritableFont font1= new WritableFont(WritableFont.TIMES,16,WritableFont.BOLD); 或//设置字体格式为excel支持的格式WritableFont font3=new WritableFont(WritableFont.createFont("楷体
_GB2312"),12,WritableFont.NO_BOLD );
①WritableCellFormat format1=new WritableCellFormat(font1);
②Label label=new Label(0,0,”data 4 test”,format1);
③其中①指定了字串格式:字体为TIMES,字号16,加粗显示。
WritableFont有非常丰富的构造子,供不同情况下使用,jExcelAPI的java-doc中有详细列表,这里不再列出。
②处代码使用了WritableCellFormat类,这个类非常重要,通过它可以指定单元格的各种属性,后面的单元格格式化中会有更多描述。③处使用了Label类的构造子,指定了字串被赋予那种格式。在WritableCellFormat类中,还有一个很重要的方法是指定数据的对齐方式,比如针对我们上面的实例,可以指定:
//把水平对齐方式指定为居中
format1.setAlignment(jxl.format.Alignment.CENTRE);
//把垂直对齐方式指定为居中
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
//设置自动换行
format1.setWrap(true);
二、单元格操作
Excel中很重要的一部分是对单元格的操作,比如行高、列宽、单元格合并等,所幸jExcelAPI
提供了这些支持。这些操作相对比较简单,下面只介绍一下相关的API。
1、合并单元格
WritableSheet.mergeCells(int m,int n,int p,int q);
作用是从(m,n)到(p,q)的单元格全部合并,比如:
WritableSheet sheet=book.createSheet(“第一页”,0);
//合并第一列第一行到第六列第一行的所有单元格
sheet.mergeCells(0,0,5,0);
合并既可以是横向的,也可以是纵向的。合并后的单元格不能再次进行合并,否则会触发异常。
2、行高和列宽
WritableSheet.setRowView(int i,int height);
作用是指定第i+1行的高度,比如:
//将第一行的高度设为200
sheet.setRowView(0,200);
WritableSheet.setColumnView(int i,int width);
作用是指定第i+1列的宽度,比如:
//将第一列的宽度设为30
sheet.setColumnView(0,30);
三、操作图片
public static void write()throws Exception{
WritableWorkbook wwb=Workbook.createWorkbook(new File("c:/1.xls"));
WritableSheet ws=wwb.createSheet("Test Sheet 1",0);
File file=new File("C:\\jbproject\\PVS\\WebRoot\\weekhit\\1109496996281.png");
WritableImage image=new WritableImage(1, 4, 6, 18,file);
ws.addImage(image);
wwb.write();
wwb.close();
}
很简单和插入单元格的方式一样,不过就是参数多了些,WritableImage这个类继承了Draw,上面只是他构造方法的一种,最后一个参数不用说了,前面四个参数的类型都是double,依次是x, y, width, height,注意,这里的宽和高可不是图片的宽和高,而是图片所要占的单位格的个数,因为继承的Draw所以他的类型必须是double,具体里面怎么实现的我还没细看:)因为着急赶活,先完成功能,其他的以后有时间慢慢研究。以后会继续写出在使用中的心得给大家。
读:
读的时候是这样的一个思路,先用一个输入流(InputStream)得到Excel文件,然后用jxl中的Workbook得到工作薄,用Sheet从工作薄中得到工作表,用Cell得到工作表中得某个单元格。
InputStream->Workbook->Sheet->Cell,就得到了excel文件中的单元格
代码:
String path="c:\\excel.xls";//Excel文件URL
InputStream is = new FileInputStream(path);//写入到FileInputStream
jxl.Workbook wb = Workbook.getWorkbook(is); //得到工作薄
jxl.Sheet st = wb.getSheet(0);//得到工作薄中的第一个工作表
Cell cell=st.getCell(0,0);//得到工作表的第一个单元格,即A1
String content=cell.getContents();//getContents()将Cell中的字符转为字符串
wb.close();//关闭工作薄
is.close();//关闭输入流
我们可以通过Sheet的getCell(x,y)方法得到任意一个单元格,x,y和excel中的坐标对应.
例如A1对应(0,0),A2对应(0,1),D3对应(3,2).Excel中坐标从A,1开始,jxl中全部是从0开始.
还可以通过Sheet的getRows(),getColumns()方法得到行数列数,并用于循环控制,输出一个sheet中的所有内容.
写:
往Excel中写入内容主要是用jxl.write包中的类。
思路是这样的:
OutputStream<-WritableWorkbook<-WritableSheet<-Label
这里面Label代表的是写入Sheet的Cell位置及内容。
代码:
OutputStream os=new FileOutputStream("c:\\test.xls");//输出的Excel文件URL
WritableWorkbook wwb = Workbook.createWorkbook(os);//创建可写工作薄
WritableSheet ws = wwb.createSheet("sheet1", 0);//创建可写工作表
Label labelCF=new Label(0, 0, "hello");//创建写入位置和内容
ws.addCell(labelCF);//将Label写入sheet中
Label的构造函数Label(int x, int y,String aString)xy意同读的时候的xy,aString是写入的内容.
WritableFont wf = new WritableFont(WritableFont.TIMES, 12, WritableFont.BOLD, false);//设置写入字体
WritableCellFormat wcfF = new WritableCellFormat(wf);//设置CellFormat
Label labelCF=new Label(0, 0, "hello");//创建写入位置,内容和格式
Label的另一构造函数Label(int c, int r, String cont, CellFormat st)可以对写入内容进行格式化,设置字体及其它的属性.
现在可以写了
wwb.write();
写完后关闭
wwb.close();
输出流也关闭吧
os.close;
OK,只要把读和写结合起来,就可以在N个Excel中读取数据写入你希望的Excel新表中,还是比较方便的。
程序一例
程序代码:sql = "select * from tablename";
rs = stmt.executeQuery(sql);
//新建Excel文件
String filePath=request.getRealPath("aaa.xls");
File myFilePath=new File(filePath);
if(!myFilePath.exists())
myFilePath.createNewFile();
FileWriter resultFile=new FileWriter(myFilePath);
PrintWriter myFile=new PrintWriter(resultFile);
resultFile.close();
//用JXL向新建的文件中添加内容
OutputStream outf = new FileOutputStream(filePath);
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(outf);
jxl.write.WritableSheet ws = wwb.createSheet("sheettest", 0);
int i=0;
int j=0;
for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
ws.addCell(new Label(k,0,rs.getMetaData().getColumnName(k+1)));
}
while(rs.next()){
out.println(rs.getMetaData().getColumnCount());
for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
ws.addCell(new Label(k,j+i+1,rs.getString(k+1)));
}
i++;
}
wwb.write();
wwb.close();
}catch(Exception e){e.printStackTrace();}
finally{
rs.close();
conn.close();
}
response.sendRedirect("aaa.xls");
下面的代码是我整合了上边的两个。目的是从一个叫做scmanage数据库提取数据到aaa.exl中。// 生成Excel的类
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import jxl.Workbook;
import https://www.360docs.net/doc/757994897.html,bel;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
public class CreateExcel {
private static ResultSet rs=null;
private static Connection conn;
public static void main(String args[])
{try{
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")
.newInstance();
} catch (InstantiationException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
}
conn = DriverManager
.getConnection(
"jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=scmanage.mdb",
"", "");
String str = "select * from area_info";
PreparedStatement ps = conn.prepareStatement(str);
rs = ps.executeQuery();
String filePath="aaa.xls"; //新建Excel文件
File myFilePath=new File(filePath);
if(!myFilePath.exists())
myFilePath.createNewFile();
FileWriter resultFile=new FileWriter(myFilePath);
PrintWriter myFile=new PrintWriter(resultFile);
resultFile.close();
OutputStream outf = new FileOutputStream(filePath); //用JXL向新建的文件中添加内容jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(outf);
jxl.write.WritableSheet ws = wwb.createSheet("perssoft", 0);
int i=0;
int j=0;
for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
ws.addCell(new Label(k,0,rs.getMetaData().getColumnName(k+1)));
}
while(rs.next()){
System.out.println(rs.getMetaData().getColumnCount());
for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
ws.addCell(new Label(k,j+i+1,rs.getString(k+1)));
}
i++;
}
wwb.write();
wwb.close();
}catch(Exception e){e.printStackTrace();}
finally{
try {
rs.close();
conn.close();
} catch (SQLException e) {
// TODO 自动生成catch 块
e.printStackTrace();
}
}
}
}
目前这个版本还要扩展一下。就是用户可以自己选择路径,自己创建用户名。
java导入导出excel操作
java导入导出excel操作(jxl) Java解释Excel数据(包的使用) 关键字: java excel 包 下载地址: 真实下载地址: 网站上对它的特征有如下描述: ● 支持Excel 95-2000的所有版本 ● 生成Excel 2000标准格式 ● 支持字体、数字、日期操作 ● 能够修饰单元格属性 ● 支持图像和图表 应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java 的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel 文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。 搭建环境 将下载后的文件解包,得到,放入classpath,安装就完成了。 基本操作 一、创建文件 拟生成一个名为“测试数据.xls”的Excel文件,其中第一个工作表被命名为“第一页”,大致效果如下: Java代码 /* * Created on Dec 30, 2007 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */ package ; import .*; import jxl.*; import .*;
/** * @author Ken * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ public class CreateXLS { public static void main(String[] args) { try { WritableWorkbook book = (new File("d:/")); 0 means this is 1st page. WritableSheet sheet = ("Sheet_1", 0); value is "test". Label label = new Label(0, 0, "test"); (label); WARN:necessarily use integrated package-path, otherwise will be throws path -error. value is . number = new0, ; (number); (); (); } catch (Exception e) { (); } } } 编译执行后,会在当前位置产生一个Excel文件。 二、读取文件 以刚才我们创建的Excel文件为例,做一个简单的读取操作,程序代码如下:
JSP中导入导出Excel文件
JSP中导入导出Excel文件 一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel 对象,你可以控制一些属性如sheet,cell等等。 二.HSSF概况 HSSF 是sHorrible SpreadSheet Format的缩写,也即“讨厌的电子表格格式”。也许HSSF的名字有点滑稽,就本质而言它是一个非常严肃、正规的API。通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。 HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。前者很好理解,后者比较抽象,但操作效率要高得多。 三.开始编码 1 .准备工作 要求:JDK 1.4+POI开发包 可以到 https://www.360docs.net/doc/757994897.html,/dyn/closer.cgi/jakarta/poi/ 最新的POI工具包 2 . EXCEL 结构 HSSFWorkbook excel 文档对象介绍 HSSFSheet excel的表单 HSSFRow excel的行 HSSFCell excel的格子单元 HSSFFont excel字体 HSSFName 名称 HSSFDataFormat 日期格式 HSSFHeader sheet头 HSSFFooter sheet尾 和这个样式 HSSFCellStyle cell样式
Java实现Excel数据导入和导出的研究与应用
Java实现Excel数据导入导出的研究与应用 王晶晶 北京邮电大学网络教育学院(100088) E-mail:bolalisi_double@https://www.360docs.net/doc/757994897.html, 摘要:Excel能够通过功能强大的工具将杂乱的数据组织成有用的信息,然后分析、交流和共享所得到的结果。很多系统由于存在着大量需要处理的数据,Excel本身强大的功能使得它成为处理分析这些数据首选的工具。随着Java语言成为越来越多系统的开发语言,利用Java进行Excel的数据导入导出在很多系统中都发挥着重要的作用,本文主要介绍了Jxl API的主要功能,并结合实例探讨了利用Jxl API操作Excel数据的导入和导出。 关键字:Java;Excel; Jxl API;数据导入导出 中图分类号:TP312文献标识码:A 1. 引言 MS的电子表格(Excel)是Office的重要成员,是保存统计数据的一种常用格式。在一个Java应用中,将一部分数据生成Excel格式,是与其他系统无缝连接的重要手段。在远程网络教学系统中,利用Excel表格统计学生的作业考试情况信息,便于老师了解学生的学习情况,分析教学效果,制定教学计划。所以,用Java操作Excel表格,导出相关的信息对于远程网络教育系统有着的很重要的意义。 在开源世界中,有两套比较有影响的API提供Excel数据导入导出的功能,一个是POI,一个是jExcelAPI。本文结合基于J2EE开发的多媒体教学系统中提供的将学生作业信息导出到Excel表格中的实例,详细阐述了利用JAVA开发的jExcelAPI操作excel的方法。 2. Jxl 简介 2.1 Java语言简介 Java语言具有面向对象、与平台无关、安全、稳定和多线程等优良特性,是目前软件设计中极为强大的编程语言[1]。它具有以下一些特点[2]:简单,面向对象,分布式,解释执行,鲁棒,安全,体系结构中立,可移植,高性能,多线程以及动态性。 2.2什么是Jxl Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该 API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的,所以我们在Web应用中可以通过JSP、 Servlet来调用API实现对Excel数据表的访问。 Jxl发布的稳定版本是V2.0,提供以下功能: 从Excel 95、97、2000等格式的文件中读取数据[3]; 读取Excel公式(可以读取Excel 97以后的公式)[3];
JAVA导出EXCEL类(TSV格式)
package com.bear.util; import java.io.*; import javax.swing.*; import javax.swing.table.*; public class ExcelUtil { public void exportTable(JTable table,String title) throws IOException { TableModel model = table.getModel(); JFileChooser fileChooser = new JFileChooser(); fileChooser.setCurrentDirectory(new File("."));//设置当前目录 fileChooser.setAcceptAllFileFilterUsed(false); fileChooser.addChoosableFileFilter(new javax.swing.filechooser.FileFilter() { public boolean accept(File file) { if (file.isDirectory()) return true; return (file.getName().indexOf("xls") != -1); } public String getDescription() { return "Microsoft Excel文件(*.xls)"; } }); //fileChooser.showSaveDialog(null); int returnVal =fileChooser.showSaveDialog(fileChooser); if (returnVal == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); if (file.exists()) { int copy = JOptionPane.showConfirmDialog(null,"是否要覆盖当前文件?", "保存", JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE); if (copy == JOptionPane.YES_OPTION) fileChooser.approveSelection(); else return; } else fileChooser.approveSelection(); FileWriter out = new FileWriter(file); out.write(title + "\n\n"); for(int i=0; i < model.getColumnCount(); i++) out.write(model.getColumnName(i) + "\t"); out.write("\n"); for(int i=0; i< model.getRowCount(); i++) {
【VIP专享】java 导出excel 增量写入同一sheet
sheetAct=createExcelHead(sheetAct,writer,excelHead,title+num); } list=agentService .queryExportData(map); if (j<5){ findExcelData(j*limit,list,sheetAct); }else { int num=j/5; findExcelData((j-num*5)*limit,list,sheetAct); } } writer.write();}catch (Exception e){ LOGGER .error("Exception:", e.fillInStackTrace()); } finally { if (null != writer) { writer.close(); } } return out.toByteArray(); } findExcelData 方法: private void findExcelData(int start,List import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import jxl.Workbook; import jxl.format.UnderlineStyle; import https://www.360docs.net/doc/757994897.html,bel; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFCell; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFCellStyle; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFRow; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFSheet; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class ExcelOpt { /** * 生成一个Excel文件jxl * @param fileName 要生成的Excel文件名 * @jxl.jar 版本:2.6 */ public static void writeExcel(String fileName){ WritableWorkbook wwb = null; try { //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象 wwb = Workbook.createWorkbook(new File(fileName)); } catch (IOException e) { e.printStackTrace(); } if(wwb!=null){ //创建一个可写入的工作表 //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置 Java数据导入Excel package com.bossy.base; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import jxl.Workbook; import jxl.format.UnderlineStyle; import https://www.360docs.net/doc/757994897.html,bel; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFCell; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFCellStyle; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFRow; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFSheet; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; JA V A实现EXCEL的导入和导出(四) JA V A EXCEL API简介 Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的,所以我们在Web应用中可以通过JSP、Servlet来调用API实现对Excel数据表的访问。 现在发布的稳定版本是V2.0,提供以下功能: * 从Excel 95、97、2000等格式的文件中读取数据; * 读取Excel公式(可以读取Excel 97以后的公式); * 生成Excel数据表(格式为Excel 97); * 支持字体、数字、日期的格式化; * 支持单元格的阴影操作,以及颜色操作; * 修改已经存在的数据表; 现在还不支持以下功能,但不久就会提供了: 1. 不能够读取图表信息; 2. 可以读,但是不能生成公式,任何类型公式最后的计算值都可以读出; 回页首 应用示例 1 从Excel文件读取数据表 Java Excel API既可以从本地文件系统的一个文件(.xls),也可以从输入流中读取Excel数据表。读取Excel数据表的第一步是创建Workbook(术语:工作薄),下面的代码片段举例说明了应该如何操作:(完整代码见ExcelReading.java) import java.io.*; import jxl.*; … … … … try { //构建Workbook对象, 只读Workbook对象 //直接从本地文件创建Workbook //从输入流创建Workbook InputStream is = new FileInputStream(sourcefile); jxl.Workbook rwb = Workbook.getWorkbook(is); } catch (Exception e) { e.printStackTrace(); package ais.mytest.web; /** * 功能:主要实现数据导出Excel和Word功能* 日期:2008-2-28 */ import ais.basic.service.BasicUtil; import https://www.360docs.net/doc/757994897.html,mons.file.service.FileService; import ais.framework.web.BaseAction; import ais.mytest.model.Employeer; import ais.mytest.service.IemployeerService; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.text.DecimalFormat; import jxl.write.NumberFormat; import java.util.List; import javax.servlet.ServletOutputStream; import jxl.Cell; import jxl.Workbook; import jxl.format.Alignment; import jxl.format.UnderlineStyle; import jxl.format.VerticalAlignment; import jxl.format.Border; import jxl.format.BorderLineStyle; import jxl.format.BoldStyle; import jxl.format.Colour; import jxl.write.Blank; import jxl.write.DateFormat; import jxl.write.DateTime; import https://www.360docs.net/doc/757994897.html,bel; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableImage; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; //import com.ibm.icu.text.SimpleDateFormat; //import com.lowagie.text.Cell; import com.lowagie.text.Document; import com.lowagie.text.Font; import com.lowagie.text.Image; ,批量导出数据到excel中(包含每条数据对应的附件) 本程序功能功能说明 采用压缩的方法把用户要导出的excel 文件和excle数据中每条数据对应的文件,打包成一个大文件,输出到缓存区,用户通过浏览器来下载这个文件,缺陷是文件过大时,比如几个G大小的附件,ie下载很慢。建议用360等支持断点续传的功能的浏览器来下载。 Excel查看附件采用的是链接方式 详细如下面截图,点击文件链接,可以链接到相对文件位置的文件夹(因为附件可能是多个,采用的都是文件夹的相对链接的方式实现的), 压缩包内存放的文件结构: Excel文件,reportfile(存放附件的文件夹,文件夹结构详细见代码) 每行excel 都对应相对的文件夹(reportfile内的某一个子文件夹和excel的行号相对应),如下截图,红色圈圈链接的就是对应的相应文件夹下的appfile文件夹下的文件: //引入的类 import org.apache.tools.zip.ZipEntry; //把文件写入到压缩对象out import org.apache.tools.zip.ZipOutputStream; import java.io.*; import java.io.OutputStream; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFCell; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFCellStyle; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFFont; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFRichTextString; java实现导出excel 最近有个项目涉及到从java数据库access提取数据到excel中,我搜索了大概有两种办法一种是poi一种是jxl。下面介绍下这两种方法。POI为apache公司的一个子项目,主要是提供一组操作windows文档的Java API.Java Excel俗称jxl是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API非Windows 操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的,所以我们在Web 应用中可以通过JSP、Servlet来调用API实现对Excel数据表的访问。 就这两者的区别,主要谈下JVM虚拟机内存消耗的情况. 数据量3000条数据,每条60列.JVM虚拟机内存大小64M. 使用POI:运行到2800条左右就报内存溢出. 使用JXL:3000条全部出来,并且内存还有21M的空间. 可想而知,在对内存的消耗方面差距还是挺大的. 也许是由于JXL在对资源回收利用方面做的还挺不错的. 关于两者效率方面,没有研究过,我想这个也是基于大数据量而言的,数据量小的话基本上差别不大,也不难被发觉.但是大的数据量,POI消耗的JVM内存远比JXL消耗的多.但相比提供的功能的话,JXL 又相对弱了点.所以如果要实现的功能比较复杂的情况下可以考虑使用POI,但如果只想生成一些大数据量可以考虑使用JXL,或者CSV也是一个不错的选择,不过CSV并不是真正的excel. jxl.jar概述 通过java操作excel表格的工具类库 支持Excel95-2000的所有版本 生成Excel2000标准格式 支持字体、数字、日期操作 能够修饰单元格属性 支持图像和图表 应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。 一、导入jar包: poi-3.0.1-FINAL-20070705.jar; poi-3.0-alpha1-20050704.jar; 二、获取List 下面是本人使用java的poi实现使用模板到处excel,内容包含图片,使用两种不同的方式实现其到处excel。但是使用jxl实现到处excel只能到处png格式。 package com.rxc.servlet; import java.awt.image.BufferedImage; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFCell; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFClientAnchor; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFPatriarch; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFRow; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFSheet; import https://www.360docs.net/doc/757994897.html,ermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class OutExcelServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { package cn.zd; import java.io.File; import jxl.Workbook; import https://www.360docs.net/doc/757994897.html,bel; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; /** * 生成Excel文件 * @author zhangdi * */ public class CreateExcel { public static void main(String args[]) { try { // 创建文件 WritableWorkbook book = Workbook.createWorkbook(new File("C:\\test.xls")); // 生成名为“第一页”的工作表,参数0表示这是第一页 WritableSheet sheet = book.createSheet("第一页", 0); // 生成名为“第一页”的工作表,参数0表示这是第一页 WritableSheet sheet2 = book.createSheet("第二页", 1); // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0),以及单元格内容为test /** * 参数一:0 第1列--------------------列 * 参数二:0 第1行--------------------行 * 参数三:"test" 内容 */ Label label = new Label(0, 0, "test"); // 将定义好的单元格添加到工作表中 sheet.addCell(label); Label labe2 = new Label(1, 0, "张迪"); sheet.addCell(labe2); //生成一个保存数字的单元格必须使用Number的完整包路径,否则有语法歧义单元格位置是第二列,第一行,值为789.123 jxl.write.Number number = new jxl.write.Number(2, 0, 610); 本文由我司收集整编,推荐下载,如有疑问,请与我司联系 java 三种excel 导出方式 2013/06/26 0 基于模板的EXCEL 报表组件ExcelUtils ExcelUtils 是一个在WEB 应用开发中的EXCEL 导出工具,它基于POI 和beanutil 工程。类于velocity,它拥有自己标签。但是ExcelUtils 的标签是写在EXCEL 中的。通过EXCEL 的自定义标签我们可以自由编辑EXCEL 的式。不用编辑你的应用程序代 码。ExcelUtils 会解析你的EXCEL 模板中的标签并向模板中填充数据来生成自已的 报表。 1,EXCELUTILS 所需的JAR 包:excelutils.jar poi-2.5.1.jar commons-logging.jar commons-digester.jar commons-beanutils.jar,加外可能还需加添加osh.jar 包。将上述jar 包加入自己的web 工程的classpath 中。 2,定义自己的excel 模板: 在excel 中添加excelutils 的自定义标签,常用标签如下: #foreach detail in ${list}${https://www.360docs.net/doc/757994897.html,} ${detail.qty} ...#end 迭代输出list 中数据 另外一些标签: ${printDate}${https://www.360docs.net/doc/757994897.html,}#formula SUM(C${detailStartRowNo}:C${detailEndRowNo})#each ${model}#each ${model} on ${keys}#each ${model} ${width1},${width2}... on ${keys}#sum qty on ${list} where name=test#sum qty on ${list} where name like test#sum qty on ${list} where name like ${value}#call service.getStr( str ,${aaa})#call service.getModel( str ,${aaa}).name#formula SUM(C${currentRowNo}:F${currentRowNo}) 3,编写JAVA 代码: List list= new ArrayList(); Model model = new Model(); .list.add(model) ExcelUtils.addValue( list , list);ExcelUtils.addSerivce( service , service);String config = 【Java】导出excel表格 修改浏览权限| 删除1 package jxlTest; 2 3 import java.io.FileOutputStream; 4 import java.io.OutputStream; 5 import java.text.SimpleDateFormat; 6 import java.util.ArrayList; 7 import java.util.Date; 8 import java.util.List; 9 10 import jxl.*; 11 import jxl.format.Alignment; 12 import jxl.format.Border; 13 import jxl.format.BorderLineStyle; 14 import jxl.format.CellFormat; 15 import jxl.write.Boolean; 16 import https://www.360docs.net/doc/757994897.html,bel; 17 import jxl.write.Number; 18 import jxl.write.WritableCellFormat; 19 import jxl.write.WritableFont; 20 import jxl.write.WritableSheet; 21 import jxl.write.WritableWorkbook; 22 23 public class JXLExample { 24 25 /** 26 * 数据库导出至Excel表格 27 */ 28 public static void main(String[] args) { 29 // 准备设置excel工作表的标题 30 String[] title = {"编号","产品名称","产品价格","产品数量","生产日期","产地","是否出口"}; 31 try { 32 // 获得开始时间 33 long start = System.currentTimeMillis(); 34 // 输出的excel的路径 35 String filePath = "e:\\testJXL.xls"; 36 // 创建Excel工作薄 37 WritableWorkbook wwb; 38 // 新建立一个jxl文件,即在e盘下生成testJXL.xls 39 OutputStream os = new FileOutputStream(filePath); 1 从Excel文件读取数据表 Java Excel API既可以从本地文件系统的一个文件(.xls),也可以从输入流中读取Excel数据表。读取Excel数据表的第一步是创建Workbook(术语:工作薄),下面的代码片段举例说明了应该如何操作:(完整代码见ExcelReading.java) 一旦创建了Workbook,我们就可以通过它来访问Excel Sheet(术语:工作表)。参考下面的代码片段: 我们既可能通过Sheet的名称来访问它,也可以通过下标来访问它。如果通过下标来访问的话,要注意的一点是下标从0开始,就像数组一样。 一旦得到了Sheet,我们就可以通过它来访问Excel Cell(术语:单元格)。参考下面的代码片段: 如果仅仅是取得Cell的值,我们可以方便地通过getContents()方法,它可以将任何类型的Cell值都作为一个字符串返回。示例代码中Cell(0, 0)是文本型,Cell(1, 0)是数字型,Cell(1,1)是日期型,通过getContents(),三种类型的返回值都是字符型。 如果有需要知道Cell内容的确切类型,API也提供了一系列的方法。参考下面的代码片段: 在得到Cell对象后,通过getType()方法可以获得该单元格的类型,然后与API 提供的基本类型相匹配,强制转换成相应的类型,最后调用相应的取值方法getXXX(),就可以得到确定类型的值。API提供了以下基本类型,与Excel的数据格式相对应,如下图所示: 每种类型的具体意义,请参见Java Excel API Document。 当你完成对Excel电子表格数据的处理后,一定要使用close()方法来关闭先前创建的对象,以释放读取数据表的过程中所占用的内存空间,在读取大量数据时显得尤为重要。参考如下代码片段: Java Excel API提供了许多访问Excel数据表的方法,在这里我只简要地介绍几个常用的方法,其它的方法请参考附录中的Java Excel API Document。 Workbook类提供的方法Java数据导入导出Excel
java实现excel导入导出
java导出excel案例
JAVA导出WORD与EXCEL
java批量导出excel格式数据(含每条数据的附件)
java实现导出excel
poi导出excel文件并提示下载
JAVA的poi实现模版导出excel(带图片)
java操作excel(创建excel、生成工作表并添加数据)
java 三种excel导出方式
Java导出excel表格
java程序控制excel导入导出数据库信息