# Excel工具类
**Repository Path**: dd-coding/excel-tools
## Basic Information
- **Project Name**: Excel工具类
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-11-17
- **Last Updated**: 2020-12-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Excel工具类
#### 介绍
一直以来都想写一个Excel的工具类,毕竟在平时的业务开发中,尤其是管理后台的开发中,经常有Excel文档上传和下载的功能。
#### 依赖
依赖包官方文档 http://poi.apache.org/apidocs/dev/org/apache/poi/ss/usermodel/package-summary.html
依赖包:
````xml
org.apache.poi
poi
4.1.2
````
````xml
org.apache.poi
poi-ooxml
4.1.2
````
#### 读取Excel
操作过程:
1. 创建工作簿Workbook
2. 遍历sheet --> 遍历row --> 遍历column
存在的问题:大批量读取时会出现内存泄露的问题
网上给出的解决办法:先转成CSV文件在进行读取,后续继续研究一下
注意读取单元格数据时,要先判断单元格的格式,按格式读取,否则会报错,如日期类型,如果按String类型读取的话,则会报错,具体见官方文档
````
/**
* 读取单元格数据
* @param cell 单元格
* @return 返回单元格数据
*/
private static Object getCellValue(Cell cell) {
CellType cellType = cell.getCellType();
if (cellType.equals(CellType.FORMULA)) {
cellType = cell.getCachedFormulaResultType();
}
switch (cellType) {
case _NONE:
case BLANK:
case ERROR:
return "";
case BOOLEAN:
return cell.getBooleanCellValue();
case STRING:
return cell.getStringCellValue();
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
String format = cell.getCellStyle().getDataFormatString();
// format总是以“;@”结尾,具体没看明白,所以这里需要处理一下
format = format.substring(0, format.length() - 2);
Date date = cell.getDateCellValue();
return new CellDateFormatter(format).format(date);
}
return cell.getNumericCellValue();
}
return "";
}
````
#### 写入Excel
### Excel写入压缩包