JAVA用POI读取和创建2003和2007版本Excel完美示例

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.text.DecimalFormat;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.LinkedList;

import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;

import org.apache.poi.hssf.usermodel.HSSFDataFormat;

import org.apache.poi.hssf.usermodel.HSSFDateUtil;

import org.apache.poi.hssf.usermodel.HSSFFont;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

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

import org.apache.poi.xssf.usermodel.XSSFCell;

import org.apache.poi.xssf.usermodel.XSSFCellStyle;

import org.apache.poi.xssf.usermodel.XSSFFont;

import org.apache.poi.xssf.usermodel.XSSFRow;

import org.apache.poi.xssf.usermodel.XSSFSheet;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**

* 可以从http://poi.apache.org/ 这里下载到POI的jar包 POI

创建和读取2003-2007版本Excel文件

*

*/

public class CreatAndReadExcel {

public static void main(String[] args) throws Exception {

creat2003Excel();// 创建2007版Excel文件

creat2007Excel();// 创建2003版Excel文件

//读取2003Excel文件

String path2003 = System.getProperty("user.dir")

+ System.getProperty("file.separator") + "style_2003.xls";// 获取项目文件路径

+2003版文件名

System.out.println("路径:" + path2003);

File f2003 = new File(path2003);

try {

readExcel(f2003);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//读取2007Excel文件

String path2007 = System.getProperty("user.dir")

+ System.getProperty("file.separator") + "style_2007.xlsx";// 获取项目文件路径

+2007版文件名

System.out.println("路径:" + path2007);

File f2007 = new File(path2007);

try {

readExcel(f2007);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

* 创建2007版Excel文件

*

* @throws FileNotFoundException

* @throws IOException

*/

private static void creat2007Excel() throws FileNotFoundException,

IOException {

// HSSFWorkbook workBook = new HSSFWorkbook();// 创建 一个excel文档对象

XSSFWorkbook workBook = new XSSFWorkbook();

XSSFSheet sheet = workBook.createSheet();// 创建一个工作薄对象

sheet.setColumnWidth(1, 10000);// 设置第二列的宽度为

XSSFRow row = sheet.createRow(1);// 创建一个行对象

row.setHeightInPoints(23);// 设置行高23像素

XSSFCellStyle style = workBook.createCellStyle();// 创建样式对象

// 设置字体

XSSFFont font = workBook.createFont();// 创建字体对象

font.setFontHeightInPoints((short) 15);// 设置字体大小

font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置粗体

font.setFontName("黑体");// 设置为黑体字

style.setFont(font);// 将字体加入到样式对象

// 设置对齐方式

style.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 水平居中

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

// 设置边框

style.setBorderTop(HSSFCellStyle.BORDER_THICK);// 顶部边框粗线

style.setTopBorderColor(HSSFColor.RED.index);// 设置为红色

style.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);// 底部边框双线

style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);// 左边边框

style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);// 右边边框

// 格式化日期

style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));

XSSFCell cell = row.createCell(1);// 创建单元格

cell.setCellValue(new Date());// 写入当前日期

cell.setCellStyle(style);// 应用样式对象

// 文件输出流

FileOutputStream os = new FileOutputStream("style_2007.xlsx");

workBook.write(os);// 将文档对象写入文件输出流

os.close();// 关闭文件输出流

System.out.println("创建成功 office 2007 excel");

}

/**

* 创建2003版本的Excel文件

*/

private static void creat2003Excel() throws FileNotFoundException,

IOException {

HSSFWorkbook workBook = new HSSFWorkbook();// 创建 一个excel文档对象

HSSFSheet sheet = workBook.createSheet();// 创建一个工作薄对象

sheet.setColumnWidth(1, 10000);// 设置第二列的宽度为

HSSFRow row = sheet.createRow(1);// 创建一个行对象

row.setHeightInPoints(23);// 设置行高23像素

HSSFCellStyle style = workBook.createCellStyle();// 创建样式对象

// 设置字体

HSSFFont font = workBook.createFont();// 创建字体对象

font.setFontHeightInPoints((short) 15);// 设置字体大小

font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置粗体

font.setFontName("黑体");// 设置为黑体字

style.setFont(font);// 将字体加入到样式对象

// 设置对齐方式

style.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 水平居中

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

// 设置边框

style.setBorderTop(HSSFCellStyle.BORDER_THICK);// 顶部边框粗线

style.setTopBorderColor(HSSFColor.RED.index);// 设置为红色

style.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);// 底部边框双线

style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);// 左边边框

style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);// 右边边框

// 格式化日期

style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));

HSSFCell cell = row.createCell(1);// 创建单元格

cell.setCellValue(new Date());// 写入当前日期

cell.setCellStyle(style);// 应用样式对象

// 文件输出流

FileOutputStream os = new FileOutputStream("style_2003.xls");

workBook.write(os);// 将文档对象写入文件输出流

os.close();// 关闭文件输出流

System.out.println("创建成功 office 2003 excel");

}

/**

* 对外提供读取excel 的方法

*/

