Java操作Excel

Java操作Excel
Java操作Excel

原帖地址:https://www.360docs.net/doc/cf17136193.html,/lgq_0714/archive/2009/09/23/4582500.aspx

一.POI简介

Jakarta POI 是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API

目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。

二.HSSF概况

HSSF 是Horrible SpreadSheet Format的缩写,也即“讨厌的电子表格格式”。也许HSSF的名字有点滑稽,就本质而言它是一个非常严肃、正规的API。通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。

HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。前者很好理解,后者比较抽象,但操作效率要高得多。

三.开始编码

1 .准备工作

要求:JDK 1.4+POI开发包

可以到https://www.360docs.net/doc/cf17136193.html,/dyn/closer.cgi/jakarta/poi/ 最新的POI工具包

2 .EXCEL 结构

HSSFWorkbook excell 文档对象介绍

HSSFSheet excell的表单

HSSFRow excell的行

HSSFCell excell的格子单元

HSSFFont excell字体

HSSFName 名称

HSSFDataFormat 日期格式

在poi1.7中才有以下2项:

HSSFHeader sheet头

HSSFFooter sheet尾

和这个样式

HSSFCellStyle cell样式

辅助操作包括

HSSFDateUtil 日期

HSSFPrintSetup 打印

HSSFErrorConstants 错误信息表

3 .具体用法实例(采用usermodel )

如何读Excel

读取Excel文件时,首先生成一个POIFSFileSystem对象,由POIFSFileSystem对象构造一个HSSFWorkbook,该HSSFWorkbook对象就代表了Excel文档。下面代码读取上面生成的Excel文件写入的消息字串:

Java代码

POIFSFileSystem fs=newPOIFSFileSystem(new FileInputStream("d:\test.xls"));

HSSFWorkbook wb = new HSSFWorkbook(fs);

} catch (IOException e) {

e.printStackTrace();

}

HSSFSheet sheet = wb.getSheetAt(0);

HSSFRow row = sheet.getRow(0);

HSSFCell cell = row.getCell((short) 0);

String msg = cell.getStringCellValue();

如何写excel,

将excel的第一个表单第一行的第一个单元格的值写成“a test”。

Java代码

POIFSFileSystem fs =new POIFSFileSystem(new FileInputStream("workbook.xls"));

HSSFWorkbook wb = new HSSFWorkbook(fs);

HSSFSheet sheet = wb.getSheetAt(0);

HSSFRow row = sheet.getRow(0);

HSSFCell cell = row.getCell((short)0);

cell.setCellValue("a test");

// Write the output to a file

FileOutputStream fileOut = new FileOutputStream("workbook.xls");

wb.write(fileOut);

fileOut.close();

4 .可参考文档

POI 主页:https://www.360docs.net/doc/cf17136193.html,/poi/ ,

初学者如何快速上手使用POI HSSF

https://www.360docs.net/doc/cf17136193.html,/poi/hssf/quick-guide.html 。

代码例子https://www.360docs.net/doc/cf17136193.html,/user1/6749/archives/2005/18347.html

里面有很多例子代码,可以很方便上手。

POI的中级应用

1、遍历workbook

Java代码

// load源文件

POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filePath)); HSSFWorkbook wb = new HSSFWorkbook(fs);

for (int i = 0; i < wb.getNumberOfSheets(); i++) {

HSSFSheet sheet = wb.getSheetAt(i);

for (int i = sheet.getFirstRowNum(); i < sheet.getLastRowNum(); i ++) {

HSSFRow row = sheet.getRow(i);

if (row != null) {

。。。操作}

}

}

// 目标文件

FileOutputStream fos = new FileOutputStream(objectPath);

//写文件

swb.write(fos);

fos.close();

2、得到列和单元格

代码

HSSFRow row = sheet.getRow(i);

HSSFCell cell = row.getCell((short) j);

3、设置sheet名称和单元格内容为中文

代码

wb.setSheetName(n, "中文",HSSFCell.ENCODING_UTF_16);

cell.setEncoding((short) 1);

cell.setCellValue("中文");

4、单元格内容为公式或数值,可以这样读写

代码

cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);

cell.getNumericCellValue()

5、设置列宽、行高

代码

sheet.setColumnWidth((short)column,(short)width);

row.setHeight((short)height);

6、添加区域,合并单元格

代码

Region region = new Region((short)rowFrom,(short)columnFrom,(short)rowTo,(short)columnTo); sheet.addMergedRegion(region);

//得到所有区域

sheet.getNumMergedRegions()

7、常用方法

根据单元格不同属性返回字符串数值

Java代码

