【Java】导入/导出数据到excel表格
在做这些之前你可能还需要导入相应的依赖
<!-- ository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
导出
如果使用POI从Java中导出数据到excel表格只需要非常简单的步骤:
- 创建一个workbook
我的理解就是新建一个工作空间,即excel文件。 - 创建一个sheet
这个就是excel中的sheet - 创建一个row
顾名思义,一个新的列 - 创建一个cell
每列中的单元格 - 往cell里面填充数据
- 重复3-5
Demo
奉上一个简单的Demo,注释里面写的很清楚,相信可以做到一看就懂。
public class ExportDemo {
private static final List<UserInformation> userInformationList = Arrays
.asList(new UserInformation("张飞", "三哥@sg.com", 14),
new UserInformation("刘备", "大弟@sg.com", 28),
new UserInformation("关羽", "二哥@sg.com", 27));
private static final String[] titles = {"序号", "用户名", "邮箱", "年龄"};
public static void main(String[] args) {
//创建一个workbook
XSSFWorkbook workbook = new XSSFWorkbook();
//创建一个sheet
XSSFSheet sheet = workbook.createSheet("sheet");
//创建一列
XSSFRow row = null;
//创建一个单元格
XSSFCell cell = null;
try {
//设置标题
row = sheet.createRow(0);
for (int i = 0; i < titles.length; i++) {
//创建单元格
cell = row.createCell(i);
cell.setCellValue(titles[i]);
}
//设置内容
for (int i = 0; i < userInformationList.size(); i++) {
//获取实例
UserInformation userInformation = userInformationList.get(i);
//设置序号
int index = i + 1;
row = sheet.createRow(index);
//将序号内容存入单元格
row.createCell(0).setCellValue(index);
//将用户名内容存入单元格
if (StringUtils.isNotBlank(userInformation.getUsername())) {
row.createCell(1).setCellValue(userInformation.getUsername());
}
//将邮箱内容存入单元格
if (StringUtils.isNotBlank(userInformation.getEmail())) {
row.createCell(2).setCellValue(userInformation.getEmail());
}
//将年龄内容存入单元格
if (null != userInformation.getAge()) {
row.createCell(3).setCellValue(userInformation.getAge());
}
}
FileOutputStream out = new FileOutputStream("h:\\workbook.xls");
try {
workbook.write(out);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
结果:
导入
如果使用POI从excel表格中导入数据到java,道理同导出类似,只不过使用不同的api。
Demo
public static void main(String[] args) {
String[][] dateStrings = new String[0][];
try (FileInputStream fileInputStream = new FileInputStream("a.xls")) {
dateStrings = importExcel(fileInputStream);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(dateStrings);
}
private static String[][] importExcel(InputStream inputStream) throws IOException {
// 获取 workbook
Workbook workbook = new XSSFWorkbook(inputStream);
// 获取 sheet
Sheet sheet = workbook.getSheetAt(0);
// 总行数
int totalRows = sheet.getLastRowNum() + 1;
// 总列数
int totalColumn = sheet.getRow(0).getPhysicalNumberOfCells();
// 二维String数组来存储数据
String[][] tableData = new String[totalRows][totalColumn];
for (int r = 0; r < totalRows; r++) {
// 获得 行 row
Row row = sheet.getRow(r);
String[] rowData = new String[totalColumn];
for (int c = 0; c < totalColumn; c++) {
// 获取 单元格 cell
Cell cell = row.getCell(c);
// 获取单元格元素类型
CellType type = cell.getCellTypeEnum();
String cellVal;
switch (type) {
case STRING:
cellVal = cell.getStringCellValue().trim();
break;
case NUMERIC:
double val = cell.getNumericCellValue();
cellVal = String.valueOf(val);
double valDiv = val % 1.0;
if (valDiv == 0) {
cellVal = String.valueOf((long) val);
}
break;
case BOOLEAN:
cellVal = String.valueOf(cell.getBooleanCellValue());
break;
default:
cellVal = "";
break;
}
rowData[c] = cellVal;
}
tableData[r] = rowData;
}
return tableData;
}
结果:
工具类
- 自定义
市面上有很多开源的工具类,非常的方便,虽然不提倡反复的造轮子,但是再造轮子的过程中,可以让自己提升,下面的链接时笔者自己开发的一个工具类,非常简单,也做了很多注释。希望可以帮到大家。
- hutool
hutool是非常强大的工具包,里面也有相应的工具类可以使用。