2019独角兽企业重金招聘Python工程师标准>>>

首先说一下所使用的POI版本3.8,需要用的的Jar包:

dom4j-1.6.1.jar
poi-3.8-20120326.jar
poi-ooxml-3.8-20120326.jar
poi-ooxml-schemas-3.8-20120326.jar
poi-scratchpad-3.8-20120326.jar
xmlbeans-2.3.0.jar

代码示例:

package com.project.excel.poi;
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 java.io.PushbackInputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
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.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
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;
public class ExcelUtil {public static void main(String[] args){String path2003 = "";//Excel2003文件路径String path2007 = "";//Excel2007文件路径path2003 = System.getProperties().getProperty("user.dir")+File.separator+"Excel"+File.separator+"user_2003.xls";path2007 = System.getProperties().getProperty("user.dir")+File.separator+"Excel"+File.separator+"user_2007.xlsx";long start2003 = System.currentTimeMillis();System.out.println("Excel文件路径:"+path2003);List<User> list2003 = parseExcel(path2003);System.out.println("解析2003输出总人数:"+list2003.size());long end2003 = System.currentTimeMillis();System.out.println("解析Excel2003完毕!共用时"+(end2003-start2003)+"毫秒!");long start2007 = System.currentTimeMillis();System.out.println("Excel文件路径:"+path2007);List<User> list2007 = parseExcel(path2007);System.out.println("解析2007输出总人数:"+list2007.size());long end2007 = System.currentTimeMillis();System.out.println("解析Excel完毕!共用时"+(end2007-start2007)+"毫秒!");System.out.println("》》》》》》》》》》开始执行Excel文件导出:");buildXSLExcel();//导出Excel 2003buildXSLXExcel();//导出Excel 2007}/*** 根据路径加载解析Excel* @param path* @return*/public static List<User> parseExcel(String path){List<User> list = new ArrayList<User>();File file = null;InputStream input = null;Workbook workBook = null;Sheet sheet = null;if(path!=null&&path.length()>7){//判断文件是否是Excel(2003、2007)String suffix = path.substring(path.lastIndexOf("."),path.length());if (".xls".equals(suffix) || ".xlsx".equals(suffix)) {// 2003后缀或2007后缀file = new File(path);try {input = new FileInputStream(file);} catch (FileNotFoundException e) {System.out.println("未找到指定的文件!");e.printStackTrace();} catch (Exception e) {System.out.println("读取Excel文件发生异常!");e.printStackTrace();}if(!input.markSupported()){input = new PushbackInputStream(input,8);}try{if(POIFSFileSystem.hasPOIFSHeader(input) || POIXMLDocument.hasOOXMLHeader(input)){workBook = WorkbookFactory.create(input);}else{System.out.println("非法的输入流:当前输入流非OLE2流或OOXML流!");}} catch(IOException e){System.out.println("创建表格工作簿对象发生IO异常!原因:"+e.getMessage());e.printStackTrace();} catch(InvalidFormatException e){//Your InputStream was neither an OLE2 stream, nor an OOXML stream.System.out.println("非法的输入流:当前输入流非OLE2流或OOXML流!");e.printStackTrace();}try{if(workBook!=null){int numberSheet = workBook.getNumberOfSheets();if(numberSheet>0){sheet = workBook.getSheetAt(0);//获取第一个工作簿(Sheet)的内容【注意根据实际需要进行修改】list = getExcelContent(sheet);}else{System.out.println("目标表格工作簿(Sheet)数目为0!");}}input.close();}catch(IOException e){System.out.println("关闭输入流异常!"+e.getMessage());e.printStackTrace();}}else{System.out.println("非法的Excel文件后缀!");}}else{System.out.println("非法的文件路径!");}return list;}/*** 解析(读取)Excel内容* @param sheet* @return*/@SuppressWarnings("static-access")public static List<User> getExcelContent(Sheet sheet){List<User> list = new ArrayList<User>();int rowCount = sheet.getPhysicalNumberOfRows();//总行数if(rowCount>1){Row titleRow = sheet.getRow(0);//标题行for(int i=1;i<rowCount;i++){//遍历行,略过标题行,从第二行开始Row row = sheet.getRow(i);User entity = new User();for(int j=0;j<3;j++){Cell cell = row.getCell(j);if(titleRow.getCell(j).getStringCellValue().indexOf("姓名")>=0){if(cell!=null && cell.getCellType()==cell.CELL_TYPE_STRING){entity.setName(cell.getStringCellValue().trim());}}if(titleRow.getCell(j).getStringCellValue().indexOf("性别")>=0){if(cell!=null && cell.getCellType()==cell.CELL_TYPE_STRING){entity.setSex(cell.getStringCellValue().trim());}}if(titleRow.getCell(j).getStringCellValue().indexOf("年龄")>=0){if(cell!=null && cell.getCellType()==cell.CELL_TYPE_NUMERIC){entity.setAge((int)cell.getNumericCellValue());}else if(cell!=null && cell.getCellType()==cell.CELL_TYPE_STRING){entity.setAge(Integer.parseInt(cell.getStringCellValue().trim()));}}}list.add(entity);}}return list;}/*** 生成2003 Excel*/public static void buildXSLExcel(){SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmss");String now = format.format(new Date());String basePath = System.getProperties().getProperty("user.dir")+File.separator+"Excel"+File.separator;String exportFileName = "人员信息导出2003_"+now+".xls";//导出文件名List<User> list = parseExcel(basePath+"user_2003.xls");HSSFWorkbook workBook = null;String[] cellTitle = { "序号" , "姓名" , "性别" , "年龄" };try {workBook = new HSSFWorkbook();//创建工作薄HSSFSheet sheet = workBook.createSheet();workBook.setSheetName(0, "人员信息");//工作簿名称HSSFFont font = workBook.createFont();  font.setColor(HSSFFont.COLOR_NORMAL);font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);HSSFCellStyle cellStyle = workBook.createCellStyle();//创建格式cellStyle.setFont(font);cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//创建第一行标题 HSSFRow titleRow = sheet.createRow((short) 0);//第一行标题for(int i = 0,size = cellTitle.length; i < size; i++){//创建第1行标题单元格    switch(i){case 0:sheet.setColumnWidth(0, 3000);break;case 1:sheet.setColumnWidth(1,4000);break;case 2:sheet.setColumnWidth(2,4000);break;case 3:sheet.setColumnWidth(3,2000);break;}HSSFCell cell = titleRow.createCell(i,0);        cell.setCellStyle(cellStyle);cell.setCellValue(cellTitle[i]);}//从第二行开始写入数据//注:此处如果数据过多,会抛出java.lang.IllegalStateException异常:The maximum number of cell styles was exceeded. //You can define up to 4000 styles in a .xls workbook。这是是由于cell styles太多create造成,故一般可以把cellstyle设置放到循环外面if(list!=null && !list.isEmpty()){HSSFCellStyle style = workBook.createCellStyle();//创建格式for(int i=0,size=list.size();i<size;i++){User entity = list.get(i);HSSFRow row = sheet.createRow((short) i+1);for (int j = 0,length=cellTitle.length; j < length; j++) {HSSFCell cell = row.createCell(j, 0);// 在上面行索引0的位置创建单元格cell.setCellType(HSSFCell.CELL_TYPE_STRING);// 定义单元格为字符串类型switch(j){// 在单元格中输入一些内容case 0://序号cell.setCellValue(i+1);style.setAlignment(HSSFCellStyle.ALIGN_CENTER);cell.setCellStyle(style);break;case 1://姓名cell.setCellValue(entity.getName());style.setAlignment(HSSFCellStyle.ALIGN_CENTER);cell.setCellStyle(style);break;case 2://性别cell.setCellValue(String.valueOf(entity.getSex()));style.setAlignment(HSSFCellStyle.ALIGN_LEFT);cell.setCellStyle(style);break;case 3://年龄cell.setCellValue(entity.getAge());cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);style.setAlignment(HSSFCellStyle.ALIGN_LEFT);cell.setCellStyle(style);break;}}}}// 通过文件输出流生成Excel文件File file = new File(basePath+exportFileName);FileOutputStream outStream = new FileOutputStream(file);workBook.write(outStream);outStream.flush();outStream.close();System.out.println("Excel 2003文件导出完成!导出文件路径:"+file.getPath());/**** Web形式输出Excel* *//**// 表示以附件的形式把文件发送到客户端response.setHeader("Content-Disposition", "attachment;filename=" + new String((exportFileName).getBytes(), "ISO-8859-1"));//设定输出文件头response.setContentType("application/vnd.ms-excel;charset=UTF-8");// 定义输出类型 // 通过response的输出流把工作薄的流发送浏览器形成文件OutputStream outStream = response.getOutputStream();workBook.write(outStream);outStream.flush();*/}catch(IOException e){System.out.println("生成人员信息Excel发生IO 异常!"+e.getMessage());e.printStackTrace();}catch(Exception e){System.out.println("文件导出发生异常!异常原因:"+e.getMessage());e.printStackTrace();}}/*** 生成2007 Excel*/public static void buildXSLXExcel(){SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmss");String now = format.format(new Date());String basePath = System.getProperties().getProperty("user.dir")+File.separator+"Excel"+File.separator;String exportFileName = "人员信息导出2007_"+now+".xlsx";//导出文件名List<User> list = parseExcel(basePath+"user_2003.xls");XSSFWorkbook workBook = null;String[] cellTitle = { "序号" , "姓名" , "性别" , "年龄" };try {workBook = new XSSFWorkbook();//创建工作薄XSSFSheet sheet = workBook.createSheet();workBook.setSheetName(0, "人员信息");//工作簿名称XSSFFont font = workBook.createFont();  font.setColor(XSSFFont.COLOR_NORMAL);font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);XSSFCellStyle cellStyle = workBook.createCellStyle();//创建格式cellStyle.setFont(font);cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//创建第一行标题 XSSFRow titleRow = sheet.createRow((short) 0);//第一行标题for(int i = 0,size = cellTitle.length; i < size; i++){//创建第1行标题单元格    switch(i){case 0:sheet.setColumnWidth(0, 3000);break;case 1:sheet.setColumnWidth(1,4000);break;case 2:sheet.setColumnWidth(2,4000);break;case 3:sheet.setColumnWidth(3,2000);break;}XSSFCell cell = titleRow.createCell(i,0);        cell.setCellStyle(cellStyle);cell.setCellType(XSSFCell.CELL_TYPE_STRING);cell.setCellValue(cellTitle[i]);}//从第二行开始写入数据//注:此处如果数据过多,会抛出java.lang.IllegalStateException异常:The maximum number of cell styles was exceeded. //You can define up to 4000 styles in a .xls workbook。这是是由于cell styles太多create造成,故一般可以把cellstyle设置放到循环外面if(list!=null && !list.isEmpty()){XSSFCellStyle style = workBook.createCellStyle();//创建格式for(int i=0,size=list.size();i<size;i++){User entity = list.get(i);XSSFRow row = sheet.createRow((short) i+1);for (int j = 0,length=cellTitle.length; j < length; j++) {XSSFCell cell = row.createCell(j, 0);// 在上面行索引0的位置创建单元格cell.setCellType(XSSFCell.CELL_TYPE_STRING);// 定义单元格为字符串类型switch(j){// 在单元格中输入一些内容case 0://序号cell.setCellValue(i+1);style.setAlignment(XSSFCellStyle.ALIGN_CENTER);cell.setCellStyle(style);break;case 1://姓名cell.setCellValue(entity.getName());style.setAlignment(XSSFCellStyle.ALIGN_CENTER);cell.setCellStyle(style);break;case 2://性别cell.setCellValue(String.valueOf(entity.getSex()));style.setAlignment(XSSFCellStyle.ALIGN_LEFT);cell.setCellStyle(style);break;case 3://年龄cell.setCellValue(entity.getAge());cell.setCellType(XSSFCell.CELL_TYPE_NUMERIC);style.setAlignment(XSSFCellStyle.ALIGN_LEFT);cell.setCellStyle(style);break;}}}}// 通过文件输出流生成Excel文件File file = new File(basePath+exportFileName);FileOutputStream outStream = new FileOutputStream(file);workBook.write(outStream);outStream.flush();outStream.close();System.out.println("Excel 2007文件导出完成!导出文件路径:"+file.getPath());/**** Web形式输出Excel* *//**// 表示以附件的形式把文件发送到客户端response.setHeader("Content-Disposition", "attachment;filename=" + new String((exportFileName).getBytes(), "ISO-8859-1"));//设定输出文件头response.setContentType("application/vnd.ms-excel;charset=UTF-8");// 定义输出类型 // 通过response的输出流把工作薄的流发送浏览器形成文件OutputStream outStream = response.getOutputStream();workBook.write(outStream);outStream.flush();*/}catch(IOException e){System.out.println("生成人员信息Excel发生IO 异常!"+e.getMessage());e.printStackTrace();}catch(Exception e){System.out.println("文件导出发生异常!异常原因:"+e.getMessage());e.printStackTrace();}}
}
class User {private String name;private String sex;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}

OK,完毕!

转载于:https://my.oschina.net/4k9LCGA/blog/268112

使用POI导入导出Excel2003、2007示例相关推荐

