搜档网
当前位置:搜档网 › java 导出excel 增量写入同一sheet

java 导出excel 增量写入同一sheet

java 导出excel 增量写入同一sheet
java 导出excel 增量写入同一sheet

代码:

response.setCharacterEncoding("utf8");

int totalcount=agentService.queryCount(map);//查询记录总数

try {

OutputStream outputStream = response.getOutputStream();

String title="影楼充值数据.xls";//excel文件名

byte[] content=findExcelData(totalcount,map,"影楼充值数据");//转字节流 totalcount 总数; map 参数;最后一个是sheet名称称

response.setContentType("application/x-msdownload");

response.setContentLength(content.length);

response.setHeader("Content-Disposition", "attachment;filename="+ new String(title.getBytes("utf-8"), "ISO-8859-1"));

outputStream.write(content);

outputStream.flush();

outputStream.close();

}catch (IOException e) {

LOGGER.error("IOException:",

e.fillInStackTrace());

}

findExcelData 方法

public byte[] findExcelData(int count,Map map,String title) { int start=0;

int limit=2000;//一个sheet存60000条数据,超过6W条新建新sheet

List list = null;

ByteArrayOutputStream out = new ByteArrayOutputStream();

ExcelWriter writer = null;

try {

writer = new ExcelWriter(out);

ExcelWriter.Sheet sheetAct = null;

String [] excelHead= {"影楼名称","时间","价格","套数","类型","代理商","套系名称"};

int sizes=(count/limit)+(count%limit>0?1:0);

for(int j=0;j

//大批量数据采用分页写入数据

map.put("start", j*limit);

map.put("limit", limit);

if(j%30==0){

int num=j/30+1;

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 list,ExcelWriter.Sheet sheetAct){

StudioSeriesPrice detail=null;

/*拼装excel内容*/

for(int i=0;i

detail=list.get(i);

sheetAct.getOrCreateCell((start+i + 1), 0).setCellStyle(sheetAct.addStyle());

sheetAct.getOrCreateCell((start+i + 1), 0).setCellValue(detail.getCompany());

sheetAct.getOrCreateCell((start+i + 1), 1).setCellStyle(sheetAct.addStyle());

sheetAct.getOrCreateCell((start+i + 1), 1).setCellValue(detail.getCreatetime());

sheetAct.getOrCreateCell((start+i + 1), 2).setCellStyle(sheetAct.addStyle());

sheetAct.getOrCreateCell((start+i + 1), 2).setCellValue(detail.getPrice());

sheetAct.getOrCreateCell((start+i + 1), 3).setCellStyle(sheetAct.addStyle());

sheetAct.getOrCreateCell((start+i + 1), 3).setCellValue(detail.getNum());

sheetAct.getOrCreateCell((start+i + 1), 4).setCellStyle(sheetAct.addStyle());

sheetAct.getOrCreateCell((start+i + 1), 4).setCellValue(detail.getTypename());

sheetAct.getOrCreateCell((start+i + 1), 5).setCellStyle(sheetAct.addStyle());

sheetAct.getOrCreateCell((start+i + 1), 5).setCellValue(detail.getAgentName());

sheetAct.getOrCreateCell((start+i + 1), 6).setCellStyle(sheetAct.addStyle());

sheetAct.getOrCreateCell((start+i + 1), 6).setCellValue(detail.getPricename());

}

}

/**

*

* @param sheetAct

* @param writer

* @param excelHead

* @param title

* @return

*/

private ExcelWriter.Sheet createExcelHead( ExcelWriter.Sheet sheetAct,ExcelWriter writer,String [] excelHead,String title){ sheetAct = writer.getOrCreateSheet(title);

/*拼装excel头部*/

for(int i=0;i

sheetAct.getOrCreateCell(0,

i).setCellStyle(sheetAct.addStyle());

sheetAct.setColumnWidth(i, 6000);

sheetAct.getOrCreateCell(0,

i).setCellValue(excelHead[i]);

}

return sheetAct;

}

帮助类:

package com.kerui.utils;

import java.io.IOException;

import java.io.OutputStream;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

import https://www.sodocs.net/doc/4016823798.html,mons.io.IOUtils;

import https://www.sodocs.net/doc/4016823798.html,ermodel.HSSFCellStyle;

import https://www.sodocs.net/doc/4016823798.html,ermodel.CellStyle;

import https://www.sodocs.net/doc/4016823798.html,ermodel.DataFormat;

import https://www.sodocs.net/doc/4016823798.html,ermodel.Row;

import https://www.sodocs.net/doc/4016823798.html,ermodel.Workbook;

import org.apache.poi.ss.util.CellRangeAddress;

import https://www.sodocs.net/doc/4016823798.html,ermodel.XSSFWorkbook;

public final class ExcelWriter {

public static final class Cell {

private Workbook wb;

private https://www.sodocs.net/doc/4016823798.html,ermodel.Cell target;

private Cell(Workbook wb, https://www.sodocs.net/doc/4016823798.html,ermodel.Cell cell) {

this.wb = wb;

this.target = cell;

}

public void setCellValue(String value) {

this.target.setCellValue(value);

}

public void setCellValue(Date value) {

if (null == value) {

this.setCellValue("未设置");

return;

}

CellStyle style = this.wb.createCellStyle();

DataFormat format = wb.createDataFormat();

style.setDataFormat(format.getFormat("yyyy/m/d

hh:mm:ss"));

this.target.setCellStyle(style);

this.target.setCellValue(value);

}

public void setCellValue(double value) {

CellStyle style = this.wb.createCellStyle();

DataFormat format = wb.createDataFormat();

style.setDataFormat(format.getFormat("###,##0"));

this.target.setCellStyle(style);

this.target.setCellValue(value);

}

public void setCellStyle(CellStyle style){

this.target.setCellStyle(style);

}

}

public static final class Sheet{

private Workbook wb;

private https://www.sodocs.net/doc/4016823798.html,ermodel.Sheet sheet;

private Sheet(Workbook wb, https://www.sodocs.net/doc/4016823798.html,ermodel.Sheet sheet) {

this.sheet = sheet;

this.wb = wb;

}

public void setColumnWidth(int column, int width){

sheet.setColumnWidth(column, width);

}

public Cell getOrCreateCell(int rowBasedZero, int cellBasedZero) {

Row row = this.sheet.getRow(rowBasedZero);

if (null == row) {

row = this.sheet.createRow(rowBasedZero);

}

return new Cell(this.wb, row.getCell(cellBasedZero, Row.CREATE_NULL_AS_BLANK));

}

//合并单元格

public void mergedRegion(int intFirstRow, int intLastRow, int intFirstColumn, int intLastColumn){

this.sheet.addMergedRegion(new

CellRangeAddress(intFirstRow, intLastRow, intFirstColumn, intLastColumn));

}

//添加居中的样式

public CellStyle addStyle(){

CellStyle style = wb.createCellStyle();

style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直

style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平return style;

}

}

private Map sheetMap= new HashMap();

private OutputStream out;

private Workbook wb;

public ExcelWriter(OutputStream out) {

this.out = out;

wb = new XSSFWorkbook();

}

public Sheet getOrCreateSheet(String sheet) {

Sheet sheet1 = this.sheetMap.get(sheet);

if (null != sheet1) {

return sheet1;

}

https://www.sodocs.net/doc/4016823798.html,ermodel.Sheet xlsSheet = this.wb.getSheet(sheet);

if (null == xlsSheet) {

xlsSheet = this.wb.createSheet(sheet);

}

Sheet obj = new Sheet(this.wb, xlsSheet);

this.sheetMap.put(sheet, obj);

return obj;

}

public void write() throws IOException {

this.wb.write(this.out);

}

public void close() {

this.sheetMap.clear();

IOUtils.closeQuietly(this.out);

}

}

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.sodocs.net/doc/4016823798.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.sodocs.net/doc/4016823798.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++) {

Excel数据处理技巧:PowerQuery插件一键生成报表.doc

Excel 数据处理技巧:Power Query 插件一键生成报表 每个月月底,财务小王都要汇总全国各地区的销售数据做数 据分析。之前他采用的方法就是把各个工作表的数据复制再 粘贴到一个工作表里,然后进行数据透视表分析。可是全国 有那么多城市,复制粘贴太费时间,而且如果中间数据有变 动怎么办?现在不用担心了,今天给大家介绍一个EXCEL 很好用的技能 Power Query,帮助大家实现动态获取多工作表 数据。 一、初识 Power Query 如下图,在这个工作簿里,各个工作表分别列举了全国各个 地区的销售数据,这里为了举例,只列举四个城市的基本数 据。 首先,打开数据选项卡下,在[ 获取与转换 ]组中,新建查询---从文件 --- 从工作簿。

Power Query 本来是 EXCEL 的一个插件,在EXCEL2016 以前版本都需要另外下载,但是在 Excel2016 中,这项技能已经内置在数据选项卡 [ 获取与转换 ] 组中,以供大家直接使用。由此 足以可见 Power Query 的重要性。这里就推荐大家升级到最新的EXCEL 版本, EXCEL2016 以前的版本呢,大家可以自行百度下载安装这个插件。 在弹出的窗口中找到工作簿,导入。 在弹出的导航器界面,勾选“选择多项”,把这几个需要合 并的工作表全部选中,再选择右下角的“编辑”。 这样就进入了POWER QUERY 编辑器界面。 这个界面就是我们进行 Power Query 操作的主要界面,可以看到,上面的菜单栏跟 EXCEL 菜单栏很相似,左侧的查询窗口 显示的是打开的四个工作表,右侧查询设置界面是类似于 PS 一样的可以进行操作的记录和返回。中间区域则显示了表格的 内容。 二、使用 Power Query 汇总数据 点击开始选项卡下[ 组合 ] 组里面的追加查询。

【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 list,ExcelWriter.Sheet sheetAct){ StudioSeriesPrice detail=null ;/*拼装excel 内容*/ for (int i=0;i

Java数据导入导出Excel

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.sodocs.net/doc/4016823798.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.sodocs.net/doc/4016823798.html,ermodel.HSSFCell; import https://www.sodocs.net/doc/4016823798.html,ermodel.HSSFCellStyle; import https://www.sodocs.net/doc/4016823798.html,ermodel.HSSFRow; import https://www.sodocs.net/doc/4016823798.html,ermodel.HSSFSheet; import https://www.sodocs.net/doc/4016823798.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导入导出

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.sodocs.net/doc/4016823798.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.sodocs.net/doc/4016823798.html,ermodel.HSSFCell; import https://www.sodocs.net/doc/4016823798.html,ermodel.HSSFCellStyle; import https://www.sodocs.net/doc/4016823798.html,ermodel.HSSFRow; import https://www.sodocs.net/doc/4016823798.html,ermodel.HSSFSheet; import https://www.sodocs.net/doc/4016823798.html,ermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem;

java导出excel案例

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();

Excel自动生成员工简历表

Excel自动生成员工简历表 我们可以用Excel自动提取“员工基本情况登记表”中的信息,生成并打印员工简历表……[编者]前面我们介绍了《Excel常用函数的功能和使用方法》,现在我们学以致用,介绍一系列用这些函数实现的数据统计实例解析。今天我们介绍用Excel自动提取“员工基本情况登记表”中的信息,生成并打印员工简历表。 朋友在做人事工作,常常要打印指定员工的简历表,由于“员工基本情况登记表”是用Excel制作的,我们可以用Excel来自动提取“员工基本情况登记表”中的信息,生成并打印员工简历表,十分方便。文章末尾提供.xls文件供大家下载参考。 本文涉及的Excel函数如下,点击可查看详细信息: 1、IF (Logical,Value_if_true,Value_if_false) 2、ISERROR (value) 3、VLOOKUP (lookup_value,table_array,col_index_num,range_lookup) 应用过程: 1、启动Excel2003(其他版本请仿照操作),打开“员工基本情况登记表”工作簿(如图1)。 2、切换到Sheet2工作表中,仿照图2的样式制作好简历表的框架。

3、分别选中需要填写内容的单元格(除B2单元格外,如D2、F2等),输入公式:=IF(ISERROR(VLOOKUP(B2,简历!A3:K12,*,FALSE)),"",VLOOKUP(B2,简 历!A3:K12,*,FALSE))。 注意:①上述公式中的“*”号,表示“简历”表中,相应的数据所对应的列数:如“出生时间”在第“5”列(参见图1),在J2单元格中输入公式时,将“*”修改为“5”,即: =IF(ISERROR(VLOOKUP(B2,简历!A3:K12,5,FALSE)),"",VLOOKUP(B2,简 历!A3:K12,5,FALSE))。 ②公式的含义是:如果公式“VLOOKUP(B2,简历!A3:K12,5,FALSE)”返回错误(ISERROR),则有显示“空”(""),反之显示公式的返回结果。 4、选中J2单元格,再按住Ctrl键,点击C3单元格,同时选中J2和C3单元格,执行“格式→单元格”命令,打开“单元格格式”对话框(如图3),在“数字”标签中,选中“分类”下面的“日期”选项,然后在右侧选定一种日期类型,确定返回。

JAVA导出WORD与EXCEL

package ais.mytest.web; /** * 功能:主要实现数据导出Excel和Word功能* 日期:2008-2-28 */ import ais.basic.service.BasicUtil; import https://www.sodocs.net/doc/4016823798.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.sodocs.net/doc/4016823798.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;

java批量导出excel格式数据(含每条数据的附件)

,批量导出数据到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.sodocs.net/doc/4016823798.html,ermodel.HSSFCell; import https://www.sodocs.net/doc/4016823798.html,ermodel.HSSFCellStyle; import https://www.sodocs.net/doc/4016823798.html,ermodel.HSSFFont; import https://www.sodocs.net/doc/4016823798.html,ermodel.HSSFRichTextString;

java实现导出excel

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格式。

poi导出excel文件并提示下载

一、导入jar包: poi-3.0.1-FINAL-20070705.jar; poi-3.0-alpha1-20050704.jar; 二、获取List类型数据 三、利用poi生成excel文件 /** * 生成excel文件 * @param tjxxs 写入excel的List数据 * @param xlsName 文件名称 * @param sheetName 内容标题 * @return int */ @SuppressWarnings("deprecation") public int resultSetToExcel(List tjxxs,String xlsName,String sheetName) throws Exception{ if(tjxxs == null || "".equals(tjxxs)){ return 0; } HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet(); workbook.setSheetName(0,sheetName,HSSFWorkbook.ENCODIN G_UTF_16); HSSFRow row= sheet.createRow((short)0);; HSSFCell cell; //写入各个字段的名称 // for(int i=1;i<=4;i++){ cell = row.createCell((short)(0)); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("序号"); cell = row.createCell((short)(1)); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("工作控制号");

使用VBA实现EXCEL批量生成图表并发送

使用EXCEL VBA实现图表批量生成并发送 业务需求 office word2007的邮件合并功能是财务、文秘类工作经常使用的功能之一,该功能可以生成包含可变内容的批量邮件文档,广泛适用于发送工资条、成绩单、通知书等,这里不再赘述。笔者所在单位最近为加强员工考核管理工作力度,提出了一个类似于邮件合并功能,但使用邮件合并功能却不能实现的需求,下面用文字结合图表描述: 1.将员工百分制考核结果批量以图表(折线图)反应出来,每一条员工数据均生成一个类似于下图右侧的图表。 (图1) 2.使用类似于邮件合并方式实现员工考核图表的批量发送,将生成的图表插入邮件正文分别发送给每位员工。 (图2) 解决思路 思路一:使用https://www.sodocs.net/doc/4016823798.html,+Sqlserver(或ACCESS等,下同)开发一个网站,设置好权限,允许员工查看自己的反馈结果。 思路评价:可行,但达不到设想中的推送效果。 思路二:使用https://www.sodocs.net/doc/4016823798.html,+Sqlserver开发一个系统,内置图表模板,图表基于固定区域数据生成;为每位员工复制一份作为报表,将该员工数据填写到固定区域;将每位员工的报表作为附件发送给每位员工。 思路评价:可行,但开发量大,效果不直观。

思路三:使用https://www.sodocs.net/doc/4016823798.html,+Sqlserver开发一个系统,使用VS2008版以上自带控件或第三方控件如dotnetcharting,为每位员工生成一张图片,将该图片插入邮件发送给每位员工。 思路评价:可行,但开发量大。 思路四:使用excel VBA为每位员工生成一张图片,将该图片插入邮件发送给每位员工。这个思路一开始并没有列入考虑范围,主要原因是当时认为在excel中为每位员工生成一个图表是不可能的,即使能生成也没办法脱离excel工作薄,分别和员工对应起来并发送。最终采用本思路,是缘于笔者发现VBA可以非常容易地把图表导出为图片。 思路评价:可行,事实证明,开发量比想象的小很多。 开发环境准备 1.在运行该程序的电脑上安装Office Excel2007或以上版本; 2.正确配置OUTLOOK使之能够正常发送邮件; 3.打开Excel2007新建工作薄,把测试数据输入到sheet1工作表,把工作薄保存到工作目录(为方便后文描述,这里的目录设为“E:\excel-vba”),在该目录下新建“imgfile”子目录,以存放图片。示例数据如下: 注意:附件路径是个公式:=concatenate(“E:\excel-vba\imgfile\”,A1,”.jpg”) 含义是图片以员工姓名命名,这意味着员工姓名不可重复。 4.完成宏安全设置,如图所示: (图3) 实现过程 这个业务需求实现包含两个难点,一是为每位员工生成对应的图片;二是批量发送带图片的邮件。基于这两点,笔者在excel工作薄中设置了两个按钮,编写了两段代码,分别对应上述两个问题。事实上,这两段代码完全可以整合到一起,这里为了方便理解,还是分开介绍。笔者采取代码中加入注释的方式帮助大家理解代码含义。

JAVA的poi实现模版导出excel(带图片)

下面是本人使用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.sodocs.net/doc/4016823798.html,ermodel.HSSFCell; import https://www.sodocs.net/doc/4016823798.html,ermodel.HSSFClientAnchor; import https://www.sodocs.net/doc/4016823798.html,ermodel.HSSFPatriarch; import https://www.sodocs.net/doc/4016823798.html,ermodel.HSSFRow; import https://www.sodocs.net/doc/4016823798.html,ermodel.HSSFSheet; import https://www.sodocs.net/doc/4016823798.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 {

java操作excel(创建excel、生成工作表并添加数据)

package cn.zd; import java.io.File; import jxl.Workbook; import https://www.sodocs.net/doc/4016823798.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);

相关主题