java 读excel包括不同版本读取,读合并单元格和读公式
2015-08-26 14:05
501 查看
public String readPersonExcel(FileItem item,String reportType,int startRow) {
UPLOADREPORT = null; // 需自定义
String flag = "";
ArrayList<ReportBean> list = new ArrayList<ReportBean>(); // <RoadBean>需自定义
try {
InputStream excelResource = item.getInputStream();
Workbook rwb = WorkbookFactory.create(excelResource);
// 判断文件是什么格式 2003/2007 根据版本不同 处置对象也不同
Sheet rs = rwb.getSheetAt(0);
// FormulaEvaluator evaluator = rwb.getCreationHelper().createFormulaEvaluator();
int rows = rs.getPhysicalNumberOfRows();
// 得到一个sheet中有多少个合并单元格
int sheetmergerCount = rs.getNumMergedRegions();
for(int i = 0 ; i < sheetmergerCount ; i++){
Row row = rs.getRow(i);
CellRangeAddress ca = rs.getMergedRegion(i);
int firstColumn = ca.getFirstColumn();
int lastColumn = ca.getLastColumn();
int firstRow = ca.getFirstRow();
int lastRow = ca.getLastRow();
int cha=lastRow-firstRow;
Row fRow = rs.getRow(firstRow);
Cell fCell = fRow.getCell(firstColumn);
for(int n=firstRow;n<=lastRow;n++)
{
for(int m=firstColumn;m<=lastColumn;m++)
{
switch (fCell.getCellType()) {
case Cell.CELL_TYPE_FORMULA:
//str =cell.getCellFormula();
try {
rs.getRow(n).getCell(m).setCellValue(fCell.getNumericCellValue());//可以算出有公式的
} catch (IllegalStateException e) {
rs.getRow(n).getCell(m).setCellValue(fCell.getRichStringCellValue());
}
break;
case Cell.CELL_TYPE_NUMERIC:
if(HSSFDateUtil.isCellDateFormatted(fCell)){
rs.getRow(n).getCell(m).setCellValue(fCell.getDateCellValue());
}else{
rs.getRow(n).getCell(m).setCellValue(fCell.getNumericCellValue());
}
break;
case Cell.CELL_TYPE_STRING:
rs.getRow(n).getCell(m).setCellValue(fCell.getStringCellValue());
break;
case Cell.CELL_TYPE_BOOLEAN:
rs.getRow(n).getCell(m).setCellValue(fCell.getBooleanCellValue());
break;
default:
}
}
}
}
ReportBean bean; // 需自定义
int endRow=rows;
if("57".equals(reportType))
{
if(rows < 20){
bean = new ReportBean();
bean.setExcelTemplate("1");
list.add(bean);
UPLOADREPORT = list; // 需自定义
return flag;
}
for (int i = 4; i < rows; i++) {
Row row = rs.getRow(i);
int cols = row.getPhysicalNumberOfCells();
//判断所读取的excel文件的列数是否与模板一致
if(cols != 16){
bean = new ReportBean();
bean.setExcelTemplate("1");
list.add(bean);
UPLOADREPORT = list; // 需自定义
return flag;
}
bean = new ReportBean(); // 需自定义
for (int j = 0; j < cols; j++) {
Cell cell = row.getCell(j);
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String str = "";
switch (cell.getCellType()) {
case Cell.CELL_TYPE_FORMULA:
//str =cell.getCellFormula();
try {
str = String.valueOf(cell.getNumericCellValue());
} catch (IllegalStateException e) {
str = String.valueOf(cell.getRichStringCellValue());
}
break;
case Cell.CELL_TYPE_NUMERIC:
if(HSSFDateUtil.isCellDateFormatted(cell)){
str =sdf.format(cell.getDateCellValue())+"";
}else{
str =cell.getNumericCellValue()+"";
}
break;
case Cell.CELL_TYPE_STRING:
str = cell.getStringCellValue()+"";
break;
case Cell.CELL_TYPE_BOOLEAN:
str = cell.getBooleanCellValue()+"";
break;
default:
}
switch (j) {
case 0:
bean.setA1(str);
break;
case 1:
bean.setA2(str);
break;
default:
break;
}
}
list.add(bean);
}
}
} catch (Exception e) {
e.printStackTrace();
}
UPLOADREPORT = list; // 需自定义
return flag;
}
UPLOADREPORT = null; // 需自定义
String flag = "";
ArrayList<ReportBean> list = new ArrayList<ReportBean>(); // <RoadBean>需自定义
try {
InputStream excelResource = item.getInputStream();
Workbook rwb = WorkbookFactory.create(excelResource);
// 判断文件是什么格式 2003/2007 根据版本不同 处置对象也不同
Sheet rs = rwb.getSheetAt(0);
// FormulaEvaluator evaluator = rwb.getCreationHelper().createFormulaEvaluator();
int rows = rs.getPhysicalNumberOfRows();
// 得到一个sheet中有多少个合并单元格
int sheetmergerCount = rs.getNumMergedRegions();
for(int i = 0 ; i < sheetmergerCount ; i++){
Row row = rs.getRow(i);
CellRangeAddress ca = rs.getMergedRegion(i);
int firstColumn = ca.getFirstColumn();
int lastColumn = ca.getLastColumn();
int firstRow = ca.getFirstRow();
int lastRow = ca.getLastRow();
int cha=lastRow-firstRow;
Row fRow = rs.getRow(firstRow);
Cell fCell = fRow.getCell(firstColumn);
for(int n=firstRow;n<=lastRow;n++)
{
for(int m=firstColumn;m<=lastColumn;m++)
{
switch (fCell.getCellType()) {
case Cell.CELL_TYPE_FORMULA:
//str =cell.getCellFormula();
try {
rs.getRow(n).getCell(m).setCellValue(fCell.getNumericCellValue());//可以算出有公式的
} catch (IllegalStateException e) {
rs.getRow(n).getCell(m).setCellValue(fCell.getRichStringCellValue());
}
break;
case Cell.CELL_TYPE_NUMERIC:
if(HSSFDateUtil.isCellDateFormatted(fCell)){
rs.getRow(n).getCell(m).setCellValue(fCell.getDateCellValue());
}else{
rs.getRow(n).getCell(m).setCellValue(fCell.getNumericCellValue());
}
break;
case Cell.CELL_TYPE_STRING:
rs.getRow(n).getCell(m).setCellValue(fCell.getStringCellValue());
break;
case Cell.CELL_TYPE_BOOLEAN:
rs.getRow(n).getCell(m).setCellValue(fCell.getBooleanCellValue());
break;
default:
}
}
}
}
ReportBean bean; // 需自定义
int endRow=rows;
if("57".equals(reportType))
{
if(rows < 20){
bean = new ReportBean();
bean.setExcelTemplate("1");
list.add(bean);
UPLOADREPORT = list; // 需自定义
return flag;
}
for (int i = 4; i < rows; i++) {
Row row = rs.getRow(i);
int cols = row.getPhysicalNumberOfCells();
//判断所读取的excel文件的列数是否与模板一致
if(cols != 16){
bean = new ReportBean();
bean.setExcelTemplate("1");
list.add(bean);
UPLOADREPORT = list; // 需自定义
return flag;
}
bean = new ReportBean(); // 需自定义
for (int j = 0; j < cols; j++) {
Cell cell = row.getCell(j);
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String str = "";
switch (cell.getCellType()) {
case Cell.CELL_TYPE_FORMULA:
//str =cell.getCellFormula();
try {
str = String.valueOf(cell.getNumericCellValue());
} catch (IllegalStateException e) {
str = String.valueOf(cell.getRichStringCellValue());
}
break;
case Cell.CELL_TYPE_NUMERIC:
if(HSSFDateUtil.isCellDateFormatted(cell)){
str =sdf.format(cell.getDateCellValue())+"";
}else{
str =cell.getNumericCellValue()+"";
}
break;
case Cell.CELL_TYPE_STRING:
str = cell.getStringCellValue()+"";
break;
case Cell.CELL_TYPE_BOOLEAN:
str = cell.getBooleanCellValue()+"";
break;
default:
}
switch (j) {
case 0:
bean.setA1(str);
break;
case 1:
bean.setA2(str);
break;
default:
break;
}
}
list.add(bean);
}
}
} catch (Exception e) {
e.printStackTrace();
}
UPLOADREPORT = list; // 需自定义
return flag;
}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 使用Python生成Excel格式的图片
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树