public static List<List<Object>> readExcel(File file) throws IOException {

String fileName = file.getName();

String extension = fileName.lastIndexOf(".") == -1 ? "" : fileName

.substring(fileName.lastIndexOf(".") + 1);

if ("xls".equals(extension)) {

return read2003Excel(file);

} else if ("xlsx".equals(extension)) {

return read2007Excel(file);

} else {

throw new IOException("不支持的文件类型");

}

}

/**

* 读取 office 2003 excel

*

* @throws IOException

* @throws FileNotFoundException

*/

private static List<List<Object>> read2003Excel(File file)

throws IOException {

List<List<Object>> list = new LinkedList<List<Object>>();

HSSFWorkbook hwb = new HSSFWorkbook(new FileInputStream(file));

HSSFSheet sheet = hwb.getSheetAt(0);

Object value = null;

HSSFRow row = null;

HSSFCell cell = null;

System.out.println("读取office 2003 excel内容如下:");

for (int i = sheet.getFirstRowNum(); i <= sheet

.getPhysicalNumberOfRows(); i++) {

row = sheet.getRow(i);

if (row == null) {

continue;

}

List<Object> linked = new LinkedList<Object>();

for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {

cell = row.getCell(j);

if (cell == null) {

continue;

}

DecimalFormat df = new DecimalFormat("0");// 格式化 number String

// 字符

SimpleDateFormat sdf = new SimpleDateFormat(

"yyyy-MM-dd HH:mm:ss");// 格式化日期字符串

DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字

switch (cell.getCellType()) {

case XSSFCell.CELL_TYPE_STRING:

// System.out.println(i + "行" + j + " 列 is String type");

value = cell.getStringCellValue();

System.out.print("  " + value + "  ");

break;

case XSSFCell.CELL_TYPE_NUMERIC:

// System.out.println(i + "行" + j

// + " 列 is Number type ; DateFormt:"

// + cell.getCellStyle().getDataFormatString());

if ("@".equals(cell.getCellStyle().getDataFormatString())) {

value = df.format(cell.getNumericCellValue());

} else if ("General".equals(cell.getCellStyle()

.getDataFormatString())) {

value = nf.format(cell.getNumericCellValue());

} else {

value = sdf.format(HSSFDateUtil.getJavaDate(cell

.getNumericCellValue()));

}

System.out.print("  " + value + "  ");

break;

case XSSFCell.CELL_TYPE_BOOLEAN:

// System.out.println(i + "行" + j + " 列 is Boolean type");

value = cell.getBooleanCellValue();

System.out.print("  " + value + "  ");

break;

case XSSFCell.CELL_TYPE_BLANK:

// System.out.println(i + "行" + j + " 列 is Blank type");

value = "";

System.out.print("  " + value + "  ");

break;

default:

// System.out.println(i + "行" + j + " 列 is default type");

value = cell.toString();

System.out.print("  " + value + "  ");

}

if (value == null || "".equals(value)) {

continue;

}

linked.add(value);

}

System.out.println("");

list.add(linked);

}

return list;

}

/**

* 读取Office 2007 excel

*/

private static List<List<Object>> read2007Excel(File file)

throws IOException {

List<List<Object>> list = new LinkedList<List<Object>>();

// String path = System.getProperty("user.dir") +

// System.getProperty("file.separator")+"dd.xlsx";

// System.out.println("路径:"+path);

// 构造 XSSFWorkbook 对象,strPath 传入文件路径

XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));

// 读取第一章表格内容

XSSFSheet sheet = xwb.getSheetAt(0);

Object value = null;

XSSFRow row = null;

XSSFCell cell = null;

System.out.println("读取office 2007 excel内容如下:");

for (int i = sheet.getFirstRowNum(); i <= sheet

.getPhysicalNumberOfRows(); i++) {

row = sheet.getRow(i);

if (row == null) {

continue;

}

List<Object> linked = new LinkedList<Object>();

for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {

cell = row.getCell(j);

if (cell == null) {

continue;

}

DecimalFormat df = new DecimalFormat("0");// 格式化 number String

// 字符

SimpleDateFormat sdf = new SimpleDateFormat(

"yyyy-MM-dd HH:mm:ss");// 格式化日期字符串

DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字

switch (cell.getCellType()) {

case XSSFCell.CELL_TYPE_STRING:

// System.out.println(i + "行" + j + " 列 is String type");

value = cell.getStringCellValue();

System.out.print("  " + value + "  ");

break;

case XSSFCell.CELL_TYPE_NUMERIC:

// System.out.println(i + "行" + j

// + " 列 is Number type ; DateFormt:"

// + cell.getCellStyle().getDataFormatString());

if ("@".equals(cell.getCellStyle().getDataFormatString())) {

value = df.format(cell.getNumericCellValue());

} else if ("General".equals(cell.getCellStyle()

.getDataFormatString())) {

value = nf.format(cell.getNumericCellValue());

} else {

value = sdf.format(HSSFDateUtil.getJavaDate(cell

.getNumericCellValue()));

}

System.out.print("  " + value + "  ");

break;

case XSSFCell.CELL_TYPE_BOOLEAN:

// System.out.println(i + "行" + j + " 列 is Boolean type");

value = cell.getBooleanCellValue();

System.out.print("  " + value + "  ");

break;

case XSSFCell.CELL_TYPE_BLANK:

// System.out.println(i + "行" + j + " 列 is Blank type");

value = "";

// System.out.println(value);

break;

default:

// System.out.println(i + "行" + j + " 列 is default type");

value = cell.toString();

System.out.print("  " + value + "  ");

}

if (value == null || "".equals(value)) {

continue;

}

linked.add(value);

}

System.out.println("");

list.add(linked);

}

