Java 通过POI 操作excel表格:读取、写入
Java操作excel表格是很常见的,在下面的例子中我将展示使用Java如何对excel进行读取和写入操作。(我是在ssm中实现的)
一、导入依赖
(如果是在普通Java项目中需要导入相应jar包)
相应的jar包以及demo测试下载:
链接: https://pan.baidu.com/s/1M5ce–CxOKKMuFtpsWXQfg
提取码:abcy
我还是建议导入依赖来实现。
<!-- 引入poi,解析workbook视图 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.12</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.12</version></dependency>
二、编写工具类,实现读写功能
package com.qcby.test;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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.ss.usermodel.Workbook;
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;/*** @author TEZ*/
public class ExcelUtil {//默认单元格内容为数字时格式private static DecimalFormat df = new DecimalFormat("0");// 默认单元格格式化日期字符串 private static SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); // 格式化数字private static DecimalFormat nf = new DecimalFormat("0.00"); //向文件中写入public static ArrayList<ArrayList<Object>> readExcel(File file){if(file == null){return null;}if(file.getName().endsWith("xlsx")){//处理ecxel2007return readExcel2007(file);}else{//处理ecxel2003return readExcel2003(file);}}/** @return 将返回结果存储在ArrayList内,存储结构与二位数组类似* lists.get(0).get(0)表示过去Excel中0行0列单元格*/public static ArrayList<ArrayList<Object>> readExcel2003(File file){try{ArrayList<ArrayList<Object>> rowList = new ArrayList<ArrayList<Object>>();ArrayList<Object> colList;HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(file));HSSFSheet sheet = wb.getSheetAt(0);HSSFRow row;HSSFCell cell;Object value;for(int i = sheet.getFirstRowNum() , rowCount = 0; rowCount < sheet.getPhysicalNumberOfRows() ; i++ ){row = sheet.getRow(i);colList = new ArrayList<Object>();if(row == null){//当读取行为空时if(i != sheet.getPhysicalNumberOfRows()){//判断是否是最后一行rowList.add(colList);}continue;}else{rowCount++;}for( int j = row.getFirstCellNum() ; j <= row.getLastCellNum() ;j++){cell = row.getCell(j);if(cell == null || cell.getCellType() == HSSFCell.CELL_TYPE_BLANK){//当该单元格为空if(j != row.getLastCellNum()){//判断是否是该行中最后一个单元格colList.add("");}continue;}switch(cell.getCellType()){case XSSFCell.CELL_TYPE_STRING: System.out.println(i + "行" + j + " 列 is String type"); value = cell.getStringCellValue(); break; case XSSFCell.CELL_TYPE_NUMERIC: 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.println(i + "行" + j + " 列 is Number type ; DateFormt:" + value.toString()); break; case XSSFCell.CELL_TYPE_BOOLEAN: System.out.println(i + "行" + j + " 列 is Boolean type"); value = Boolean.valueOf(cell.getBooleanCellValue());break; case XSSFCell.CELL_TYPE_BLANK: System.out.println(i + "行" + j + " 列 is Blank type"); value = ""; break; default: System.out.println(i + "行" + j + " 列 is default type"); value = cell.toString(); }// end switchcolList.add(value);}//end for jrowList.add(colList);}//end for ireturn rowList;}catch(Exception e){return null;}}public static ArrayList<ArrayList<Object>> readExcel2007(File file){try{ArrayList<ArrayList<Object>> rowList = new ArrayList<ArrayList<Object>>();ArrayList<Object> colList;XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(file));XSSFSheet sheet = wb.getSheetAt(0);XSSFRow row;XSSFCell cell;Object value;for(int i = sheet.getFirstRowNum() , rowCount = 0; rowCount < sheet.getPhysicalNumberOfRows() ; i++ ){row = sheet.getRow(i);colList = new ArrayList<Object>();if(row == null){//当读取行为空时if(i != sheet.getPhysicalNumberOfRows()){//判断是否是最后一行rowList.add(colList);}continue;}else{rowCount++;}for( int j = row.getFirstCellNum() ; j <= row.getLastCellNum() ;j++){cell = row.getCell(j);if(cell == null || cell.getCellType() == HSSFCell.CELL_TYPE_BLANK){//当该单元格为空if(j != row.getLastCellNum()){//判断是否是该行中最后一个单元格colList.add("");}continue;}switch(cell.getCellType()){case XSSFCell.CELL_TYPE_STRING: System.out.println(i + "行" + j + " 列 is String type"); value = cell.getStringCellValue(); break; case XSSFCell.CELL_TYPE_NUMERIC: 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.println(i + "行" + j + " 列 is Number type ; DateFormt:" + value.toString()); break; case XSSFCell.CELL_TYPE_BOOLEAN: System.out.println(i + "行" + j + " 列 is Boolean type"); value = Boolean.valueOf(cell.getBooleanCellValue());break; case XSSFCell.CELL_TYPE_BLANK: System.out.println(i + "行" + j + " 列 is Blank type"); value = ""; break; default: System.out.println(i + "行" + j + " 列 is default type"); value = cell.toString(); }// end switchcolList.add(value);}//end for jrowList.add(colList);}//end for ireturn rowList;}catch(Exception e){System.out.println("exception");return null;}}//文件读取public static void writeExcel(ArrayList<ArrayList<Object>> result,String path){if(result == null){System.out.println("未添加内容!");return;}File Cfile = new File(path);Workbook wb = null;HSSFSheet sheet_xls = null;XSSFSheet sheet_xlsx = null;if(Cfile.getName().endsWith("xls")){wb = new HSSFWorkbook();sheet_xls = (HSSFSheet) wb.createSheet("sheet1");for(int i = 0 ;i < result.size() ; i++){HSSFRow row = sheet_xls.createRow(i + 1);if(result.get(i) != null){for(int j = 0; j < result.get(i).size() ; j ++){HSSFCell cell = row.createCell(j);cell.setCellValue(result.get(i).get(j).toString());}}}}if(Cfile.getName().endsWith("xlsx")){wb = new XSSFWorkbook();sheet_xlsx = (XSSFSheet) wb.createSheet("sheet1");for(int i = 0 ;i < result.size() ; i++){XSSFRow row = sheet_xlsx.createRow(i + 1);if(result.get(i) != null){for(int j = 0; j < result.get(i).size() ; j ++){XSSFCell cell = row.createCell(j);cell.setCellValue(result.get(i).get(j).toString());}}}}ByteArrayOutputStream os = new ByteArrayOutputStream();try{wb.write(os);} catch (IOException e){e.printStackTrace();}byte[] content = os.toByteArray();File file = new File(path);//Excel文件生成后存储的位置。OutputStream fos = null;try{fos = new FileOutputStream(file);fos.write(content);os.close();fos.close();}catch (Exception e){e.printStackTrace();} }public static DecimalFormat getDf() {return df;}public static void setDf(DecimalFormat df) {ExcelUtil.df = df;}public static SimpleDateFormat getSdf() {return sdf;}public static void setSdf(SimpleDateFormat sdf) {ExcelUtil.sdf = sdf;}public static DecimalFormat getNf() {return nf;}public static void setNf(DecimalFormat nf) {ExcelUtil.nf = nf;}
}
三、测试
测试读取(写入可自行尝试):
package com.qcby.test;import java.io.File;
import java.util.ArrayList;/*** @author TEZ*/
public class ReadExcel {public static void main(String[] args) {File file = new File("E:/java.xlsx");ArrayList<ArrayList<Object>> result = ExcelUtil.readExcel(file);if (result == null) {System.out.println("文件不存在:请检查路径是否正确!");return;} else if (result.size() == 0) {System.out.println("文件内容为空!");return;} else {for (int i = 0; i < result.size(); i++) {System.out.println("\n");for (int j = 0; j < result.get(i).size(); j++) {System.out.print(result.get(i).get(j).toString() + " ");}}System.out.println("\n");}}
}
Java 通过POI 操作excel表格:读取、写入相关推荐
- java excel 边框_【web开发】☆★之利用POI操作Excel表格系列教程【9】单元格边框处理...
[web开发]☆★之利用POI操作Excel表格系列教程[9]单元格边框处理 package csg.xiaoye.poidemo; import java.io.FileOutputStream; ...
- Java 使用 POI 操作 Excel
Apache POI 基本介绍 Apache POI 是 Apache 软件基金会提供的 100% 开源库.支持 Excel 库的所有基本功能. 图片来源:易百教程 基本概念 在 POI 中,Work ...
- Java 使用 POI 操作 Excel(反射,大数据量)
Apache POI 基本介绍 Apache POI 是 Apache 软件基金会提供的 100% 开源库.支持 Excel 库的所有基本功能. 图片来源:易百教程 基本概念 在 POI 中,Work ...
- java使用poi操作excel删除一整行
java使用poi操作excel删除一整行 需求1:删除excel表格第4行 代码示例: sheet.shiftRows(4, sheet.getLastRowNum(),-1); 第一个参数为行数( ...
- JAVA使用POI操作Excel表,XSSF(xlsx)和HSSF(xls)
JAVA使用POI操作Excel表,XSSF(xlsx)和HSSF(xls) *** POI的结构: ---*HSSF - 提供读写Microsoft Excel格式档案的功能. ---*XSSF - ...
- 【web开发】☆★之利用POI操作Excel表格系列教程【6】遍历工作簙行和列取值
[web开发]☆★之利用POI操作Excel表格系列教程[6]遍历工作簙行和列取值 package com.xiaoye.demo; import java.io.FileInputStream; i ...
- execle java,Java使用POI操作Excel
Java使用POI操作Excel 1. POI操作Excel 1.1. 依赖 org.apache.poi poi 4.1.0 org.apache.poi poi-ooxml 4.1.0 org.a ...
- java中poi导出Excel表格(前台流文件接收)
java中poi导出Excel表格,前端以流的方式接收,而非直接生成文件再下载,解决多台服务器部署后,路径地址不统一导致的下载问题. 生成Excel示例图: 2.代码说明 ① 在上次的基础上增加了底部 ...
- Java使用poi操作excel注意事项
Java使用poi操作excel注意事项 1.如果只需要获取sheet信息,用流模式打开文件即可获取,消耗内存少 2.上传的文件需要校验,防止Excel包含异常的缓存文件,缓存文件可能会有几百兆,会瞬 ...
最新文章
- [干货]Kaggle热门 | 用一个框架解决所有机器学习难题
- kubernetes1.4版本遇到的坑
- aspen二元体系共沸组分_超详细 | 手把手教你组分结构预测
- 硬核机械手!失去手指的机械工程师独立打造
- 升级完ssh之后login incorrect怎么解决_魔兽世界怀旧服:伏击搜索流,盗贼另类升级刷钱方法简单攻略...
- 因为应用程序正在发送一个输入同步呼叫,所以无法执行传出的呼叫 -- 解决方法...
- iphone转android通讯录,苹果IPHONE通讯录电话簿转到安卓手机csv,vcf方法(ITUNES,OUTLOOK,EXCEL)...
- 9. 机器人正运动学---修改DH参数
- 学习Bash shell编程资料推荐
- HTML table border 属性
- Codeforces 821B Okabe and Banana Trees 题解
- 甲骨文数据库购买的价格(三)-附x86价格
- 彩旗飘飘 彩灯烁烁的桥
- JavaScript - 你见过 [].slice.call() 吗?
- 面试!四川我要去哪儿网!
- paydex什么币-区块链钱包
- WebRTC实现多人视频聊天
- 2016年终总结,碌碌无为的一年
- 做车牌识别的摄像头注意事项
- 建议收藏!PyCharm快捷键大全
热门文章
- 用凯泽窗设计FIR滤波器的优点
- vue中h5项目怎么使用weui
- 计算机丢失d3dx935.dll,d3dx9_39.dll
- 03 数据契约_03 数据契约层级(DataContract Hierarchy)
- 锁定计算机后如何不黑屏,电脑锁屏后开不了机怎么办 电脑锁屏后开不了机解决方法【详解】...
- 回看腾讯这些年(文末有感)
- 宁波市第32届中小学生程序设计竞赛(初中组) 公鸡打鸣
- DbVisualizer 连接AS400
- 华为android9使用外置存储卡,华为Mate 9支持扩展储存卡吗?支持多大储存卡?
- 汽车诊断协议ISO15765