转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/22800915

java操作office文件现在主流的jar包有jxl和POI,由于目前jxl.jar没有人更新,并不支持Excel2007及其以上版本,Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

POI结构如下:

HSSF - 提供读写Microsoft Excel格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
HWPF - 提供读写Microsoft Word格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读写Microsoft Visio格式档案的功能。

下面就简单介绍一下POI对Excel文件操作的一些基础实现。在下面的实现中,均将Excel文件中单元格数据认为是字符串。

表格中单元格java bean

 /**  *@Description: Excel单元格格式*/
package cn.lulei.office.model;  public class ExcelCell {private int row;//行private int column;//列private String content;//内容public int getRow() {return row;}public void setRow(int row) {this.row = row;}public int getColumn() {return column;}public void setColumn(int column) {this.column = column;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}
}

表格中工作表 java bean

 /**  *@Description: Excel表格sheet页数据*/
package cn.lulei.office.model;  import java.util.List;public class ExcelSheet {private String sheetName;private List<ExcelCell> cells;public String getSheetName() {return sheetName;}public void setSheetName(String sheetName) {this.sheetName = sheetName;}public List<ExcelCell> getCells() {return cells;}public void setCells(List<ExcelCell> cells) {this.cells = cells;}
}

Excel2003以前版本文件操作

 /**  *@Description:  Excel2003之前版本操作*/
package cn.lulei.office.v2003;  import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;import cn.lulei.office.model.ExcelCell;
import cn.lulei.office.model.ExcelSheet;public class Excel {private static final String excelFileSuffix = ".xls";//Excel文件后缀名private static final String defaultSheetName = "Sheet";//默认sheet名/*** @param sheets* @param fileName* @return* @Date:2014-4-1  * @Author:lulei  * @Description: 生成Excel文件*/public boolean create(List<ExcelSheet> sheets, String fileName) {if (sheets == null) {throw new NumberFormatException("sheets is null");}if (fileName == null || "".equals(fileName)) {throw new NumberFormatException("fileName is null");}try {//判断后缀名是否是 xlsfileName = fileName.toLowerCase().endsWith(excelFileSuffix) ? fileName : fileName + excelFileSuffix;File file = new File(fileName);//创建ExcelHSSFWorkbook wbook = new HSSFWorkbook();int i = 1;for (ExcelSheet sheet : sheets) {//如果sheetName为空,则使用默认的命名方式if (sheet.getSheetName() == null || "".equals(sheet.getSheetName())) {sheet.setSheetName(defaultSheetName + i);}//创建工作表HSSFSheet hSheet = wbook.createSheet(sheet.getSheetName());//如果工作表的内容为空,则继续下一个工作表内容if (sheet.getCells() == null) {continue;}for (ExcelCell cell : sheet.getCells()) {//获取表中的一行,如果为空,则创建行HSSFRow hRow = hSheet.getRow(cell.getRow());if (hRow == null) {hRow = hSheet.createRow(cell.getRow());}//创建改行中某列单元格HSSFCell hCell = hRow.createCell(cell.getColumn());//设置单元格属性为StringhCell.setCellType(HSSFCell.CELL_TYPE_STRING);//设置单元格内容hCell.setCellValue(cell.getContent());}}//将wbook写入到文件中FileOutputStream fos = new FileOutputStream(file);wbook.write(fos);fos.flush();fos.close();return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** @param rowStart* @param columnStart* @param rowEnd* @param columnEnd* @param sheetNo* @param fileName* @return* @Date:2014-4-1  * @Author:lulei  * @Description: 读取excel文件sheet页数据*/public List<ExcelCell> getCells(int rowStart, int columnStart, int rowEnd, int columnEnd, int sheetNo, String fileName) {List<ExcelCell> cells = null;try {File file = new File(fileName);//判断文件是否存在if (!file.exists()) {throw new NullPointerException(fileName + " is not exist");}//读取Excel文件HSSFWorkbook wbook = new HSSFWorkbook(new FileInputStream(file));HSSFSheet sheet = wbook.getSheetAt(sheetNo);//如果工作表格为空,则直接返回空值if (sheet == null) {return null;}rowStart = rowStart < 0 ? 0 : rowStart;columnStart = columnStart < 0 ? 0 : columnStart;cells = new ArrayList<ExcelCell>();//循环行for (int i = rowStart; i <= rowEnd; i++) {HSSFRow row = sheet.getRow(i);//如果改行为空,继续下一行if (row == null) {continue;}//循环列for (int j = columnStart; j <= columnEnd; j++) {HSSFCell cell = row.getCell(j);//如果该单元格不为空,添加到返回数组中if (cell != null) {ExcelCell eCell = new ExcelCell();eCell.setRow(i);eCell.setColumn(j);eCell.setContent(cell.toString());cells.add(eCell);}}}} catch (Exception e) {e.printStackTrace();return null;}//返回 数据return cells;}/*** @param sheets* @param fileName* @return* @Date:2014-4-1  * @Author:lulei  * @Description: Excel更新操作*/public boolean update(List<ExcelSheet> sheets, String fileName) {if (sheets == null) {throw new NumberFormatException("sheets is null");}try {File file = new File(fileName);//判断文件是否存在if (!file.exists()) {throw new NullPointerException(fileName + " is not exist");}//读取Excel文件HSSFWorkbook wbook = new HSSFWorkbook(new FileInputStream(file));for (ExcelSheet sheet : sheets) {//获取Excel中的工作表,如果为空,则创建表HSSFSheet hSheet = wbook.getSheet(sheet.getSheetName());if (hSheet == null) {hSheet = wbook.createSheet(sheet.getSheetName());}for (ExcelCell cell : sheet.getCells()) {//获取表中的一行,如果为空,则创建行HSSFRow hRow = hSheet.getRow(cell.getRow());if (hRow == null) {hRow = hSheet.createRow(cell.getRow());}//获取某列单元格,如果为空,则创建单元格HSSFCell hCell = hRow.getCell(cell.getColumn());if (hCell == null) {hCell = hRow.createCell(cell.getColumn());}//设置单元格属性为StringhCell.setCellType(HSSFCell.CELL_TYPE_STRING);//设置单元格内容hCell.setCellValue(cell.getContent());}}//将wbook写入到文件中FileOutputStream fos = new FileOutputStream(file);wbook.write(fos);fos.flush();fos.close();} catch (Exception e) {e.printStackTrace();return false;}return true;}
}