return list;

}

}

时间: 2024-12-14 18:46:30

JAVA用POI读取和创建2003和2007版本Excel完美示例的相关文章

Java使用POI读取和写入Excel指南

Java使用POI读取和写入Excel指南 做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求: 网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃,这里基于最新的Apache POI 4.0.1版本来总结一下整个读取和写入Excel的过程,希望能帮助到需要的人 ^_^ 1. 准备工作 1.1 在项目中引入Apache POI相关类库 引入 Apache POI 和 Apache POI-OOXML 这两个类库,Maven坐标如下: <depe

java的poi 读取exc 文件

package lizikj.bigwheel.shop.util.excel; import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.text.DecimalFormat;import java.util.ArrayList;import java.util.List; import lizikj.bigwheel.

POI 读取word (word 2003 和 word 2007) (转)

最近在给客户做系统的时候,用户提出需求,要能够导入 word 文件,现在 microsoft word 有好几个版本 97.2003.2007的,这三个版本存储数据的格式上都有相当大的差别,而现在 97 基本上已经退出市场,几乎没有人用这个版本了, 所以在我们的系统中只考虑 2003 版本和 2007 版本的,因为我们只要求能够读取 word 中的文字内容即可,其中的文字样式.图片等信息可以忽略,也不用直接操作 word 文件, 所以我们选择 用 apache 的 POI 进行读取. 读取 20

java用POI读取excel时date类型出现的问题

最近用poi读取excel并传入数据库中,但是出现了一个非常奇葩的问题,一直困扰了我很久 就是读取时date类型出现年份和日读取正确,但是月份为00的情况,我冥思苦想了很找了久,一直找不到原因 今天突然发现时自己粗心导致的 之前的错误代码: Date time=new Date(); time=cell.getDateCellValue(); //按指定格式输出 SimpleDateFormat df=new SimpleDateFormat("yyyy/mm/dd hh:mm:ss"

Apache POI读取和创建Excel ----01(简单操作)

public class ExcelCreatAndRead { /**     * 使用Apache POI创建Excel文档     * */    public static void createXL(){        /**Excel文件要存放的位置,假定在D盘下*/        String outputFile="D:\\test.xlsx";        try {        //创建新的Excel工作薄        XSSFWorkbook workboo

java使用poi读取excel(.xlsx)文件

经过一番搜索发现,java操纵excel文件常用的有jxl和poi两种方式,孰好孰坏看自己需求而定. 其中最主要的区别在于jxl不支持.xlsx,而poi支持.xlsx 这里介绍的使用poi方式(XSSFWorkbook),实际上poi提供了HSSFWorkbook和XSSFWorkbook两个实现类.区别在于HSSFWorkbook是针对.xls文件,XSSFWorkbook是针对.xslx文件. 首先明确一下基本概念: 先创建一个工作簿,一个工作簿可以有多个工作表,一个工作表可以有多个行,一

java利用poi读取excel异常问题

最近一个web工程需要完成一个小功能,利用文件上传然后读取文件内容写入到数据库,这里是操作的excel文件,excel文件分两种后缀,03版本的xls和之后的xlsx,现在大家一般都拿非常好用的插件直接过来用就可以了,我这里用的是java poi相关资源包. 1,首先要能够读取带xlsx的excel文件,必须要导入如下的jar包 然后遇到的问题是在本地工程下建立的一个测试类测试没有异常,两种excel的文件都能读取,但是一旦发布到web工程下,我的工程是在tomcat下跑的.这里就出现了问题,总

JAVA:通过poi读取excel

POI是一个apache开源的jar包,可以通过搜索 java POI找到官网,并下载开发包. 包含的功能: 可以读取excel2003,2007,2010等. 读取excel2007/2010的代码: public static boolean isNumeric(String str) { for (int i = 0; i < str.length(); i++) { if (!Character.isDigit(str.charAt(i))) { return false; } } re

POI 3.8读取2003与2007格式EXCEL(xls、xlsx)

废话少说直接上代码,记得是poi3.8版本啊.方法入口唯一,自动判断格式,使用接口引用,自动选择执行方法. 方法入口: public static ArrayList<String[]> explanExcelToList(String fileName) {ArrayList<String[]> list = new ArrayList<String[]>();Workbook wb = null;try {wb = get2003Workbook(new FileI