  1. POI导入导出Excel数据(IDEA版)简单运用

    一.POI Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能,简单来说就是能在Java程序中导入导出W ...

  2. 通用的web系统数据导出功能设计实现(导出excel2003/2007 word pdf zip等)

    前言 我们在做web系统中,导出也是很常用的一个功能,如果每一个数据列表都要对应写一个导出的方法不太现实.现在就想设计一个共通的功能来实现这个导出. 需求分析 在开始之前我们先要明白我们要实现怎样一个 ...

  3. POI导入导出EXCEL经典实现

    1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...

  4. Java POI导入/导出(规则/非规则)excel

    Java使用poi组件导出excel报表,能导出excel报表的还可以使用jxl组件,但jxl想对于poi功能有限,jxl应该不能载excel插入浮动层图片,poi能很好的实现输出excel各种功能, ...

  5. Springboot+poi导入导出+echart 做出树状图以及饼状图

    第一步:创建springboot项目:(创建项目省略) 第二步配置:pom依赖包 <dependencies><dependency><groupId>org.sp ...

  6. POI导入导出excel表

            在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印. Apache POI是Apache软件基金会 ...

  7. JavaScript 导入导出教程与示例

    我很高兴今天有机会与您分享 JavaScript 导入和导出语句.import 语句用于导入由另一个 JavaScript 文件导出的绑定. 代码可管理性是 Web 开发中最重要的因素.如果您正在构建 ...

