<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
</dependency>
</dependencies>
import java.io.*;
import java.util.*;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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.xssf.usermodel.XSSFWorkbook; public class ExcelUtil { public static List<List<String>> readExcel(String filePath) {
List<List<String>> dataLst = null;
InputStream is = null;
try {
//验证文件是否合法
if (!validateExcel(filePath)) {
return null;
}
// 判断文件的类型,是2003还是2007
boolean isExcel2003 = true;
if (isExcel2007(filePath)) {
isExcel2003 = false;
}
// 调用本类提供的根据流读取的方法
File file = new File(filePath);
is = new FileInputStream(file);
dataLst = read(is, isExcel2003); } catch (Exception ex) {
ex.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
is = null;
e.printStackTrace();
}
}
} return dataLst;
} private static List<List<String>> read(InputStream inputStream, boolean isExcel2003) {
List<List<String>> dataLst = null;
try {
//根据版本选择创建Workbook的方式
Workbook wb = null;
if (isExcel2003) {
wb = new HSSFWorkbook(inputStream);
} else {
wb = new XSSFWorkbook(inputStream);
}
dataLst = read(wb);
} catch (IOException e) {
e.printStackTrace();
}
return dataLst;
} private static List<List<String>> read(Workbook wb) {
int totalRows = ;
int totalCells = ;
List<List<String>> dataLst = new ArrayList<List<String>>();
// 得到第一个shell
Sheet sheet = wb.getSheetAt();
// 得到Excel的行数
totalRows = sheet.getPhysicalNumberOfRows();
// 得到Excel的列数
if (totalRows >= && sheet.getRow() != null) {
totalCells = sheet.getRow().getPhysicalNumberOfCells();
}
//遍历行
for (int r = ; r < totalRows; r++) {
Row row = sheet.getRow(r);
if (row == null) {
continue;
}
List<String> rowLst = new ArrayList<String>();
//遍历列
for (int c = ; c < totalCells; c++) {
Cell cell = row.getCell(c);
String cellValue = "";
if (null != cell) {
// 以下是判断数据的类型
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC: // 数字
cellValue = cell.getNumericCellValue() + "";
break;
case HSSFCell.CELL_TYPE_STRING: // 字符串
cellValue = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
cellValue = cell.getBooleanCellValue() + "";
break;
case HSSFCell.CELL_TYPE_FORMULA: // 公式
cellValue = cell.getCellFormula() + "";
break;
case HSSFCell.CELL_TYPE_BLANK: // 空值
cellValue = "";
break;
case HSSFCell.CELL_TYPE_ERROR: // 故障
cellValue = "非法字符";
break;
default:
cellValue = "未知类型";
break;
}
}
rowLst.add(cellValue);
}
// 保存第r行的第c列
dataLst.add(rowLst);
}
return dataLst;
} private static boolean validateExcel(String filePath) {
// 检查文件名是否为空或者是否是Excel格式的文件
if (filePath == null || !(isExcel2003(filePath) || isExcel2007(filePath))) {
return false;
}
// 检查文件是否存在
File file = new File(filePath);
if (file == null || !file.exists()) {
return false;
}
return true;
} private static boolean isExcel2003(String filePath) {
return filePath.matches("^.+\\.(?i)(xls)$");
} private static boolean isExcel2007(String filePath) {
return filePath.matches("^.+\\.(?i)(xlsx)$");
} public static void writeExcel(List<List<String>> dataList, String finalXlsxPath){
OutputStream out = null;
try { // 读取Excel文档
File finalXlsxFile = new File(finalXlsxPath);
Workbook workBook = getWorkbok(finalXlsxFile);
// sheet 对应一个工作页
Sheet sheet = workBook.getSheetAt(); //删除原有数据,除了属性列
int rowNumber = sheet.getLastRowNum();
for (int i = ; i <= rowNumber; i++) {
Row row = sheet.getRow(i);
sheet.removeRow(row);
} // 创建文件输出流,输出电子表格:这个必须有,否则你在sheet上做的任何操作都不会有效
out = new FileOutputStream(finalXlsxPath);
workBook.write(out); //写一行
for (int j = ; j < dataList.size(); j++) {
Row row = sheet.createRow(j); //写一列
List<String> datas = dataList.get(j);
for (int k=; k<datas.size(); k++) {
row.createCell(k).setCellValue(datas.get(k));
}
} // 创建文件输出流,准备输出电子表格:这个必须有,否则你在sheet上做的任何操作都不会有效
out = new FileOutputStream(finalXlsxPath);
workBook.write(out);
System.out.println("数据导出成功");
} catch (Exception e) {
System.out.println("请创建一个空文件");
e.printStackTrace();
} finally{
try {
if(out != null){
out.flush();
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
} } private static final String EXCEL_XLS = "xls";
private static final String EXCEL_XLSX = "xlsx"; private static Workbook getWorkbok(File file) throws IOException{
Workbook wb = null;
FileInputStream in = new FileInputStream(file);
if(file.getName().endsWith(EXCEL_XLS)){ //Excel&nbsp;2003
wb = new HSSFWorkbook(in);
}else if(file.getName().endsWith(EXCEL_XLSX)){ // Excel 2007/2010
wb = new XSSFWorkbook(in);
}
return wb;
} }
import java.util.ArrayList;
import java.util.List; public class Test { public static void main(String[] args) {
List<List<String>> resultList = ExcelUtil.readExcel("H:/data.xlsx");
if (resultList != null) {
for (int i = ; i < resultList.size(); i++) {
System.out.print("第" + (i) + "行");
List<String> cellList = resultList.get(i); for (int j = ; j < cellList.size(); j++) {
System.out.print(" " + cellList.get(j));
}
System.out.println();
} } //把读取的结果在写回去
ExcelUtil.writeExcel(resultList, "H:/result.xlsx");
}
}

Java读写Excel的更多相关文章

  1. C++读写EXCEL文件OLE,java读写excel文件POI 对比

    C++读写EXCEL文件方式比较 有些朋友问代码的问题,将OLE读写的代码分享在这个地方,大家请自己看.http://www.cnblogs.com/destim/p/5476915.html C++ ...

  2. Java读写Excel之POI超入门

    转自:http://rensanning.iteye.com/blog/1538591 Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给J ...

  3. Java读写Excel之POI超入门(转)

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能.Apache POI ...

  4. Java 读写 excel 实战完全解析

    本文微信公众号「AndroidTraveler」首发. 背景 时值毕业季,很多毕业生初入职场. 因此,这边也写了一些新手相关的 Android 技术点. 比如上一篇的 Android 开发你需要了解的 ...

  5. java读写excel文件

    近期处理的数据规模比较大,正好又是统计合并的事情,想着借助excel就可以完成了,然后就了解了下java读取excel的事情. 读取的文件主要分两类:xls文件.xlsx文件.xls文件的相关操作用的 ...

  6. 利用java读写Excel文件

    一.读取Excel文件内容 java 代码 public static String readExcel(File file){ StringBuffer sb = new StringBuffer( ...

  7. java读写excel文件( POI解析Excel)

    package com.zhx.base.utils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi ...

  8. JAVA 读写Excel

    ExcelUtil.java package pers.kangxu.datautils.utils; import java.io.File; import java.io.FileInputStr ...

  9. Java读写Excel文件,利用POI

    直接看工具类代码吧, package com.example.demo.util; import com.example.demo.entity.ExcelDataVO; import org.apa ...

随机推荐

  1. win7 eclipse设置Courier New字体

    win7系统 1.控制面板-->字体.找到Courier New 字体,右键->显示,这种字体就开始变亮了. 2.eclipse里设置: windows-->Preferences- ...

  2. Ubuntu16.04桌面版 连接到ftp服务器

    Ftp服务器在不同的网段,需要临时添加网段 不同网段临时添加方法: root@xzrs:/home/rxf# ip addr add 10.1.2.127/24 dev enp0s25 电脑左侧“连接 ...

  3. 【c++ primer, 5e】参数传递

    p187~p199: [传值参数] [传引用参数] 使用引用形参返回额外信息:传入一个(或者多个)额外的引用实参,令其保存字符出现的次数. 6.11 #include <iostream> ...

  4. jQuery与直接写JS的区别详细解析

    jQuery代码具体的写法和原生的Javascript写法在执行常见操作时的区别如下所示.需要的朋友可以过来参考下     要使用jQuery,首先要在HTML代码最前面加上对jQuery库的引用,比 ...

  5. spring boot开发为什么使用jar包

    spring boot既可以打成war发布,也可以找成jar包发布. jar包:直接通过内置tomcat运行,不需要额外安装tomcat.如需修改内置tomcat的配置,只需要在spring boot ...

  6. 20145303刘俊谦 《Java程序设计》第三周学习总结

    20145303刘俊谦 <Java程序设计>第三周学习总结 教材学习内容总结 1.类与对象: 类:对现实生活中事物的描述,定义类时用关键词class 对象:这类事物实实在在存在的个体,利用 ...

  7. springboot访问jsp页面

    1.新建springboot项目,选择以war包的方式package;   image 2.勾选Web模块,DevTools可不选(用作热部署,不影响运行)   image 3.创建完成后,项目结构如 ...

  8. CentOS7安装GNOME可视化界面

    1.首先安装X(X Window System),命令为 yum groupinstall "X Window System" 回车(注意有引号)   1CentOS Linux系 ...

  9. Sublime 快捷键及使用技巧

    (1)打开刚刚关闭的窗口:ctrl+shift+T 默认设置. (2)全屏显示:F11 默认设置. (3)多处选择相同的词:Ctrl+D,回退选择Ctrl+U 默认设置,非常有用,可以试试. (4)取 ...

  10. nginx解决跨域问题

    背景:由于公司有个项目是.net写的,但是开发人员已经离职好久了.老项目也不怎么变动就没有招新人,于是乎就把项目交接给了一位php开发人员. 今天那位php开发人员跑过来,说https://wap.a ...