public String getCellStringValue(HSSFCell cell) {

String cellValue = "";

switch (cell.getCellType()) {

case HSSFCell.CELL_TYPE_STRING:

cellValue = cell.getStringCellValue();

if(cellValue.trim().equals("")||cellValue.trim().length()<=0)

cellValue=" ";

break;

case HSSFCell.CELL_TYPE_NUMERIC:

cellValue = String.valueOf(cell.getNumericCellValue());

break;

case HSSFCell.CELL_TYPE_FORMULA:

cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);

cellValue = String.valueOf(cell.getNumericCellValue());

break;

case HSSFCell.CELL_TYPE_BLANK:

cellValue=" ";

break;

case HSSFCell.CELL_TYPE_BOOLEAN:

break;

case HSSFCell.CELL_TYPE_ERROR:

break;

default:

break;

}

return cellValue;

}

8、常用单元格边框格式

虚线HSSFCellStyle.BORDER_DOTTED

实线HSSFCellStyle.BORDER_THIN

代码

Java代码

public static HSSFCellStyle getCellStyle(short type)

{

HSSFWorkbook wb = new HSSFWorkbook();

HSSFCellStyle style = wb.createCellStyle();

style.setBorderBottom(type);//下边框

style.setBorderLeft(type);//左边框

style.setBorderRight(type);//右边框

style.setBorderTop(type);//上边框

return style;

}

9、设置字体和内容位置

Java代码

HSSFFont f = wb.createFont();

f.setFontHeightInPoints((short) 11);//字号

f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);//加粗

style.setFont(f);

style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中

style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中

style.setRotation(short rotation);//单元格内容的旋转的角度

HSSFDataFormat df = wb.createDataFormat();

style1.setDataFormat(df.getFormat("0.00%"));// 设置单元格数据格式

cell.setCellFormula(string);//给单元格设公式

style.setRotation(short rotation);//单元格内容的旋转的角度

cell.setCellStyle(style);

10、插入图片

论坛里看到的--------------------------------------------------------------------------------------------------------

Java代码

//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray

ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();

BufferedImage bufferImg = ImageIO.read(new File("ok.jpg"));

ImageIO.write(bufferImg,"jpg",byteArrayOut);

//读进一个excel模版

FileInputStream fos = new FileInputStream(filePathName+"/stencil.xlt");

fs = new POIFSFileSystem(fos);

//创建一个工作薄

HSSFWorkbook wb = new HSSFWorkbook(fs);

HSSFSheet sheet = wb.getSheetAt(0);

HSSFPatriarch patriarch = sheet.createDrawingPatriarch();

HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,1023,255,(short) 0,0,(short)10,10); patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_ TYPE_JPEG));

11、设置列自动换行

HSSFCellStyle cellStyle = workbook.createCellStyle();

cellStyle.setWrapText(true);

sheet.setDefaultColumnStyle((short)0, cellStyle);

设置列的宽度

sheet.setColumnWidth((short)0,(short)9000);

sheet.setDefaultColumnStyle((short)0, cellStyle);

sheet.setDefaultColumnWidth((short)70);冲突

只会换行不会设置列宽

单元格拷贝示例:

Java代码

package testpoi;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFCell;

import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFRow;

import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFSheet;

import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFWorkbook;

import org.apache.poi.hssf.util.Region;

import org.apache.poi.poifs.filesystem.POIFSFileSystem;

/**

* 将某SHEET页中的某几行复制到某SHEET页的某几行中。抱括被合并了的单元格。 */

