/**
* 导入25年回本付息的每月支出
*/
@RequestMapping("/ordinaryLoan")
public Object OrdinaryLoan(HttpServletRequest request, HttpServletResponse response, Long projectId) {
MultipartHttpServletRequest re = (MultipartHttpServletRequest) request;
System.out.println("开始");
MultipartFile mf = re.getFile("upFile");
String[] keys = {"month", "money"};
try {
if (ObjectUtils.isNull(projectId))
return ResultForm.createErrorResultForm(null, "导入失败,项目编号为空");
List<Map<String, Object>> list = ExcelToolUtils.importExcel(mf.getInputStream(), keys);
List<OrdinaryLoan> ordinaryLoans = new ArrayList<>();
OrdinaryLoan ordinaryLoan = new OrdinaryLoan();
for (Map<String, Object> map : list) {
ordinaryLoan = new OrdinaryLoan();
ordinaryLoan.setProjectId(projectId);
ordinaryLoan.setCreateTime(new Date());
ordinaryLoan.setMoney(MapUtils.getFloat(map, "money"));
ordinaryLoan.setMonth(MapUtils.getString(map, "month"));
ordinaryLoan.setMonthTime(TimeUtil.parseDate(MapUtils.getString(map, "month")));
ordinaryLoans.add(ordinaryLoan);
}
chargeAPIHandler.saveOrdinaryLoans(ordinaryLoans, projectId);
return ResultForm.createSuccessResultForm(null, "导入成功");
} catch (Exception e) {
e.printStackTrace();
System.out.println("上传文件错误!");
return ResultForm.createErrorResultForm(null, "导入失败");
}
}
工具类
package com.td.crm.web.utils;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import com.td.util.MapUtils;
public class ExcelToolUtils {
public static void exportExcel(InputStream input, OutputStream out, List<Map<String, Object>> list, LinkedHashMap<String, String> keys2titlesMap) throws Exception {
SXSSFWorkbook wb = new SXSSFWorkbook(100);
Sheet sh = wb.createSheet("data");
Row rowHeader = sh.createRow(0);
Iterator<String> keys = keys2titlesMap.keySet().iterator();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
int i = 0;
List<String> keyList = new ArrayList<String>();
while(keys.hasNext()) {
String key = keys.next();
keyList.add(key);
String title = keys2titlesMap.get(key);
Cell cellHeader = rowHeader.createCell(i++);
cellHeader.setCellValue(title);
}
for(int rownum = 1; rownum <= list.size(); rownum++) {
Row row = sh.createRow(rownum);
Map<String, Object> dataMap = list.get(rownum-1);
i = 0;
// while(keys.hasNext()) {
for(String key: keyList){
// String key = keys.next();
Cell cell = row.createCell(i++);
if(dataMap.get(key) instanceof String) {
cell.setCellValue(MapUtils.getString(dataMap, key));
} else if(dataMap.get(key) instanceof Date) {
cell.setCellValue(simpleDateFormat.format(MapUtils.getDate(dataMap, key)));
} else if(dataMap.get(key) instanceof Number) {
cell.setCellValue(MapUtils.getDouble(dataMap, key));
} else if(dataMap.get(key) instanceof Boolean) {
cell.setCellValue(MapUtils.getBooleanValue(dataMap, key));
}
}
if(rownum % 100 == 0) {
((SXSSFSheet) sh).flushRows();
}
}
wb.write(out);
out.close();
}
public static List<Map<String, Object>> importExcel(InputStream input, String[] keys) throws Exception {
Workbook wb = WorkbookFactory.create(input);
Sheet sheet = wb.getSheetAt(0);
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
for(int rownum = 1; rownum <= sheet.getLastRowNum(); rownum++) {
Row row = sheet.getRow(rownum);
if(row == null) {
continue;
}
Map<String, Object> map = new HashMap<String, Object>();
for(int cellnum = 0; cellnum<row.getLastCellNum(); cellnum++){
Cell cell = row.getCell(cellnum);
int valType = cell.getCellType();
if(valType == Cell.CELL_TYPE_STRING) {
map.put(keys[cellnum], cell.getStringCellValue());
} else if(valType == Cell.CELL_TYPE_BOOLEAN) {
map.put(keys[cellnum], cell.getBooleanCellValue());
} else if(valType == Cell.CELL_TYPE_NUMERIC) {
if(HSSFDateUtil.isCellDateFormatted(cell)){
//用于转化为日期格式
Date d = cell.getDateCellValue();
DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
map.put(keys[cellnum], formater.format(d));
} else {
map.put(keys[cellnum], cell.getNumericCellValue());
}
}
}
list.add(map);
}
return list;
}
/* public static void createExcel(String fileName) throws Exception {
// 打开文件
WritableWorkbook book = Workbook.createWorkbook(new File(fileName));
// 生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet = book.createSheet(" 第一页 ", 0);
// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
// 以及单元格内容为test
Label label = new Label(0, 0, "test");
// 将定义好的单元格添加到工作表中
sheet.addCell(label);
* 生成一个保存数字的单元格 必须使用Number的完整包路径,否则有语法歧义 单元格位置是第二列,第一行,值为789.123
jxl.write.Number number = new jxl.write.Number(1, 0, 555.12541);
sheet.addCell(number);
// 写入数据并关闭文件
book.write();
book.close();
}
public static void readExcel(String fileName) throws Exception {
Workbook book = Workbook.getWorkbook( new File(fileName));
// 获得第一个工作表对象
Sheet sheet = book.getSheet( 0 );
// 得到第一列第一行的单元格
Cell cell1 = sheet.getCell( 0 , 0 );
String result = cell1.getContents();
System.out.println(result);
book.close();
}*/
}