这段代码就是讲述的文件上传的功能
public Map<String, Object> saveFile(MultipartFile mFile, UserInfo userInfo) throws Exception {
InputStream file = mFile.getInputStream();
Map<String, Object> map = new HashMap<String, Object>();
List<String> errorList = new ArrayList<String>();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
FormulaEvaluator formulaEvaluator = null;
//运营地点编号
String operationLocationCode = null;
XSSFWorkbook workbook = null;
List<LocationLayoutProduct> layoutProductList = null;
/*if(whs==null){
errorList.add(0,"运营地点100000不存在");
map.put("error", errorList);
return map;
}*/
// 创建Excel文件(Workbook)
try {
workbook = new XSSFWorkbook(file);
formulaEvaluator = new XSSFFormulaEvaluator(workbook);
// 货物移动
XSSFSheet goodsMovementSheet = workbook.getSheetAt(0);
//获得源库位
String sourInventory = null;
//货物移动行
XSSFRow sheetRow = null;
//货物移动单元格
Cell cell = null;
//货物移动属性值
String cellValue = null;
sheetRow = goodsMovementSheet.getRow(2);
if (null != sheetRow) {
cell = sheetRow.getCell(2);
if (null != cell) {
sourInventory = getStringValueFromCell(cell);
} else {
errorList.add("项目表,发货地点编号未填写,上传失败。");
}
} else {
errorList.add("项目表,发货地点编号填写不正确,上传失败。");
}
sheetRow = goodsMovementSheet.getRow(3);
if (null != sheetRow) {
cell = sheetRow.getCell(2);
if (null == cell) {
errorList.add("项目表,发货地点名称未填写,上传失败。");
}
} else {
errorList.add("项目表,发货地点名称填写不正确,上传失败。");
}
int rowNum = 0;
LocationLayout targetLayout;
String targetInventory;
GoodsMovement goodsMovement;
GoodsMovementItem item;
String etoonBoxType = null;
List<GoodsMovementItem> itemList;
String deliveryOrderNum;
String productDescription = null;
String productionOrderNum;
String salesOrderNum;
String plateNum;
List<GoodsMovement> goodsMovementList = new ArrayList<GoodsMovement>();
// 项目列表查询
for (int row = 10; row < goodsMovementSheet.getPhysicalNumberOfRows(); row++) {
itemList = new ArrayList<GoodsMovementItem>();
goodsMovement = new GoodsMovement();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
goodsMovement.setSourceLocationCode(layout == null ? null : layout.getlCode());
/* goodsMovement.setWhsCode(whs == null ? null : whs.getWhsCode());*/
goodsMovement.setSourceLocation(layout);
/*goodsMovement.setWhs(whs);*/
goodsMovement.setCreatedUser(userInfo);
item = new GoodsMovementItem();
sheetRow = goodsMovementSheet.getRow(row);
rowNum = row + 1;
if (cellIsNull(sheetRow.getCell(1)) && cellIsNull(sheetRow.getCell(3)) && cellIsNull(sheetRow.getCell(6)) && cellIsNull(sheetRow.getCell(7)) && cellIsNull(sheetRow.getCell(8))) {
break;
}
//发货地点编号
goodsMovement.setSourceLocationCode(sourInventory);
//获得收货地点编号
cell = sheetRow.getCell(1);
if (!cellIsNull(cell)) {
goodsMovement.setTargetLocationCode(getStringValueFromCell(cell));
}
//客户shiptoid
cell = sheetRow.getCell(2);
if (!cellIsNull(cell)) {
goodsMovement.setShipToId(Integer.parseInt(getStringValueFromCell(cell)));
}
//发货日期
cell = sheetRow.getCell(3);
if (!cellIsNull(cell)) {
goodsMovement.setRealExecutionTime(df.parse(getStringValueFromCell(cell)));
}
//客户运单号
cell = sheetRow.getCell(4);
if (!cellIsNull(cell)) {
goodsMovement.setWaybillNumber(getStringValueFromCell(cell));
}
//客户销售订单号
cell = sheetRow.getCell(5);
if (!cellIsNull(cell)) {
goodsMovement.setSalesOrderNumber(getStringValueFromCell(cell));
}
//物料编号
cell = sheetRow.getCell(6);
if (!cellIsNull(cell)) {
item.setProductCode(getStringValueFromCell(cell));
}
//物料数量
cell = sheetRow.getCell(7);
if (!cellIsNull(cell)) {
item.setQuantity(Integer.parseInt(getStringValueFromCell(cell)));
}
//空箱重箱
cell = sheetRow.getCell(8);
if (!cellIsNull(cell)) {
item.setBox( "空箱".equals(getStringValueFromCell(cell)) ? 1:0);
}
//客户批次号
cell = sheetRow.getCell(9);
if (!cellIsNull(cell)) {
item.setBatchNumber(getStringValueFromCell(cell));
}
//客户物料号
cell = sheetRow.getCell(10);
if (!cellIsNull(cell)) {
item.setMaterialNumber(getStringValueFromCell(cell));
}
//客户物料名称
cell = sheetRow.getCell(11);
if (!cellIsNull(cell)) {
item.setMaterialName(getStringValueFromCell(cell));
}
//如果空默认重箱
if(null == item.getBox()){
item.setBox(HEAVY_BOX);
}
//获取注释
item.setNotes(sheetRow.getCell(12) != null ? getStringValueFromCell(sheetRow.getCell(12)) : null);
item.setOperationType(GoodsMovementService.ADD);
itemList.add(item);
goodsMovement.setOldStatus(ProductQuantityService.READY_STATUS);
goodsMovement.setStatus(ProductQuantityService.TRANSMIT_STATUS);
goodsMovement.setItemList(itemList);
goodsMovementList.add(goodsMovement);
}
workbook.close();
if (errorList.isEmpty()) {
for (GoodsMovement goods : goodsMovementList) {
save(goods, userInfo);
}
}
} catch (Exception e) {
/* LOGGER.error("上传表格格式不匹配", e);*/
map.put("uploadFail", "数据错误,请检查后再上传。");
return map;
}
map.put("error", errorList);
return map;
}
private boolean cellIsNull(Cell cell) {
if (null == cell) {
return true;
}
if (StringUtils.isBlank(getStringValueFromCell(cell))) {
return true;
}
return false;
}
/**
* @param cell
* @return
* @title getStringValueFromCell
* @description 获得cell的值
* @author kjl
* @date: 2017年2月21日 下午5:05:34
*/
private String getStringValueFromCell(Cell cell) {
SimpleDateFormat sFormat = new SimpleDateFormat("yyyy-MM-dd");
DecimalFormat decimalFormat = new DecimalFormat("#.#");
String cellValue = "";
if (cell == null) {
return cellValue;
} else if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
cellValue = cell.getStringCellValue();
} else if (cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) {
if (HSSFDateUtil.isCellDateFormatted(cell)) {
double d = cell.getNumericCellValue();
Date date = HSSFDateUtil.getJavaDate(d);
cellValue = sFormat.format(date);
} else {
cellValue = decimalFormat.format((cell.getNumericCellValue()));
}
} else if (cell.getCellType() == Cell.CELL_TYPE_BLANK) {
cellValue = "";
} else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
cellValue = String.valueOf(cell.getBooleanCellValue());
} else if (cell.getCellType() == Cell.CELL_TYPE_ERROR) {
cellValue = "";
} else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
cellValue = cell.getCellFormula().toString();
}
return cellValue;
}



看到这里如果这篇文章真的帮到你了,不妨打赏一下哦!

以上就是红色火线JAVA加油站整理的关于java中用Excel文件上传到后台的方法的文章,
希望可以帮到你,如果你有不同的见解可以留言指正哦,避免让别的java小伙伴在走挫折路。
[SQL Server]当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'ET_Resource' 中的标识列插入显式值。
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

分享:

支付宝

微信