public class RowCopy {

/**

* @param args

* @throws IOException

* @throws FileNotFoundException

*/

@SuppressWarnings("deprecation")

public static void main(String[] args) {

try {

POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(

"d:\\exlsample.xls"));

HSSFWorkbook wb = new HSSFWorkbook(fs);

// source为源sheet 页,target为目标sheet页

copyRows(wb, "source", "target", 5, 6, 20);

FileOutputStream fileOut = new FileOutputStream("d:\\exlsample.xls");

wb.write(fileOut);

fileOut.flush();

fileOut.close();

System.out.println("Operation finished");

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* @param wb HSSFWorkbook

* @param pSourceSheetName 源sheet页名称

* @param pTargetSheetName 目标sheet页名称

* @param pStartRow 源sheet页中的起始行

* @param pEndRow 源sheet页中的结束行

* @param pPosition 目标sheet页中的开始行

*/

public static void copyRows(HSSFWorkbook wb, String pSourceSheetName, String pTargetSheetName, int intStartRow, int intEndRow, int intPosition) { // EXECL中的行是从1开始的,而POI中是从0开始的,所以这里要减1. int pStartRow = intStartRow - 1;

int pEndRow = intEndRow - 1;

int pPosition = intPosition - 1;

HSSFRow sourceRow = null;

HSSFRow targetRow = null;

HSSFCell sourceCell = null;

HSSFCell targetCell = null;

HSSFSheet sourceSheet = null;

HSSFSheet targetSheet = null;

Region region = null;

int cType;

int i;

int j;

int targetRowFrom;

int targetRowTo;

if ((pStartRow == -1) || (pEndRow == -1)) {

return;

}

sourceSheet = wb.getSheet(pSourceSheetName); targetSheet = wb.getSheet(pTargetSheetName); System.out.println(sourceSheet.getNumMergedRegions()); // 拷贝合并的单元格

for (i = 0; i < sourceSheet.getNumMergedRegions(); i++) { region = sourceSheet.getMergedRegionAt(i);

if ((region.getRowFrom() >= pStartRow)

&& (region.getRowTo() <= pEndRow)) {

targetRowFrom = region.getRowFrom() - pStartRow + pPosition; targetRowTo = region.getRowTo() - pStartRow + pPosition; region.setRowFrom(targetRowFrom);

region.setRowTo(targetRowTo);

targetSheet.addMergedRegion(region);

}

}

// 设置列宽

for (i = pStartRow; i <= pEndRow; i++) {

sourceRow = sourceSheet.getRow(i);

if (sourceRow != null) {

for (j = sourceRow.getLastCellNum(); j > sourceRow

.getFirstCellNum(); j--) {

targetSheet

.setColumnWidth(j, sourceSheet.getColumnWidth(j)); targetSheet.setColumnHidden(j, false);

}

break;

}

}

// 拷贝行并填充数据

for (; i <= pEndRow; i++) {

sourceRow = sourceSheet.getRow(i);

if (sourceRow == null) {

continue;

}

targetRow = targetSheet.createRow(i - pStartRow + pPosition); targetRow.setHeight(sourceRow.getHeight());

for (j = sourceRow.getFirstCellNum(); j < sourceRow

.getPhysicalNumberOfCells(); j++) {

sourceCell = sourceRow.getCell(j);

if (sourceCell == null) {

continue;

}

targetCell = targetRow.createCell(j);

targetCell.setCellStyle(sourceCell.getCellStyle());

cType = sourceCell.getCellType();

targetCell.setCellType(cType);

switch (cType) {

case HSSFCell.CELL_TYPE_BOOLEAN:

targetCell.setCellValue(sourceCell.getBooleanCellValue()); System.out.println("--------TYPE_BOOLEAN:"

+ targetCell.getBooleanCellValue());

break;

case HSSFCell.CELL_TYPE_ERROR:

targetCell

.setCellErrorValue(sourceCell.getErrorCellValue()); System.out.println("--------TYPE_ERROR:"

+ targetCell.getErrorCellValue());

break;

case HSSFCell.CELL_TYPE_FORMULA:

// parseFormula这个函数的用途在后面说明

targetCell.setCellFormula(parseFormula(sourceCell

.getCellFormula()));

System.out.println("--------TYPE_FORMULA:"

+ targetCell.getCellFormula());

break;

case HSSFCell.CELL_TYPE_NUMERIC:

targetCell.setCellValue(sourceCell.getNumericCellValue()); System.out.println("--------TYPE_NUMERIC:"

+ targetCell.getNumericCellValue());

break;

case HSSFCell.CELL_TYPE_STRING:

targetCell

.setCellValue(sourceCell.getRichStringCellValue());

System.out.println("--------TYPE_STRING:" + i

+ targetCell.getRichStringCellValue());

break;

}

}

}

}

/**

* POI对Excel公式的支持是相当好的,但是有一个问题,如果公式里面的函数不带参数,比如now()或today(),

* 那么你通过getCellFormula()取出来的值就是now(ATTR(semiVolatile))和 today(ATTR(semiVolatile)),

* 这样的值写入Excel是会出错的,这也是我上面copyRow的函数在写入公式前要调用parseFormula的原因,

* parseFormula这个函数的功能很简单,就是把ATTR(semiVolatile)删掉。

* @param pPOIFormula

* @return

*/

private static String parseFormula(String pPOIFormula) {

final String cstReplaceString = "ATTR(semiVolatile)"; //$NON-NLS-1$

StringBuffer result = null;

int index;

result = new StringBuffer();

index = pPOIFormula.indexOf(cstReplaceString); if (index >= 0) {

result.append(pPOIFormula.substring(0, index)); result.append(pPOIFormula.substring(index

+ cstReplaceString.length()));

} else {

result.append(pPOIFormula);

}

return result.toString();

}

}

Java实现Excel数据导入和导出的研究与应用

Java实现Excel数据导入导出的研究与应用 王晶晶 北京邮电大学网络教育学院(100088) E-mail:bolalisi_double@https://www.360docs.net/doc/cf17136193.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用poi读取excel文件

Java用poi读取excel文件 POI 是Apache的一个开源的工具包,可以在Apache的官网下载到jar包。如下为简单示例: package POI; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFCell; import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFRow; import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFSheet; import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class ReadExcel { public static void main(String[] args) { try { InputStream input = new FileInputStream("D:\\test.xls"); POIFSFileSystem fs = new POIFSFileSystem(input); HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFSheet sheet = wb.getSheetAt(0); // Iterate over each row in the sheet Iterator rows = sheet.rowIterator();

java的POI操作Excel文件

java的POI操作Excel文件(2) 现在我要做的东西基本完成啦,我把这段时间使用POI的一些心得总结出来,希望能对和我遇到相同问题的朋友有所帮助,至于POI基本的使用方法,自己去看文档吧。 1、设置分页符的bug POI里的HSSFSheet类提供了setRowBreak方法可以设置Sheet的分页符。 Bug:如果你要设置分页符的Sheet是本来就有的,并且你没有在里面插入过分页符,那么调用setRowBreak时POI会抛出空指针的异常。 解决方法:在Excel里给这个sheet插入一个分页符,用POI打开后再把它删掉,然后你就可以随意插入分页符了。 如果sheet是由POI生成的则没有这个问题。我跟踪了setRowBreak的源代码,发现是Sheet.Java下的PageBreakRecord rowBreaks这个变量在搞鬼,如果Sheet里原来没有分页符,开发这个模块的那位兄台忘了为这个对象new实例,所以只能我们先手工给Excel插入一个分页符来触发POI为rowBreaks创建实例。 2、如何拷贝行 我在https://www.360docs.net/doc/cf17136193.html,的POI用户论坛翻遍了每个相关的帖子,找遍了api,也没看到一个拷贝行的方法,没办法,只能自己写: //注:this.fWorkbook是一个HSSHWorkbook,请自行在外部new public void copyRows (String pSourceSheetName, String pTargetSheetName, int pStartRow, int pEndRow, int pPosition) { HSSFRow sourceRow = null; HSSFRow targetRow = null; HSSFCell sourceCell = null; HSSFCell targetCell = null; HSSFSheet sourceSheet = null; HSSFSheet targetSheet = null; Region region = null; int cType; int i; short j; int targetRowFrom; int targetRowTo;

java读取和写入EXCEL文件

java读取和写入Excel文件 在Java中读取Excel文件的内容 在这里,我使用的是一个叫Java Excel API的东西,类似的还有jakarta的POI,不过感觉那个太复杂了点儿。而且jxl对中文的支持相当的好,至少我在用的过程中一点问题没出。 一、下载地址 [url]https://www.360docs.net/doc/cf17136193.html,/jexcelapi/[/url] 二、特性 可以读取Excel 95, 97, 2000文件 可以读或写Excel 97及其以后版本的的公式(不过我发现好像有bug) 生成Excel 97格式的电子表格 支持字体、数字和日期格式化 支持单元格的颜色和阴影 可以编辑现有的文件 三、读文件 //声明一下,记得后面要关闭哦。。 Workbook workbook = null; try { workbook = Workbook.getWorkbook(new File("d:\\temp\\TestRead.xls")); } catch (Exception e) { throw new Exception("file to import not found!"); } Sheet sheet = workbook.getSheet(0); Cell cell = null; int columnCount=3; int rowCount=sheet.getRows(); for (int i = 0; i

Java读取Excel文件的几种方法

Java读取Excel文件的几种方法 最近单位有个项目需要读取excel文件的内容,特别对java读取excel文件的方法做了一点学习,也为了其他人以后能更简单地开发,少走弯路,特写此文,以下程序经过了我的测试,可以保证程序可用,如果你照搬都不行,可能是你的环境有问题。 读取excel文件的常用开源免费方法有以下几种: JDBC-ODBC Excel Driver jxl.jar jcom.jar poi.jar 下面分别对这几种方法分别进行探讨 1、JDBC-ODBC Excel Driver 这种方法是将excel看成是数据库进行操作,使用SQL Select语句即可 查询excel表格。优点是:不需要第三方的jar包。 如下表样 首先在控制面板进行数据源ODBC登记 具体方法如下:

下面就是代码了。 package xuzhe;

import java.io.*; import java.sql.*; //java xuzhe.ExcelJDBC public class ExcelJDBC { public static void main(String[] args) throws SQLException{ Connection con = null; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection( "jdbc:odbc:ExcelJDBC" ); Statement st = con.createStatement(); ResultSet rs = st.executeQuery( "Select * from [Sheet1$]" ); ResultSetMetaData rsmd = rs.getMetaData(); int numberOfColumns = rsmd.getColumnCount(); System.out.println ("表格列数"+numberOfColumns ); System.out.println( rsmd.getColumnName(1)+ "," + rsmd.getColumnName(2) + "," + rsmd.getColumnName(3)); while (rs.next()) { for (int i = 1; i <= numberOfColumns; i++) { if (i > 1) System.out.print(", "); String columnValue = rs.getString(i); System.out.print(columnValue); } System.out.println(""); } rs.close(); st.close(); } catch(Exception ex) { System.err.print("Exception: "); System.err.println(ex.getMessage()); } finally { con.close(); } } } 执行结果如下:

用JAVA Excel API 实现对Excel表格的读写更新

http:https://www.360docs.net/doc/cf17136193.html, package myexceltest; import jxl.*; import Java.io.*; import jxl.write.*; /** * java读取Excel表格,拷贝、更新Excel工作薄 * Description: Java开发人员可以读取Excel文件的内容,更新Excel工作薄,开发人员 * 也可以用程序生成新的Excel表格,不过我觉得在我们工作中几乎没有这方面需求,我 * 就不再列出来了,如果有哪位同事需要的话,我再把程序写出来 * * Copyright: Copyright (c) KongZhong Corparation 2005 * 程序开发环境为jb9 * @author 张丽鹏 * @version 1.0 */ public class Test1 { public static void main(String[] args) { jxl.Workbook rwb = null; try{ //构建Workbook对象, 只读Workbook对象 //直接从本地文件创建Workbook //从输入流创建Workbook InputStream is = new FileInputStream("D:/jb9Test/MyExcelTest/Book1.xls"); rwb = Workbook.getWorkbook(is); //Sheet(术语:工作表)就是Excel表格左下角的Sheet1,Sheet2,Sheet3但在程序中 //Sheet的下标是从0开始

poi操作Excel中sheet的复制(java版)

package https://www.360docs.net/doc/cf17136193.html,bos.utils.exportexcel; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFCell; import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFCellStyle; import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFFont; import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFRichTextString; import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFRow; import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFSheet; import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFWorkbook; import org.apache.poi.hssf.util.Region; import https://www.360docs.net/doc/cf17136193.html,ermodel.Font; public class CopyExcelSheet{ @SuppressWarnings("deprecation") public static void main(String[] args) throws FileNotFoundException, IOException { String fromPath = "C:\\Users\\Administrator\\Desktop\\quinn\\1.xls";// excel存放路径 String toPath = "C:\\Users\\Administrator\\Desktop\\quinn\\5.xls";// 保存新EXCEL路径 copyExcelSheet(fromPath, toPath); } /** * @Title: 根据文件路径复制sheet * @Description: 将fromPath文件中的sheet全部复制到toPath中 * @param @param fromPath 源文件全路径 * @param @param toPath 新文件全路径 * @param @throws IOException * @return 返回类型 * @throws */ @SuppressWarnings("deprecation") public static void copyExcelSheet(String fromPath, String toPath) throws IOException { // 创建新的excel File toFile = new File(toPath); HSSFWorkbook wbCreat = null;

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

Java使用POI操作Excel并创建下拉框

Java使用POI操作Excel并创建下拉框Java代码 package poiexcel; import java.io.FileOutputStream; import java.util.Date; import https://www.360docs.net/doc/cf17136193.html,ermodel.DVConstraint; import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFCell; import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFDataValidation; import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFRow; import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFSheet; import https://www.360docs.net/doc/cf17136193.html,ermodel.HSSFWorkbook; import org.apache.poi.hssf.util.CellRangeAddressList; public class POI { public static void main(String [] args) { String [] list={"东软","华信","SAP","海辉"}; new POI().createListBox(list); return; } public void createListBox (String [] list) {

//文件初始化 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet"); //在第一行第一个单元格,插入下拉框 HSSFRow row = sheet.createRow(0); HSSFCell cell = row.createCell(0); //普通写入操作 cell.setCellValue("请选择");//这是实验 //生成下拉列表 //只对(0,0)单元格有效 CellRangeAddressList regions = new CellRangeAddressList(0,0,0,0); //生成下拉框内容 DVConstraint constraint = DVConstraint.createExplicitListConstraint(list); //绑定下拉框和作用区域 HSSFDataValidation data_validation = new HSSFDataValidation(regions,constraint); //对sheet页生效 sheet.addValidationData(data_validation); //写入文件 FileOutputStream fileOut; try { fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut);

java操作EXCEL表格经典例子详解

Microsoft的Office系列产品拥有大量的用户,Word、Excel也成为办公文件的首选。在Java 中,已经有很多对于Word、Excel的开源的解决方案,其中比较出色的是Apache的Jakata 项目的POI子项目。该项目的官方网站是https://www.360docs.net/doc/cf17136193.html,/poi/。 POI包括一系列的API,它们可以操作基于MicroSoft OLE 2 Compound Document Format的各种格式文件,可以通过这些API在Java中读写Excel、Word等文件。POI是完全的Java Excel 和Java Word解决方案。POI子项目包括:POIFS、HSSF、HDF、HPSF。表7-2对它们进行了简要介绍。 表7-2 POI子项目介绍 子项目名 说明 POIFS(POI File System) POIFS是POI项目中最早的最基础的一个模块,是Java到OLE 2 Compound Document Format 的接口,支持读写功能,所有的其他项目都依赖与该项目。 HSSF(Horrible Spreadsheet Format) HSSF是Java到Microsoft Excel 97(-2002)文件的接口,支持读写功能 HWPF(Horrible Word Processing Format) HWPF是Java到Microsoft Word 97文件的接口,支持读写功能,但目前该模块还处于刚开始开发阶段,只能实现一些简单文件的操作,在后续版本中,会提供更强大的支持 HPSF(Horrible Property Set Format) HPSF 是Java到OLE 2 Compound Document Format文件的属性设置的接口,属性设置通常用来设置文档的属性(标题,作者,最后修改日期等),还可以设置用户定义的属性。HPSF支持读写功能,当前发布版本中直支持读功能。 7.3.1 对Excel的处理类 下面通过HSSF提供的接口对Excel文件经行处理。首先需要下载POI的包,可以到apache 的官方网站下载,地址为:https://www.360docs.net/doc/cf17136193.html,/jakarta/poi/,本书采用的是 poi-2.5.1-final-20040804.jar,读者可以下载当前的稳定版本。把下载的包按照前面介绍的方式加入Build Path,然后新建一个ch7.poi包,并创建一个ExcelReader类。 ExcelReader类可以读取一个XLS文件,然后将其内容逐行提取出来,写入文本文件。其代码如下。 代码7.6 public class ExcelReader {

java制作Excel报表简单易用(拿来即用)

java制作Excel报表简单易用 本程序是java程序 本程序是通过jxl.jar来实现的。 最下面会贴出代码 完整例子下载(我放在百度云盘了): https://www.360docs.net/doc/cf17136193.html,/share/link?shareid=2430244382&uk=2232193761 里面包括:java源码,jxl.jar 编译后的.class,文档说明文件(如果不需要jar包的话,就可以直接复制下面的源码即可,无需下载了) ,后续会添加java Web 项目,实现在servlet中调用写的例子生成excel并下载excel 功能。 简单的讲下如何使用: 直接将DoExcelHelper.java放入到项目中修改下package的名就行了。 怎么样使用DoExcelHelper这个类: 具体的请看DoExcelHelper.java的main方法(也可直接运行main方法,但要注意修改文件保存的路径,不然就会找不到路径哦)。 方法说明: setTitle(String)方法是添加报表最顶部的标题的。

setF_name(String[])添加参数的(key) setF_value(String[])添加参数值的(value),请与参数对应即:key:value setIsVerticalFreeze(boolean);//是否对header进行冻结,让表头随着滚动条而滚动。默认:false setHeader(String[])方法是添加要显示的内容的标题的,就好比是table标题(thead). 最后调用write(list,"F:/workspace/TestFolder/workOrder.xls");//第一个参数:数据集合(List

java如何读取Excel中的数据

下面是例子: import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; /** * 读取excel公共方法 * * */ public class ExcelReader { /** * * @param excelFile 读取文件对象 * @param rowNum 从第几行开始读,如果有一行表头则从第二行开始读 * @return * @throws BiffException * @throws IOException */ public static List readExcel(File excelFile,int rowNum) throws BiffException, IOException { // 创建一个list 用来存储读取的内容 List list = new ArrayList(); Workbook rwb = null; Cell cell = null; // 创建输入流 InputStream stream = new FileInputStream(excelFile); // 获取Excel文件对象 rwb = Workbook.getWorkbook(stream); // 获取文件的指定工作表默认的第一个 Sheet sheet = rwb.getSheet(0); // 行数(表头的目录不需要,从1开始) for (int i = rowNum-1; i < sheet.getRows(); i++) {

JAVA用POI从Excel读取数据进行相关统计,JFreeChart绘制图表

代码大概三百行吧,不多。本来连接数据库做是个不错的选择,但是我刚刷了系统木有了又懒得装,从txt输入又感觉太low,最后就作死选择了以前从未尝试过的从Excel 输入,并碰到了各种问题_(:зゝ∠)_比如Cannot get a String value from a numeric cell 的异常错误,卡了我好久,直到无语地发现POI操作Excel时会无视Excel里的单元格设置,自判数据类型,所以还要使用setCellType.(*゜ー゜*) 实现步骤 (1)我用javax.swing.JFileChooser类来显示文件对话框,让用户选择一个Excel文件。(2)使用Apache POI API从Excel文件中读取数据,对Employee类进行批量初始化。 (3)实现公司员工收入的相关统计,这里我实现了人数统计、最大/最小工龄查找、最大/最小工资查找、男女比例、平均工资、平均年龄、平均工龄等。 (4)建立Dataset。将你所想要显示的数据都放到这个库中。 (5)建立JFreeChart对象。将你的dataset填入到这个对象中。 (6)处理Chart中文显示问题 (7)设置各种JFreeChart的属性和效果。通过它提供的各种方法和接口设置相关的属性。 (8)用JFreeChart绘制图表,然后按照个人的需求进行执行。 (9)写界面,以swing形式输出。 测试截图 (1)生成消息对话框,要求用户选择一个Excel文件,单击“确定”

(2)生成文件选择器,我打开了存放在D盘BUAA文件夹里的Employee.xls

补充说明:这是文件Employee.xls的内容

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

package cn.zd; import java.io.File; import jxl.Workbook; import https://www.360docs.net/doc/cf17136193.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的POI操作Excel文件

java的POI操作Excel文件(1) 微软在桌面系统上的成功,令我们不得不大量使用它的办公产品,如:Word,Excel。时至今日,它的源代码仍然不公开已封锁了我们的进一步应用和开发。然而在要求更高的服务器领域,微软本身的产品移植性不好, 性能不佳。在我们实际的开发中,表现层的解决方案虽然有多样,但是Ie浏览器已成为最多人使用的浏览器,因为大家都用Windows。在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开。或者是:我们已经习惯用Excel打印。这样子如果用.net 开发是没有问题的,但是有j2ee这个比.net更有前途的开放式的开发环境,难道我为了解决打印的要求去另写客户端的控件?或者在服务器端使用本地代码?第一种方案的问题是关键数据的处理有时候不能在客户端做,第2种方案的问题是牺牲了代码的可移植性和稳定性。如果让客户端只负责处理生成好的报表,那将是一种诱人的选择。 Apache的Jakata项目的POI子项目,目标是处理ole2对象。目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel 转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。这是一个年轻的项目,所以象HDF这样直接支持Word对象的好东西仍然在设计中。其它支持word格式的纯java方案还有itext,不过也是仍在奋斗中。但是HSSF已经成熟到能够和足够我们使用了。另外,无锡永中Office的实现方案也是纯java的解决方案,不过那也是完全商业的产品,并不是公开代码项目。其实,从开发历史的角度讲,在80年代中期starOffice的原作者在德国成立了StarOffice suite公司,然后到1999年夏天starOffice被sun收购,再到2000年6月starOffice5.2的发布;并且从starOffice6.0开始,starOffice建立在OpenOffice的api 的基础上,这个公开代码的office项目已经进行了很长的时间。虽然那是由C++写的,但是POI的代码部分也是由openOffice改过来的。所以,应该对POI充满足够的信心。国内已经有部分公司在他们的办公自动化等Web项目中使用poi了,如日恒的ioffice,海泰的HTOffice 等。 java当初把核心处理设成Unicode,带来的好处是另代码适应了多语言环境。然而由于老外的英语只有26个字母,有些情况下,一些程序员用8位的byte处理,一不小心就去掉了CJK的高位。或者是由于习惯在程序中采用硬编码,还有多种原因,使得许多java应用在CJK的处理上很烦恼。还好在POI HSSF中考虑到这个问题,可以设置encoding为双字节。 POI可以到https://www.360docs.net/doc/cf17136193.html,下载到。编译好的jar主要有这样4个:poi包,poi Browser包,poi hdf包,poi hssf例程包。实际运行时,需要有poi包就可以了。如果用Jakarta ant编译和运行,下载apache Jakarta POI的release中的src包,它里面已经为你生成好了build文件了。只要运行ant就可以了(ant 的安装和使用在此不说了)。如果是用Jbuilder 运行,请在新建的项目中加入poi包。以Jbuilder6为例,选择Tools菜单项的config libraries...选项,新建一个lib。在弹出的菜单中选择poi包,如这个jakarta-poi-1.5.1-final-20020820.jar,把poi添加到jbuilder 中。然后,右键点击你的项目,在project的properties菜单中path的required Libraries中,点add,添加刚才加入到jbuilder中的poi到你现在的项目中。如果你仅仅是为了熟悉POI hssf 的使用,可以直接看POI的samples包中的源代码,并且运行它。hssf的各种对象都有例程的介绍。hssf提供的例程在https://www.360docs.net/doc/cf17136193.html,ermodel.examples包中,共有14个,生成的目标xls都是workbook.xls。如果你想看更多的例程,可以参考hssf的Junit test cases,在poi 的包的源代码中有。hssf都有测试代码。

Java读写Excel文件中数据的简便方法(附代码)

Java读写Excel文件中数据的简便方法 Java开发项目中经常会碰到处理Excel文件中数据的情况,这里通过一个例子来看一下实现方法:从Excel文件orders.xls中读取订单信息,从中找出2010年1月1日(含)之后,并且SELLERID等于18的订单。找到的数据写入order_result.xls文件。 Excel文件orders.xls的内容如下: ORDERID CLIE NT SE LLERID AMOUNT ORDERDATE 1 UJRNP 17 39 2 2008/11/2 15:28 2 SJCH 6 4802 2008/11/9 15:28 3 UJRNP 16 13500 2008/11/5 15:28 4 P WQ 9 26100 2008/11/8 15:28 5 P WQ 11 4410 2008/11/12 15:28 6 HANAR 18 6174 2008/11/ 7 15:28 7 E GU 2 17800 2008/11/6 15:28 8 VILJX 7 2156 2008/11/9 15:28 9 JAYB 14 17400 2008/11/12 15:28 10 JAXE 19 19200 2008/11/12 15:28 11 SJCH 7 13700 2008/11/10 15:28 12 QUICK 11 21200 2008/11/13 15:28 13 HL 12 21400 2008/11/21 15:28 14 JAYB 1 7644 2008/11/16 15:28 15 MIP 16 3234 2008/11/19 15:28 16 AYW YN 4 6566 2008/11/21 15:28 … Java程序的编写思路是 1、从Excel文件逐行读入数据保存到List对象sourceList中。 2、遍历List对象sourceList,如果满足条件就保存到结果List对象resultList中。 3、遍历reslutList,逐行保存到输出Excel文件中。 其中包含一些处理不同数据类型的语句,具体代码如下: public static void myExcel() throws Exception { //读excel数据 HSSFWorkbook workbook= newHSSFWorkbook(new FileInputStream(new File("d:/file/orders.xls"))); Sheet sheet=workbook.getSheetAt(0);//读取第一个sheet List>sourceList= new ArrayList>(); List>resultList= new ArrayList>(); SimpleDateFormat format = new SimpleDateFormat("yyyy-M-ddHH:mm:ss"); for (int i = 1; i order=new HashMap(); Cell cell0 = row.getCell(0);

Java操作Excel

原帖地址:https://www.360docs.net/doc/cf17136193.html,/lgq_0714/archive/2009/09/23/4582500.aspx 一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。 二.HSSF概况 HSSF 是Horrible SpreadSheet Format的缩写,也即“讨厌的电子表格格式”。也许HSSF的名字有点滑稽,就本质而言它是一个非常严肃、正规的API。通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。 HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。前者很好理解,后者比较抽象,但操作效率要高得多。 三.开始编码 1 .准备工作 要求:JDK 1.4+POI开发包 可以到https://www.360docs.net/doc/cf17136193.html,/dyn/closer.cgi/jakarta/poi/ 最新的POI工具包 2 .EXCEL 结构 HSSFWorkbook excell 文档对象介绍 HSSFSheet excell的表单 HSSFRow excell的行 HSSFCell excell的格子单元 HSSFFont excell字体 HSSFName 名称 HSSFDataFormat 日期格式 在poi1.7中才有以下2项: HSSFHeader sheet头 HSSFFooter sheet尾 和这个样式 HSSFCellStyle cell样式 辅助操作包括 HSSFDateUtil 日期 HSSFPrintSetup 打印 HSSFErrorConstants 错误信息表 3 .具体用法实例(采用usermodel ) 如何读Excel

相关主题
相关文档
最新文档