Excel2007以上版本操作

 /**  *@Description:  Excel2003之前版本操作*/
package cn.lulei.office.v2007;  import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import cn.lulei.office.model.ExcelCell;
import cn.lulei.office.model.ExcelSheet;public class Excel {private static final String excelFileSuffix = ".xlsx";//Excel文件后缀名private static final String defaultSheetName = "Sheet";//默认sheet名/*** @param sheets* @param fileName* @return* @Date:2014-4-1  * @Author:lulei  * @Description: 生成Excel文件*/public boolean create(List<ExcelSheet> sheets, String fileName) {if (sheets == null) {throw new NumberFormatException("sheets is null");}if (fileName == null || "".equals(fileName)) {throw new NumberFormatException("fileName is null");}try {//判断后缀名是否是 xlsfileName = fileName.toLowerCase().endsWith(excelFileSuffix) ? fileName : fileName + excelFileSuffix;File file = new File(fileName);//创建ExcelXSSFWorkbook wbook = new XSSFWorkbook();int i = 1;for (ExcelSheet sheet : sheets) {//如果sheetName为空,则使用默认的命名方式if (sheet.getSheetName() == null || "".equals(sheet.getSheetName())) {sheet.setSheetName(defaultSheetName + i);}//创建工作表XSSFSheet hSheet = wbook.createSheet(sheet.getSheetName());//如果工作表的内容为空,则继续下一个工作表内容if (sheet.getCells() == null) {continue;}for (ExcelCell cell : sheet.getCells()) {//获取表中的一行,如果为空,则创建行XSSFRow hRow = hSheet.getRow(cell.getRow());if (hRow == null) {hRow = hSheet.createRow(cell.getRow());}//创建改行中某列单元格XSSFCell hCell = hRow.createCell(cell.getColumn());//设置单元格属性为StringhCell.setCellType(XSSFCell.CELL_TYPE_STRING);//设置单元格内容hCell.setCellValue(cell.getContent());}}//将wbook写入到文件中FileOutputStream fos = new FileOutputStream(file);wbook.write(fos);fos.flush();fos.close();return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** @param rowStart* @param columnStart* @param rowEnd* @param columnEnd* @param sheetNo* @param fileName* @return* @Date:2014-4-1  * @Author:lulei  * @Description: 读取excel文件sheet页数据*/public List<ExcelCell> getCells(int rowStart, int columnStart, int rowEnd, int columnEnd, int sheetNo, String fileName) {List<ExcelCell> cells = null;try {File file = new File(fileName);//判断文件是否存在if (!file.exists()) {throw new NullPointerException(fileName + " is not exist");}//读取Excel文件XSSFWorkbook wbook = new XSSFWorkbook(new FileInputStream(file));XSSFSheet sheet = wbook.getSheetAt(sheetNo);//如果工作表格为空,则直接返回空值if (sheet == null) {return null;}rowStart = rowStart < 0 ? 0 : rowStart;columnStart = columnStart < 0 ? 0 : columnStart;cells = new ArrayList<ExcelCell>();//循环行for (int i = rowStart; i <= rowEnd; i++) {XSSFRow row = sheet.getRow(i);//如果改行为空,继续下一行if (row == null) {continue;}//循环列for (int j = columnStart; j <= columnEnd; j++) {XSSFCell cell = row.getCell(j);//如果该单元格不为空,添加到返回数组中if (cell != null) {ExcelCell eCell = new ExcelCell();eCell.setRow(i);eCell.setColumn(j);eCell.setContent(cell.toString());cells.add(eCell);}}}} catch (Exception e) {e.printStackTrace();return null;}//返回数据return cells;}/*** @param sheets* @param fileName* @return* @Date:2014-4-1  * @Author:lulei  * @Description: Excel更新操作*/public boolean update(List<ExcelSheet> sheets, String fileName) {if (sheets == null) {throw new NumberFormatException("sheets is null");}try {File file = new File(fileName);//判断文件是否存在if (!file.exists()) {throw new NullPointerException(fileName + " is not exist");}//读取Excel文件XSSFWorkbook wbook = new XSSFWorkbook(new FileInputStream(file));for (ExcelSheet sheet : sheets) {//获取Excel中的工作表,如果为空,则创建表XSSFSheet hSheet = wbook.getSheet(sheet.getSheetName());if (hSheet == null) {hSheet = wbook.createSheet(sheet.getSheetName());}for (ExcelCell cell : sheet.getCells()) {//获取表中的一行,如果为空,则创建行XSSFRow hRow = hSheet.getRow(cell.getRow());if (hRow == null) {hRow = hSheet.createRow(cell.getRow());}//获取某列单元格,如果为空,则创建单元格XSSFCell hCell = hRow.getCell(cell.getColumn());if (hCell == null) {hCell = hRow.createCell(cell.getColumn());}//设置单元格属性为StringhCell.setCellType(XSSFCell.CELL_TYPE_STRING);//设置单元格内容hCell.setCellValue(cell.getContent());}}//将wbook写入到文件中FileOutputStream fos = new FileOutputStream(file);wbook.write(fos);fos.flush();fos.close();} catch (Exception e) {e.printStackTrace();return false;}return true;}
}

