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表格:读取、写入相关推荐

  1. java excel 边框_【web开发】☆★之利用POI操作Excel表格系列教程【9】单元格边框处理...

    [web开发]☆★之利用POI操作Excel表格系列教程[9]单元格边框处理 package csg.xiaoye.poidemo; import java.io.FileOutputStream; ...

  2. Java 使用 POI 操作 Excel

    Apache POI 基本介绍 Apache POI 是 Apache 软件基金会提供的 100% 开源库.支持 Excel 库的所有基本功能. 图片来源:易百教程 基本概念 在 POI 中,Work ...

  3. Java 使用 POI 操作 Excel(反射,大数据量)

    Apache POI 基本介绍 Apache POI 是 Apache 软件基金会提供的 100% 开源库.支持 Excel 库的所有基本功能. 图片来源:易百教程 基本概念 在 POI 中,Work ...

  4. java使用poi操作excel删除一整行

    java使用poi操作excel删除一整行 需求1:删除excel表格第4行 代码示例: sheet.shiftRows(4, sheet.getLastRowNum(),-1); 第一个参数为行数( ...

  5. JAVA使用POI操作Excel表,XSSF(xlsx)和HSSF(xls)

    JAVA使用POI操作Excel表,XSSF(xlsx)和HSSF(xls) *** POI的结构: ---*HSSF - 提供读写Microsoft Excel格式档案的功能. ---*XSSF - ...

  6. 【web开发】☆★之利用POI操作Excel表格系列教程【6】遍历工作簙行和列取值

    [web开发]☆★之利用POI操作Excel表格系列教程[6]遍历工作簙行和列取值 package com.xiaoye.demo; import java.io.FileInputStream; i ...

  7. 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 ...

  8. java中poi导出Excel表格(前台流文件接收)

    java中poi导出Excel表格,前端以流的方式接收,而非直接生成文件再下载,解决多台服务器部署后,路径地址不统一导致的下载问题. 生成Excel示例图: 2.代码说明 ① 在上次的基础上增加了底部 ...

  9. Java使用poi操作excel注意事项

    Java使用poi操作excel注意事项 1.如果只需要获取sheet信息,用流模式打开文件即可获取,消耗内存少 2.上传的文件需要校验,防止Excel包含异常的缓存文件,缓存文件可能会有几百兆,会瞬 ...

最新文章

  1. [干货]Kaggle热门 | 用一个框架解决所有机器学习难题
  2. kubernetes1.4版本遇到的坑
  3. aspen二元体系共沸组分_超详细 | 手把手教你组分结构预测
  4. 硬核机械手!失去手指的机械工程师独立打造
  5. 升级完ssh之后login incorrect怎么解决_魔兽世界怀旧服:伏击搜索流,盗贼另类升级刷钱方法简单攻略...
  6. 因为应用程序正在发送一个输入同步呼叫,所以无法执行传出的呼叫 -- 解决方法...
  7. iphone转android通讯录,苹果IPHONE通讯录电话簿转到安卓手机csv,vcf方法(ITUNES,OUTLOOK,EXCEL)...
  8. 9. 机器人正运动学---修改DH参数
  9. 学习Bash shell编程资料推荐
  10. HTML table border 属性
  11. Codeforces 821B Okabe and Banana Trees 题解
  12. 甲骨文数据库购买的价格(三)-附x86价格
  13. 彩旗飘飘 彩灯烁烁的桥
  14. JavaScript - 你见过 [].slice.call() 吗?
  15. 面试!四川我要去哪儿网!
  16. paydex什么币-区块链钱包
  17. WebRTC实现多人视频聊天
  18. 2016年终总结,碌碌无为的一年
  19. 做车牌识别的摄像头注意事项
  20. 建议收藏!PyCharm快捷键大全

热门文章

  1. 用凯泽窗设计FIR滤波器的优点
  2. vue中h5项目怎么使用weui
  3. 计算机丢失d3dx935.dll,d3dx9_39.dll
  4. 03 数据契约_03 数据契约层级(DataContract Hierarchy)
  5. 锁定计算机后如何不黑屏,电脑锁屏后开不了机怎么办 电脑锁屏后开不了机解决方法【详解】...
  6. 回看腾讯这些年(文末有感)
  7. 宁波市第32届中小学生程序设计竞赛(初中组) 公鸡打鸣
  8. DbVisualizer 连接AS400
  9. 华为android9使用外置存储卡,华为Mate 9支持扩展储存卡吗?支持多大储存卡?
  10. 汽车诊断协议ISO15765