poi上传解析execl
来源:互联网 发布:淘宝限时抢购在哪 编辑:程序博客网 时间:2024/05/24 06:48
工具类:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.FilenameUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellValue;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
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;
/**
* Excel组件
*
* @author Snowolf
* @version 1.0
* @since 1.0
*/
public abstract class ExcelHelper {
/**
* Excel 2003
*/
private final static String XLS = "xls";
/**
* Excel 2007
*/
private final static String XLSX = "xlsx";
/**
* 分隔符
*/
private final static String SEPARATOR = "@@";
/**
* 由Excel文件的Sheet导出至List
*
* @param file
* @param sheetNum
* @return
*/
public static List<String> exportListFromExcel(File file, int sheetNum)
throws IOException {
return exportListFromExcel(new FileInputStream(file),
FilenameUtils.getExtension(file.getName()), sheetNum);
}
/**
* 由Excel流的Sheet导出至List
*
* @param is
* @param extensionName
* @param sheetNum
* @return
* @throws IOException
*/
public static List<String> exportListFromExcel(InputStream is,
String extensionName, int sheetNum) throws IOException {
Workbook workbook = null;
if (extensionName.toLowerCase().equals(XLS)) {
workbook = new HSSFWorkbook(is);
} else if (extensionName.toLowerCase().equals(XLSX)) {
workbook = new XSSFWorkbook(is);
}
return exportListFromExcel(workbook, sheetNum);
}
/**
* 由指定的Sheet导出至List
*
* @param workbook
* @param sheetNum
* @return
* @throws IOException
*/
private static List<String> exportListFromExcel(Workbook workbook,
int sheetNum) {
Sheet sheet = workbook.getSheetAt(sheetNum);
// 解析公式结果
FormulaEvaluator evaluator = workbook.getCreationHelper()
.createFormulaEvaluator();
List<String> list = new ArrayList<String>();
int minRowIx = sheet.getFirstRowNum();
int maxRowIx = sheet.getLastRowNum();
short maxColIx = 0;
for (int rowIx = minRowIx; rowIx <= maxRowIx; rowIx++) {
Row row = sheet.getRow(rowIx);
StringBuilder sb = new StringBuilder();
//short minColIx = row.getFirstCellNum();
short minColIx = 0;
if(maxColIx==0){
maxColIx = row.getLastCellNum();
}
for (short colIx = minColIx; colIx <= maxColIx; colIx++) {
Cell cell = row.getCell(new Integer(colIx));
CellValue cellValue = evaluator.evaluate(cell);
if (cellValue == null) {
if(colIx != maxColIx){
sb.append(SEPARATOR + " ");
}
continue;
}
// 经过公式解析,最后只存在Boolean、Numeric和String三种数据类型,此外就是Error了
// 其余数据类型,根据官方文档,完全可以忽略http://poi.apache.org/spreadsheet/eval.html
switch (cellValue.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
sb.append(SEPARATOR + cellValue.getBooleanValue());
break;
case Cell.CELL_TYPE_NUMERIC:
// 这里的日期类型会被转换为数字类型,需要判别后区分处理
if (DateUtil.isCellDateFormatted(cell)) {
sb.append(SEPARATOR + cell.getDateCellValue());
} else {
DecimalFormat df = new DecimalFormat("0");
double nv = cellValue.getNumberValue();
if((int)nv == nv){
sb.append(SEPARATOR + df.format(cellValue.getNumberValue()));
}else{
sb.append(SEPARATOR + cellValue.getNumberValue());
}
}
break;
case Cell.CELL_TYPE_STRING:
sb.append(SEPARATOR + cellValue.getStringValue());
break;
case Cell.CELL_TYPE_FORMULA:
break;
case Cell.CELL_TYPE_BLANK:
break;
case Cell.CELL_TYPE_ERROR:
break;
default:
break;
}
}
list.add(sb.toString());
}
return list;
}
}
调用:
List<String> list = null;
list = ExcelHelper.exportListFromExcel(new File(saveDirectoryPath+"/"+fileName), 0);
- poi上传解析execl
- POI:上传EXCEL解析
- poi生成execl综合
- POI,java导出execl
- poi导出execl
- poi导出execl
- Java POI操作execl
- spingmvc 上传文件, poi解析xls,xlsx
- POI读取execl的工具类:ExcelReader(解析Excel的工具类)
- poi操作execl具体方法
- java poi导出execl类
- Java POI 读取 Execl 图片
- poi设置execl打印样式
- poi方式操作execl具体方法
- POI:使用EXECL模板 填入数据
- java poi 处理execl中Date问题
- springmvc结合poI实现Execl导出
- java poi实现execl三级联动
- Scala深入浅出实战经典:1,Scala开发环境搭建和HelloWorld解析
- 模板维护-模板解析
- af_inet 与 pf_packet
- iOS自定义cell导致数据加载混乱
- IOS navigation 返回按钮 不显示文字
- poi上传解析execl
- parcelable接口
- c++带默认参数的函数的声明、定义及使用总结
- PYTHON 双引号 单引号 多引号区别
- 斯坦福大学iOS8公开课笔记03—自动引用计数(ARC)、static、属性观察器、惰性实例化
- 由一个梦想到的
- 简单的跑马灯效果
- java 二维数组格式化显示
- 微信开发从入门到精通教程大全 资料大全 java和php版本;教程文档、代码、视频 微信商城实例