Excel文件统一向外服务类

 /**  *@Description:  Excel操作提供服务接口   */
package cn.lulei.office.service;  import java.util.List;import cn.lulei.office.model.ExcelCell;
import cn.lulei.office.model.ExcelSheet;public class ExcelService {public static final int Excel2003 = 0;public static final int Excel2007 = 1;private cn.lulei.office.v2003.Excel excel2003 = new cn.lulei.office.v2003.Excel();private cn.lulei.office.v2007.Excel excel2007 = new cn.lulei.office.v2007.Excel();/*** @param sheets* @param fileName 文件绝对* @param excelVersion excel版本* @return* @Date:2014-4-2  * @Author:lulei  * @Description: 创建Excel*/public boolean create(List<ExcelSheet> sheets, String fileName, int excelVersion) {if (excelVersion >= Excel2007) {return excel2007.create(sheets, fileName);} else {return excel2003.create(sheets, fileName);}}/*** @param sheets* @param fileName 文件绝对路径* @return* @Date:2014-4-2  * @Author:lulei  * @Description: 创建Excel*/public boolean create(List<ExcelSheet> sheets, String fileName) {return create(sheets, fileName, Excel2007);}/*** @param rowStart 起始行* @param columnStart 起始列* @param rowEnd 终止行* @param columnEnd 终止列* @param sheetNo sheet编号~0 1* @param fileName 文件名* @param excelVersion 使用excel版本* @return* @Date:2014-4-2  * @Author:lulei  * @Description: 读取Excel*/public List<ExcelCell> getCells(int rowStart, int columnStart, int rowEnd, int columnEnd, int sheetNo, String fileName, int excelVersion) {if (excelVersion >= Excel2007) {return excel2007.getCells(rowStart, columnStart, rowEnd, columnEnd, sheetNo, fileName);} else {return excel2003.getCells(rowStart, columnStart, rowEnd, columnEnd, sheetNo, fileName);}}/*** @param rowStart 起始行* @param columnStart 起始列* @param rowEnd 终止行* @param columnEnd 终止列* @param sheetNo sheet编号~0 1* @param fileName 文件名* @return* @Date:2014-4-2  * @Author:lulei  * @Description: 读取Excel*/public List<ExcelCell> getCells(int rowStart, int columnStart, int rowEnd, int columnEnd, int sheetNo, String fileName) {return getCells(rowStart, columnStart, rowEnd, columnEnd, sheetNo, fileName, Excel2007);}/*** @param sheets* @param fileName* @param excelVersion* @return* @Date:2014-4-2  * @Author:lulei  * @Description: 更新Excel*/public boolean update(List<ExcelSheet> sheets, String fileName, int excelVersion) {if (excelVersion >= Excel2007) {return excel2007.update(sheets, fileName);} else {return excel2003.update(sheets, fileName);}}/*** @param sheets* @param fileName* @return* @Date:2014-4-2  * @Author:lulei  * @Description: 更新Excel*/public boolean update(List<ExcelSheet> sheets, String fileName) {return update(sheets, fileName, Excel2007);}
}

