jsp页面查询的数据导出到excel
java导入导出excel操作(jxl)
jxl.jar 包
下载地址:
http://www.andykhan.com/jexcelapi/
真实下载地址:
http://www.andykhan.com/jexcelapi/download.html
网站上对它的特征有如下描述:
● 支持Excel 95-2000的所有版本
● 生成Excel 2000标准格式
● 支持字体、数字、日期操作
● 能够修饰单元格属性
● 支持图像和图表
应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。
搭建环境
将下载后的文件解包,得到jxl.jar,放入classpath,安装就完成了。
基本操作
一、创建文件
拟生成一个名为“测试数据.xls”的Excel文件,其中第一个工作表被命名为“第一页”,大致效果如下:
- package JExcelTest.standard;
- import java.io.*;
- import jxl.*;
- import jxl.write.*;
- publicclass CreateXLS {
- publicstaticvoid main(String[] args) {
- try {
- //open file.
- WritableWorkbook book = Workbook.createWorkbook(new File("d:/Test.xls"));
- //create Sheet named "Sheet_1". 0 means this is 1st page.
- WritableSheet sheet = book.createSheet();
- //define cell column and row in Label Constructor, and cell content write "test".
- //cell is 1st-Column,1st-Row. value is "test".
- Label label = , , "test");
- //add defined cell above to sheet instance.
- sheet.addCell(label);
- //create cell using add numeric. WARN:necessarily use integrated package-path, otherwise will be throws path-error.
- //cell is 2nd-Column, 1st-Row. value is 789.123.
- jxl.write.Number number = , , 789.123);
- //add defined cell above to sheet instance.
- sheet.addCell(number);
- //add defined all cell above to case.
- book.write();
- //close file case.
- book.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
编译执行后,会在当前位置产生一个Excel文件。二、读取文件
以刚才我们创建的Excel文件为例,做一个简单的读取操作,程序代码如下:
- package JExcelTest.standard;
- import java.io.*;
- import jxl.*;
- publicclass ReadXLS {
- publicstaticvoid main(String[] args) {
- try {
- Workbook book = Workbook.getWorkbook(new File("d:/Test.xls"));
- //get a Sheet object.
- Sheet sheet = book.getSheet();
- //get 1st-Column,1st-Row content.
- Cell cell = sheet.getCell(, );
- String result = cell.getContents();
- System.out.println(result);
- book.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
程序执行结果:test三、修改文件
利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的时候,除了打开文件的方式不同之外,其他操作和创建Excel是一样的。下面的例子是在我们已经生成的Excel文件中添加一个工作表:
修改Excel的类,添加一个工作表
- package JExcelTest.standard;
- import java.io.*;
- import jxl.*;
- import jxl.write.*;
- publicclass UpdateXLS {
- publicstaticvoid main(String[] args) {
- try {
- //get file.
- Workbook wb = Workbook.getWorkbook(new File("d:/Test.xls"));
- //open a copy file(new file), then write content with same content with Test.xls.
- WritableWorkbook book =
- Workbook.createWorkbook(new File("d:/Test.xls"), wb);
- //add a Sheet.
- WritableSheet sheet = book.createSheet();
- sheet.addCell(, , "test2"));
- book.write();
- book.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
一、 数据格式化
在Excel中不涉及复杂的数据类型,能够比较好的处理字串、数字和日期已经能够满足一般的应用。
字串格式化
字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主要由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)
③ 其中
I.指定了字串格式:字体为TIMES,字号16,加粗显示。WritableFont有非常丰富的构造子,供不同情况下使用,jExcelAPI的java-doc中有详细列表,这里不再列出。
II.处代码使用了WritableCellFormat类,这个类非常重要,通过它可以指定单元格的各种属性,后面的单元格格式化中会有更多描述。
III.处使用了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);
三、操作图片
- publicstaticvoid write()throws Exception{
- WritableWorkbook wwb=Workbook.createWorkbook(new File("c:/1.xls"));
- WritableSheet ws=wwb.createSheet();
- File file=new File("C://jbproject//PVS//WebRoot//weekhit//1109496996281.png");
- WritableImage image=, , , ,file);
- ws.addImage(image);
- wwb.write();
- wwb.close();
- }
- String path="c://excel.xls";//Excel文件URL
- InputStream is = new FileInputStream(path);//写入到FileInputStream
- jxl.Workbook wb = Workbook.getWorkbook(is); //得到工作薄
- jxl.Sheet st = wb.getSheet();//得到工作薄中的第一个工作表
- Cell cell=st.getCell(,);//得到工作表的第一个单元格,即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();//创建可写工作表
- Label labelCF=, , "hello");//创建写入位置和内容
- ws.addCell(labelCF);//将Label写入sheet中
- Label的构造函数Label(int x, int y,String aString)xy意同读的时候的xy,aString是写入的内容.
- WritableFont wf = , WritableFont.BOLD, false);//设置写入字体
- WritableCellFormat wcfF = new WritableCellFormat(wf);//设置CellFormat
- Label labelCF=, , "hello");//创建写入位置,内容和格式
- Label的另一构造函数Label(int c, int r, String cont, CellFormat st)可以对写入内容进行格式化,设置字体及其它的属性.
- 现在可以写了
- wwb.write();
- 写完后关闭
- wwb.close();
- 输出流也关闭吧
- os.close;
下面是程序一例:
- 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();
- ;
- ;
- ; k < rs.getMetaData().getColumnCount(); k++) {
- ws.addCell(,rs.getMetaData().getColumnName(k+)));
- }
- while(rs.next()){
- out.println(rs.getMetaData().getColumnCount());
- ; k < rs.getMetaData().getColumnCount(); k++) {
- ws.addCell(,rs.getString(k+)));
- }
- i++;
- }
- wwb.write();
- wwb.close();
- }catch(Exception e){e.printStackTrace();}
- finally{
- rs.close();
- conn.close();
- }
- response.sendRedirect("aaa.xls");
jsp页面查询的数据导出到excel的更多相关文章
- JS 在页面上直接将json数据导出到excel,支持chrome,edge,IE10+,IE9,IE8,Safari,Firefox
JS 在页面上直接将json数据导出到excel,支持chrome,edge,IE10+,IE9,IE8,Safari,Firefox <html> <head> </h ...
- 使用POI把查询到的数据表数据导出到Excel中,一个表一个sheet.最详细!!!
一.需求 我们会遇到开发任务: 经理:小王,你来做一下把数据库里的数据导出到Excel中,一个表是一个sheet,不要一个表一个Excel. 小王:好的,经理.(内心一脸懵逼) 二.前期准备 首先我们 ...
- DataTable数据导出到Excel,并发送到客户端进行下载
本代码实现思路是:页面显示和导出分开,导出的数据和用于页面显示的是同一查询数据方式,所以也是同样的数据,只是在导出数据时从数据库重新捞了一次数据.此导出数据方式会先将数据保存到Excel中,然后将创建 ...
- asp.net将数据导出到excel
本次应用datatable导出,若用gridview(假设gridview设为了分页显示)会出现只导出当前页的情况. protected void btnPrn_Click(object sender ...
- 机房收费系统——在VB中将MSHFlexGrid控件中的数据导出到Excel
机房收费系统中,好多查询的窗体都包含同一个功能:将数据库中查询到的数据显示在MSHFlexGrid控件中,然后再把MSHFlexGrid控件中的数据导出到Excel表格中. 虽然之前做过学生信息管理系 ...
- abp中文件下载,将内存数据导出到Excel并下载
1.数据导出为Excel的Stream using System; using System.Collections.Generic; using System.IO; using Abp.Colle ...
- Delphi 数据导出到Excel
好多办公软件特别是财务软件,都需要配备把数据导出到Excel,下面就来介绍两种数据导出方法 1.ADODB导出查询结果(此方法需要安装Excel) 2.二维表数据导出(根据Excel文件结构生成二进制 ...
- Pl/sql 如何将oracle的表数据导出成excel文件?
oracle将表数据导出成excel文件的方法 1)在SQL窗体上,查询需要导出的数据 --查询数据条件-- ; 结果视图 2)在查询结果的空白处,右键选择Copy to Excel 3) 查看导出e ...
- 大批量数据导出到Excel的实现
在平时的项目中,将数据导出到Excel的需求是很常见的,在此对一些常见的方法做以总结,并提供一种大数据量导出的实现. OLEDB 使用OLEDB可以很方便导出Excel,思路很简单,处理时将Exc ...
随机推荐
- Android SDK目录结构
Android版本下载:从4.0到8.0版本: Android SDK目录结构图: sdk全称:software develop kits 软件开发工具集 add-ons:Google API map ...
- LeetCode135:Candy
题目: There are N children standing in a line. Each child is assigned a rating value. You are giving c ...
- Alwayson 基本概念
1. AD域服务: 存储目录数据并管理用户与域之间的通信,包括用户登录处理.身份验证和目录搜索. 2. AD林:林是域的最大组织单元,一个林可以包括一个或多个域.林中的域之间相互信任(默认). 3. ...
- python的标准库
第三方库放的位置:E:\python\Lib\site-packages 通过命令查询:import sys print (sys.path) 标准库:E:\\python\\lib 第三方库的上一级 ...
- 学习sqlserve的一些笔记
创建表: create table 表名 { //定义列名 id ,) primary key,//自动编号:从1开始每次增长1,约束:主键约束 name ) not null //非空约束 } 表数 ...
- 解决EF没有生成字段和表说明
找了很多资料,终于找到一篇真正能解决ef生成字段说明,注释的文章,收藏不了,于是转载 本文章为转载,原文地址 项目中使用了EF框架,使用的是Database-First方式,因为数据库已经存在,所以采 ...
- The rapid development platform upgrade, leave the time to yourself, the work is lost to the soft platform
Bring me back to your home. Please leave your work behind! Soft agile development framework V7.0 new ...
- day 82 URL分发
一 .admin 流程 (1) 启动 autodiscover_modules('admin', register_to=site) (2) 注册 单例模式 admin.site=AdminSite( ...
- Day 20 Time 模块.
from collections import namedtuplePoint =namedtuple("Point",["x","y"]) ...
- iOS推送功能极光推送的介绍与实现
1.个人整理操作流程 2.官方使用说明流程 2018iOS极光推送完整流程 极光推送官网