  8. springboot使用 poi 导入导出Excel工具类

    转载的一个比较好用的工具类 import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOE ...

  9. Poi的Excel的导入导出 支持2007

    需要导入 poi-3.7.jar commons-io-2.4.jar Excel2003导出 import java.io.File; import java.io.FileOutputStream ...

最新文章

  1. [译] RxJS: 避免 takeUntil 造成的泄露风险
  2. Kattis-What does the fox say 字符串处理+STL
  3. ubuntu 设置分辨率 亲测可用 转载的
  4. plsql删除大量数据_一次oracle大量数据删除经历
  5. Chrome TTFB中英文解释
  6. 外层div自动撑大为什么没有最大_在工业自动化行业,为什么电阻触摸屏更受欢迎...
  7. linux下获取主机信息
  8. 微信小程序云开发教程-WXML入门-条件渲染
  9. 计算机文化基础(高职高专版 第十一版)第七章 答案
  10. 上网代理设置会被自动清空_每次开机IE代理服务器都被恶意设置,删除了,下次开机又出现,反反复复。我从没设置过它...
  11. WNMP项目环境部署
  12. 正确写出doublecheck的单例模式
  13. 计算机类创新论文题目,计算机类学论文选题 计算机类论文标题怎样定
  14. c语言光敏程序代码,ADC实验之光敏传感器
  15. clannad手游汉化版_clannad游戏中文版
  16. 桌面搜索项目正式启动
  17. Java媒体框架(JMF),个人很欣赏.... (转)
  18. for迭代求折纸超过珠峰高度
  19. 屏幕序列Screen Sequences
  20. 【银行】2014年中信银行IT类笔试回忆版

热门文章

  1. 从零开始学习ASP.NET MVC1.O (第一章)
  2. SolarWinds 攻击者再次发动供应链攻击
  3. 微软:Nobelium 组织正在发动新一轮软件供应链攻击
  4. 施耐德电气的 Modicon PLC 中被曝严重漏洞,已有缓解措施
  5. android - 使用Parcelable序列化
  6. Linux上 MongoDB 实现远程连接并设置账号密码
  7. 关于使用_bstr_t的一个坑
  8. JMockit常用操作
  9. DPM 2012 R2恢复Exchange 2013单用户邮箱
  10. centOS6.6虚拟机启动后登陆界面无法显示