这里就只写出了一些具体的实现方式,至于测试和用法,这里并没有涉及,在使用中,只需要去构建ExcelSheet即可~

在以后的bolg中,将继续更新Excel的其他操作以及其他office文件的操作

java操作excel文件基础架构实现,支持2007以上版本相关推荐

  1. 高级知识点:excel4j实现java操作excel文件的读写

    介绍 java操作excel文件最经典的是POI,但是其api 较多,代码量巨大,反复重复 excel4j ap则简洁太多,利用pojo建模,利用注解进行标识@ExcelField(title = & ...

  2. Java操作Excel文件以及在Android中的应用

    本文章由临江仙原创,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/10286563 Excel作为一种有格式的文件,可以使用Java来对 ...

  3. excel中用java语言_利用 JAVA 操作 EXCEL 文件

    Java Excel 是一开放源码项目,通过它 Java 开发人员可以读取 Excel 文件的内容.创建新的 Excel 文件.更新已经存在的 Excel 文件.使用该 API 非 Windows 操 ...

  4. Java操作excel文件插入数据

    读取一个表数据根据自己的需求将数据插入到另外一个表中,复制代码下载excel及jar包即可 注意:读取表数据时,表格中的格子没有数据时会读取报错 excel文件及相关jar包: 连接:https:// ...

  5. java操作excel文件之系列一:《读取excel文件的内容保存到数据库》

    excel文件:example.xls 文件内容大概是下面这样的: 现在要读取excel的内容写入数据库中 String filepath = "example.xls";Stri ...

  6. java excel导出2007_java操作excel文件,实现批量导出,和导入

    一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...

  7. Java生成和操作Excel文件

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

  8. java操作Excel、PDF文件

    java操作Excel.PDF文件 下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码: jxl是一个*国人写的java操作excel的工具, 在开源世界中, ...

  9. Java操作Excel之Excel文件的下载

    1.有的时候在Web应用会有下载Excel的需求,现分享下后台实现下载Excel文件的代码 @RequestMapping(value = "/exportExcel", meth ...

最新文章

  1. android wear无法启用,android-wear – 无法创建Android虚拟设备,“没有为此目标安装系统映像”...
  2. 亚马逊科学家Nikko Ström:将人工智能助理日常化的梦想照进现实
  3. T-SQL 编码标准
  4. 【错误记录】Android 低版本使用分区存储错误 ( 低版本存储不得使用 MediaStore )
  5. 重要的基础注解@import
  6. 命令行验证apk签名
  7. 深入理解 Vue Computed 计算属性
  8. 太残忍!麦当劳用毒气室杀鸡
  9. rust中使用cargo expand查看被宏隐藏的代码
  10. QEMU+GDB调试方法
  11. SHELL 003 -- ss命令常用方法
  12. rabbitmq实战指南_太香了这份架构解密:从分布式到微服务(第二版),神仙进阶指南...
  13. In App Purchases 入门
  14. Javascript 中调参数的脚本onclick=select(this) this 怎么解释
  15. 如何用 Bash 创建一个二进制发布包
  16. 关于AD9各种布线总结(很详细)
  17. 第七章 C语言函数_C语言全局变量和局部变量
  18. 小米2S稳定版 教你如何一键ROOT
  19. C标准库源码解读(VC9.0版本)——ctype.h
  20. 单片机IO详解(上拉 下拉 准双向 输入 输出 推挽 开漏)

热门文章

  1. CSMA/CD最大/最小帧长 争用期
  2. #汇编语言字符串的输出(dosbox运行时输出乱码问题解决)
  3. 三维立体切块效果制作
  4. Codeforces801D Volatile Kite
  5. 2021湖南汉寿高考成绩查询,湖南省联考2021成绩查询入口 怎么查成绩
  6. AndroidStudio导入Android源码
  7. 第十届蓝桥杯C/C++ B组决赛
  8. 1362: [蓝桥杯2018初赛]第几个幸运数(简单题)
  9. C4D的GPU渲染器Octane和Redshift的渲染对比
  10. 过一下hibernate4-3