读取上传的excel文件

(1)前端
<form method="post" enctype="multipart/form-data" class="ts-form"
οnsubmit="$ts.submit('mmmm.data_import.submitDeptAction',{target:this})">
   <input class="form-input" type="text" id="orderID" name="orderID" style="display:none;width: 140px;" value="adsasd" />
<div class="form-item">
   <!-- 对应部门信息表 -->
<div class="form-item-title">部门信息:</div>
<div class="form-item-cont">
<div ts-type="file-upload" data-max-number="1"
data-files="model.files" data-name-field="deptAttachment"
data-url-field="url" data-id-field="id"
data-exists-name="existDeptAttachname" 
data-max-upload="1">
<input type="submit" value="上传" class="ts-button-red" ts-submit="true" />
<input type="submit" value="下载" class="ts-button-green" οnclick="$ts.link('mmmm.data_import.fileDownloadAction',{name:'dept'});"/>
</div>
</div>
</div>
</form>
(2)js
// 提交部门信息上传
this.submitDeptAction = function(handler) {
$ts.postFileForm("data_import/DeptBatch.upload", handler.target, function(result) {
closeTab(handler.target);
if(result.returntype != 1){
showResultInfo(result.returntype);
openLinkWithKey('数据导入列表','index','mmmm.data_import.index');
}else if(result.returntype == 1 ){
showResultInfo(result.returntype);
openLinkWithKey('数据导入列表','index','mmmm.data_import.index');
}
});
};
(3)后端获取文件流
//获得上传文件对象
Object deptAttachmentObj = context.get("deptAttachment", Object.class);
String deptAttachmentName = null;
try {
if (deptAttachmentObj instanceof MultipartFile) {//判断是上传文件类型
       MultipartFile  deptAttachment = (MultipartFile) deptAttachmentObj;
       //获得上传文件名
       deptAttachmentName = deptAttachment.getOriginalFilename() ;
       //获得上传文件的输入流
 InputStream inputStream = deptAttachment.getInputStream();
 //将上传的Excel转换成List
 long exStart = System.currentTimeMillis();
 List<Map<String, Object>> deptList = ExcelToDBUtil.sheetsToList(deptAttachmentName, inputStream);
 if (deptList == null || deptList.isEmpty()) {
throw new TeslaApplicationException("上传的表为空!");
}
(4)ExcelToDBUtil工具类
package com.mmmm.pes.poi.utils;


import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import org.apache.commons.lang.StringUtils;
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;


import com.tesla.framework.core.TeslaApplicationException;


public class ExcelToDBUtil {




/**
 * 一个工作薄只有一个sheet
 * @param workName
 * @param fileInStream
 * @return
 */
@SuppressWarnings({ "resource" })
public static List<Map<String, String>> oneSheetToList(String workName,InputStream fileInStream) {


// 获得数据所放容器
List<Map<String, String>> dataList = new ArrayList<Map<String, String>>();
if (!workName.endsWith(".xls") && !workName.endsWith(".xlsx")) {
throw new RuntimeException("此文件不是excel类型");
}

Workbook workbook = null;
try {
// 获得excel的流
if (workName.endsWith(".xls")) {
// 获得一个.xls工作薄
workbook = new HSSFWorkbook(fileInStream);
} else {
// 获得一个.xlsx工作薄
workbook = new XSSFWorkbook(fileInStream);
}
// 此方法对应 一个工作薄只有一个sheet 
Sheet sheet = workbook.getSheetAt(0);
if (sheet == null) {
throw new RuntimeException("指定sheet不存在");
}
// 获得表头
Row rowHeader = sheet.getRow(0);
if (rowHeader == null) {
throw new RuntimeException("此Sheet无内容");
}
// 获取总列数
int cells = rowHeader.getPhysicalNumberOfCells();
// 获取数据总行数,这个是除去表头一行的总行数
int num = sheet.getLastRowNum();
for (int i = 1; i <= num; i++) {
// 存储每一行的数据
HashMap<String, String> data = new HashMap<String, String>();
// 获得第i行对象
Row row = sheet.getRow(i);
for (int j = 0; j < cells; j++) {
Cell cellValue = row.getCell(j);
String stringlValue = "";
String stringlkey = "key"+(j+1);
switch (cellValue.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
stringlValue = cellValue.getStringCellValue();
if (StringUtils.isEmpty(stringlValue)) {
stringlValue ="";
}
break;
case HSSFCell.CELL_TYPE_NUMERIC:
stringlValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
cellValue.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
stringlValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
stringlValue ="";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;
default:
break;
}
data.put(stringlkey, stringlValue);
}


dataList.add(data);
}


} catch (Exception e) {


throw new RuntimeException(e.toString());
} finally {
// 关闭资源
if (fileInStream != null) {
try {
fileInStream.close();
fileInStream = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}


return dataList;
}


@SuppressWarnings({ "resource" })
public static List<Map<String, Object>> sheetsToList(String workName,InputStream fileInStream) throws IOException {


// 获得数据所放容器
List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
if (!workName.endsWith(".xls") && !workName.endsWith(".xlsx")) {
throw new TeslaApplicationException("上传文件类型错误");
}

Workbook workbook = null;
Sheet sheet = null;
try {
// 获得excel的流
if (workName.endsWith(".xls")) {
// 获得一个.xls工作薄
workbook = new HSSFWorkbook(fileInStream);
} else {
// 获得一个.xlsx工作薄
workbook = new XSSFWorkbook(fileInStream);
}
// 此方法对应 一个工作薄有多个sheet 
int numberOfSheets = workbook.getNumberOfSheets();
for (int i = 0; i < numberOfSheets; i++) {

sheet = workbook.getSheetAt(i);
String sheetName = sheet.getSheetName();
// 获得表头
Row rowHeader = sheet.getRow(0);
if (rowHeader != null) {

// 获取总列数
int cells = rowHeader.getPhysicalNumberOfCells();
// 获取数据总行数,这个是除去表头一行的总行数
int num = sheet.getLastRowNum();
for (int j = 1; j <= num; j++) {
// 存储每一行的数据
HashMap<String, Object> data = new HashMap<String, Object>();
// 获得第i行对象
Row row = sheet.getRow(j);
for (int v = 0; v < cells; v++) {
Cell cellValue = row.getCell(v);
String stringlValue = "";
String stringlkey = "key"+(v+1);
if(cellValue!=null){
switch (cellValue.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
stringlValue = cellValue.getStringCellValue();
if (StringUtils.isEmpty(stringlValue)) {
stringlValue ="";
}
break;
case HSSFCell.CELL_TYPE_NUMERIC:
stringlValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
cellValue.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
stringlValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
stringlValue ="";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;
default:
break;
}
}
data.put(stringlkey, stringlValue);
data.put("sheetName", sheetName);
}

dataList.add(data);
   }
 }
}


}  finally {
// 关闭资源
if (fileInStream != null) {
try {
fileInStream.close();
fileInStream = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}


return dataList;
}
/**

* @param workName 文件的名称
* @param fileInStream 文件的输入流
* @param gainSheetName 是否获取sheetname 如果返回sheetName 在返回结果中其key值为sheetName
* @return
* @throws IOException 
*/
@SuppressWarnings({ "resource" })
public static List<Map<String, Object>> workToListTempalte(String workName,InputStream fileInStream,Boolean gainSheetName) throws IOException {


// 获得数据所放容器
List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
if (!workName.endsWith(".xls") && !workName.endsWith(".xlsx")) {
throw new TeslaApplicationException("上传文件类型错误");
}

Workbook workbook = null;
Sheet sheet = null;
try {
// 获得excel的流
if (workName.endsWith(".xls")) {
// 获得一个.xls工作薄
workbook = new HSSFWorkbook(fileInStream);
} else {
// 获得一个.xlsx工作薄
workbook = new XSSFWorkbook(fileInStream);
}
// 此方法对应 一个工作薄有多个sheet 
int numberOfSheets = workbook.getNumberOfSheets();
for (int i = 0; i < numberOfSheets; i++) {

sheet = workbook.getSheetAt(i);
String sheetName = sheet.getSheetName();
//获得方案编号行
Row rowPlan = sheet.getRow(0);
if (rowPlan != null) {

Cell cellPlanId = rowPlan.getCell(1);
//方案编号
String planId = cellPlanId.getStringCellValue();
Cell cellPlanName = rowPlan.getCell(2);
//方案名称
String planName = cellPlanName.getStringCellValue();
// 获得表头
Row rowHeader = sheet.getRow(1);
// 获取总列数
int cells = rowHeader.getPhysicalNumberOfCells();
// 获取数据总行数,这个是除去表头一行的总行数
int num = sheet.getLastRowNum();
for (int j = 1; j < num; j++) {
// 存储每一行的数据
HashMap<String, Object> data = new HashMap<String, Object>();
// 获得第i行对象
Row row = sheet.getRow(j+1);
for (int v = 0; v < cells; v++) {
Cell cellValue = row.getCell(v);
String stringlValue = planId;
String stringlkey = "key"+1;
data.put(stringlkey, stringlValue);
stringlValue = planName;
stringlkey = "key"+2;
data.put(stringlkey, stringlValue);
stringlValue="";
stringlkey = "key"+(v+3);
switch (cellValue.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
stringlValue = cellValue.getStringCellValue();
if (StringUtils.isEmpty(stringlValue)) {
stringlValue ="";
}
break;
case HSSFCell.CELL_TYPE_NUMERIC:
stringlValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
cellValue.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
stringlValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
stringlValue ="";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;
default:
break;
}
data.put(stringlkey, stringlValue);
if (gainSheetName) {
data.put("sheetName", sheetName);
}
}

dataList.add(data);
}

 }


}


} finally {
// 关闭资源
if (fileInStream != null) {
try {
fileInStream.close();
fileInStream = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}


return dataList;
}
/**

* @param workName 文件的名称
* @param fileInStream 文件的输入流
* @param gainSheetName 是否获取sheetname 如果返回sheetName 在返回结果中其key值为sheetName
* @return
* @throws IOException 
*/
@SuppressWarnings({ "resource" })
public static List<Map<String, Object>> workToListDetail(String workName,InputStream fileInStream,Boolean gainSheetName) throws IOException {

// 获得数据所放容器
List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
if (!workName.endsWith(".xls") && !workName.endsWith(".xlsx")) {
throw new TeslaApplicationException("上传文件类型错误");
}
//key1:方案编号,key2:方案名称,key3:考核对象编号,key4:考核对象名称,
//key5:分组id,key6:分组名称,key7:指标编号_二级,key8:指标名称,key9:分数,key10:总分 ,key11:评分等级
Workbook workbook = null;
Sheet sheet = null;
try {
// 获得excel的流
if (workName.endsWith(".xls")) {
// 获得一个.xls工作薄
workbook = new HSSFWorkbook(fileInStream);
} else {
// 获得一个.xlsx工作薄
workbook = new XSSFWorkbook(fileInStream);
}
// 此方法对应 一个sheet
sheet = workbook.getSheetAt(0);
String sheetName = sheet.getSheetName();
//获得方案编号行
Row rowPlan = sheet.getRow(0);
Cell cellPlanId = rowPlan.getCell(1);
//方案编号
String planId = cellPlanId.getStringCellValue();
Cell cellPlanName = rowPlan.getCell(2);
//方案名称
String planName = cellPlanName.getStringCellValue();
// 获得表头
Row rowHeader = sheet.getRow(1);
// 获取总列数
int cells = rowHeader.getPhysicalNumberOfCells();
// 获取数据总行数,这个是除去表头一行的总行数
int num = sheet.getLastRowNum();
//从第三行开始循环列出考核对象以及指标所对应的分值
for (int j = 2; j <= num; j++) {
String stringValue = null;
String stringkey = null;
//根据序号判断是否还有需要的值
Row rowXuHao = sheet.getRow(j);
String idx="";
           switch (rowXuHao.getCell(0).getCellType()){
               case HSSFCell.CELL_TYPE_STRING:
                   idx=rowXuHao.getCell(0).getStringCellValue();
                   break;


               case HSSFCell.CELL_TYPE_NUMERIC:
                   idx=String.valueOf(rowXuHao.getCell(0).getNumericCellValue());
                   break;
           }
           if(StringUtils.isEmpty(idx)){
               break;
           }
//从第六列开始记录指标名称及ID,一共循环(cells-6)/2次,最后循环的列数是cells-3列
for(int k = 5;k<cells-3;k++){
// 存储每一行的数据
HashMap<String, Object> data = new HashMap<String, Object>();
//为每一条记录添加指标信息
stringValue = planId;
stringkey = "key"+1;
data.put(stringkey, stringValue);
stringValue = planName;
stringkey = "key"+2;
data.put(stringkey, stringValue);
// 获得第j行对象,从第二列开始记录数据
Row rowj = sheet.getRow(j);
Cell cellValue = rowj.getCell(1);
stringValue="";
stringkey = "key"+3;
switch (cellValue.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
stringValue = cellValue.getStringCellValue();
if (StringUtils.isEmpty(stringValue)) {
stringValue ="";
}
break;
case HSSFCell.CELL_TYPE_NUMERIC:
stringValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
cellValue.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
stringValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
stringValue ="";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;
default:
break;
}
data.put(stringkey, stringValue);
cellValue = rowj.getCell(2);
stringValue="";
stringkey = "key"+4;
switch (cellValue.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
stringValue = cellValue.getStringCellValue();
if (StringUtils.isEmpty(stringValue)) {
stringValue ="";
}
break;
case HSSFCell.CELL_TYPE_NUMERIC:
stringValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
cellValue.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
stringValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
stringValue ="";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;
default:
break;
}
data.put(stringkey, stringValue);
cellValue = rowj.getCell(3);
stringValue="";
stringkey = "key"+5;
switch (cellValue.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
stringValue = cellValue.getStringCellValue();
if (StringUtils.isEmpty(stringValue)) {
stringValue ="";
}
break;
case HSSFCell.CELL_TYPE_NUMERIC:
stringValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
cellValue.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
stringValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
stringValue ="";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;
default:
break;
}
data.put(stringkey, stringValue);

cellValue = rowj.getCell(4);
stringValue="";
stringkey = "key"+6;
switch (cellValue.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
stringValue = cellValue.getStringCellValue();
if (StringUtils.isEmpty(stringValue)) {
stringValue ="";
}
break;
case HSSFCell.CELL_TYPE_NUMERIC:
stringValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
cellValue.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
stringValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
stringValue ="";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;
default:
break;
}
data.put(stringkey, stringValue);

//获得第二行的指标名称及ID
Row rowk = sheet.getRow(1);
//从第六列开始记录,一共10列
if(k%2==0){
k=k+1;
}
cellValue=rowk.getCell(k);
stringValue="";
stringkey = "key"+7;
switch (cellValue.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
stringValue = cellValue.getStringCellValue();
if (StringUtils.isEmpty(stringValue)) {
stringValue ="";
}
break;
case HSSFCell.CELL_TYPE_NUMERIC:
stringValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
cellValue.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
stringValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
stringValue ="";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;
default:
break;
}
data.put(stringkey, stringValue);
cellValue=rowk.getCell(k+1);
stringValue="";
stringkey = "key"+8;
switch (cellValue.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
stringValue = cellValue.getStringCellValue();
if (StringUtils.isEmpty(stringValue)) {
stringValue ="";
}
break;
case HSSFCell.CELL_TYPE_NUMERIC:
stringValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
cellValue.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
stringValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
stringValue ="";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;
default:
break;
}
data.put(stringkey, stringValue);

cellValue = rowj.getCell(k);
stringValue="";
stringkey = "key"+9;
switch (cellValue.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
stringValue = cellValue.getStringCellValue();
if (StringUtils.isEmpty(stringValue)) {
stringValue ="";
}
break;
case HSSFCell.CELL_TYPE_NUMERIC:
stringValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
cellValue.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
stringValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
stringValue ="";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;
default:
break;
}
data.put(stringkey, stringValue);
cellValue = rowj.getCell(cells-2);
stringValue="";
stringkey = "key"+10;
switch (cellValue.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
stringValue = cellValue.getStringCellValue();
if (StringUtils.isEmpty(stringValue)) {
stringValue ="";
}
break;
case HSSFCell.CELL_TYPE_NUMERIC:
stringValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
cellValue.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
stringValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
stringValue ="";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;
default:
break;
}
data.put(stringkey, stringValue);
cellValue = rowj.getCell(cells-1);
stringValue="";
stringkey = "key"+11;
switch (cellValue.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
stringValue = cellValue.getStringCellValue();
if (StringUtils.isEmpty(stringValue)) {
stringValue ="";
}
break;
case HSSFCell.CELL_TYPE_NUMERIC:
stringValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
cellValue.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
stringValue = String.valueOf(cellValue.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_BLANK:
stringValue ="";
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
break;
case HSSFCell.CELL_TYPE_ERROR:
break;
default:
break;
}
data.put(stringkey, stringValue);
if (gainSheetName){
data.put("sheetName", sheetName);
}
dataList.add(data);
}
}


} finally {
// 关闭资源
if (fileInStream != null) {
try {
fileInStream.close();
fileInStream = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
return dataList;
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值