private List<Map<String, Object>> check(Workbook workBook) {
List<Map<String, Object>> excelValueList = null;
// 待导入的数据
int import_wb_sheetNos = workBook.getNumberOfSheets();
if (import_wb_sheetNos == 0) {
throw new ServiceException("NumberOfSheets 数据为0,无数据可导入");
}
excelValueList = new ArrayList<>();
// 创建人工号
String EMP_CODE = UserUtil.getCurrentUser().getEmpCode();
// 查询网点信息
List<UmUserBranch> umUserBranchList = umUserBranchDao
.queryUmUserBranchByCorpCode(null, EMP_CODE);
if (umUserBranchList == null || umUserBranchList.size() == 0) {
throw new ServiceException("没有网点权限");
}
UmUserBranch umUserBranch = umUserBranchList.get(0);
for (int i = 0; i < import_wb_sheetNos; i++) {
// 获取sheet
Sheet import_sheet = workBook.getSheetAt(i);
for (int heigth = 1, count = import_sheet.getLastRowNum() + 1; heigth < count; heigth++) {
Row row = import_sheet.getRow(heigth);
int FACE_AMT = 0;
Cell FACE_AMT_CELL = row.getCell(0);
try {
FACE_AMT_CELL.setCellType(Cell.CELL_TYPE_STRING);
FACE_AMT = Integer.valueOf(FACE_AMT_CELL.getStringCellValue());
} catch (Exception e) {
String errorMessage = workBook.getSheetName(i) + "的第"
+ heigth + "行的面额不是数字";
throw new ServiceException(errorMessage);
}
if(FACE_AMT <= 0) {
String errorMessage = workBook.getSheetName(i) + "的第"
+ heigth + "行的面额小于等于0";
throw new ServiceException(errorMessage);
}
int BEN = 0;
Cell BEN_CELL = row.getCell(1);
try {
BEN_CELL.setCellType(Cell.CELL_TYPE_STRING);
BEN = Integer.valueOf(BEN_CELL.getStringCellValue());
} catch (Exception e) {
String errorMessage = workBook.getSheetName(i) + "的第"
+ heigth + "行的数量不是数字";
throw new ServiceException(errorMessage);
}
int SPEC = 0;
Cell SPEC_CELL = row.getCell(2);
try {
SPEC_CELL.setCellType(Cell.CELL_TYPE_STRING);
SPEC = Integer.valueOf(SPEC_CELL.getStringCellValue());
} catch (Exception e) {
String errorMessage = workBook.getSheetName(i) + "的第"
+ heigth + "行的规格不是数字";
throw new ServiceException(errorMessage);
}
if(!validateSpec(String.valueOf(SPEC))) {
String errorMessage = workBook.getSheetName(i) + "的第"
+ heigth + "行的规格不存在";
throw new ServiceException(errorMessage);
}
Cell APPLYER_ID_CELL = row.getCell(3);
String APPLYER_ID = null;
if(null == APPLYER_ID_CELL) {
String errorMessage = workBook.getSheetName(i) + "的第"
+ heigth + "行的申请人不能为空";
throw new ServiceException(errorMessage);
}else{
APPLYER_ID_CELL.setCellType(Cell.CELL_TYPE_STRING);
if (StringUtils.isBlank(APPLYER_ID = APPLYER_ID_CELL.getStringCellValue())) {
String errorMessage = workBook.getSheetName(i) + "的第"
+ heigth + "行的申请人不能为空";
throw new ServiceException(errorMessage);
}
}
//新增申请人姓名
Cell APPLYER_NAME_CELL = row.getCell(4);
String APPLYER_NAME = null;
if(null == APPLYER_NAME_CELL) {
String errorMessage = workBook.getSheetName(i) + "的第"
+ heigth + "行的申请人姓名不能为空";
throw new ServiceException(errorMessage);
}else{
APPLYER_NAME_CELL.setCellType(Cell.CELL_TYPE_STRING);
if (StringUtils.isBlank(APPLYER_NAME = row.getCell(4).getStringCellValue())) {
String errorMessage = workBook.getSheetName(i) + "的第"
+ heigth + "行的申请人姓名不能为空";
throw new ServiceException(errorMessage);
}
}
Map<String, Object> value = new HashMap<>();
value.put("FACE_AMT", FACE_AMT);
value.put("NEED_BEN", BEN);
value.put("SPEC", SPEC);
value.put("APPLYER_ID", APPLYER_ID);
value.put("APPLYER_NAME", APPLYER_NAME);
value.put("createId", EMP_CODE);
value.put("BUKRS", umUserBranch.getCorpCode());
value.put("TOTAL_AMT", FACE_AMT * BEN * SPEC);
value.put("CREATE_ID", EMP_CODE);
value.put("BRANCH_CODE", umUserBranch.getBranchCode());
value.put("BRANCH_NAME", umUserBranch.getBranchName());
value.put("ZDISNUM", umUserBranch.getZDISNUM());
// 待汇总状态
value.put("EXTEND_STATUS",
InvoiceDtlApplyExtendStatusEnum.WAIT_COLLECT.getValue());
// 收派员待网点分配状态
value.put("STATUS",
InvoiceApplyStatusEnum.PEOPLE_WAIT_BRANCH_ALLOT
.getValue());
value.put("TYPE", InvoiceInputTypeEnum.FIXED_INVOICE.getValue());
excelValueList.add(value);
}
}
return excelValueList;
}
package com.sf.novatar.tpl.util;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
import com.sf.novatar.tpl.enums.FileType;
import com.sf.novatar.tpl.servlet.HttpServletHolder;
import com.sfpay.framework.base.exception.ServiceException;
/**
* 描述:
*/
public abstract class AbstractExcelReader {
public abstract void doParse(Workbook workbook);
public void Reader() throws Exception {
Reader((InputStream inputStream) -> {
String fileType = getType(inputStream);
if (StringUtils.isBlank(fileType)
|| (!FileType.XLSX.getValue().equals(fileType)
&& !FileType.XLS_DOC.getValue().equals(fileType) && !FileType.XLSX_DOCX
.getValue().equals(fileType))) {
throw new ServiceException("上传失败,请选择Excel类型文件! ");
}
});
}
public void Reader(Validate validate) throws Exception {
MultiPartRequestWrapper mpRequest = (MultiPartRequestWrapper) HttpServletHolder
.getCurrentRequest();
// 导入的文件
File files = mpRequest.getFiles("excel")[0];
if (null == files) {
throw new FileNotFoundException("解析的文件不存在");
}
try (InputStream fileInputStream = new FileInputStream(files);) {
validate.doValidate(fileInputStream);
if (!fileInputStream.markSupported()) {
try (BufferedInputStream bufferedInputStream = new BufferedInputStream(
fileInputStream);) {
Workbook workbook = null;
if (POIFSFileSystem.hasPOIFSHeader(bufferedInputStream)) {
workbook = new HSSFWorkbook(bufferedInputStream);
} else if (POIXMLDocument
.hasOOXMLHeader(bufferedInputStream)) {
workbook = new XSSFWorkbook(
OPCPackage.open(bufferedInputStream));
} else {
throw new ServiceException("没有获得相应的workbook");
}
doParse(workbook);
}
}
}
}
/**
* * 判断文件类型
*
* @param inputStream
*
* @return 文件类型
*
*/
private static String getType(InputStream inputStream) throws IOException {
if (inputStream == null) {
return null;
}
String fileHead = getFileContent(inputStream);
if (fileHead == null || fileHead.length() == 0) {
return null;
}
fileHead = fileHead.toUpperCase();
FileType[] fileTypes = FileType.values();
for (FileType type : fileTypes) {
if (fileHead.startsWith(type.getValue())) {
return type.getValue();
}
}
throw new ServiceException("没有获取到响应的文件类型");
}
/**
* 得到文件头
*
* @param filePath
* 文件路径
* @return 文件头
* @throws IOException
*/
private static String getFileContent(InputStream inputStream)
throws IOException {
int length = 28;
byte[] b = null;
if (inputStream != null) {
inputStream.read(b = new byte[length], 0, length);
inputStream.skip(-length);
}
return FileTypeJudge.bytesToHexString(b);
}
public interface Validate {
public void doValidate(InputStream inputStream) throws Exception;
}
}
分享到:
相关推荐
"Excel上传解析组件"是一种专为处理Excel文件上传和解析任务设计的技术组件。它简化了在应用程序中处理Excel数据的过程,使得开发人员可以快速、高效地读取、写入或操作Excel表格数据,而无需深入了解Excel文件格式...
在Java开发中,上传并解析Excel文件是一种常见的需求,特别是在数据处理、报表导入或系统集成等场景。本篇文章将深入探讨如何实现这个功能,主要涉及的技术包括文件上传、Excel解析以及数据库操作。 首先,我们需要...
在Java开发中,文件上传和Excel解析是常见的需求,特别是在数据处理、报表生成或系统集成等场景。SpringMVC框架提供了强大的支持,使得这些任务变得简单。本资源中提到的"文件上传Excel解析相关的jar"是针对使用Java...
这可以通过创建一个`@RestController`,定义一个接收文件上传的`@PostMapping`方法,并调用`ExcelService`进行解析。 总的来说,Spring Boot结合Apache POI提供了一种高效且灵活的方式来处理Excel文件解析任务,...
标题中的“上传下载EXCEL与解析”涉及到的IT知识点主要集中在Excel文件的处理,这通常包括文件的上传、下载操作以及对Excel数据的解析。在Web应用开发中,这些功能非常常见,例如在数据分析、报表生成或者用户交互...
best20182022-10-17 14:55:20原证springboot整合easyexcel实现excel文件上传解析,下载导出简单实例 项目描述 springboot整合easyexcel,上传解析Excel,下载导出Excel 运行环境 jdk8+tomcat9+IntelliJ IDEA+...
3 设置header和解析完成后上传方法: importExcel ref="import_excel" :import-methods="handleYcExcelImport" :max="100" :fields="fields" 注: fields : 解析数组的key import-methods:点击上传按钮时执行的...
Java上传下载excel、解析Excel、生成Excel的问题.pdf
在这个名为"小项目上传解析excel文件"的实践中,我们将探讨如何使用JavaWeb技术来实现Excel文件的上传、解析以及将数据存储到数据库中。以下是对这一主题的详细阐述: 1. **文件上传**: - 在JavaWeb应用中,文件...
SpringBoot 实现上传并解析 Excel 过程解析 SpringBoot 是一个流行的 Java 框架,用于快速构建基于 Spring 的应用程序。Excel 是一个广泛使用的电子表格软件,用于存储和分析数据。本文将介绍如何使用 SpringBoot ...
在IT行业中,Excel上传并解析Java对象是一项常见的数据处理任务,尤其在数据分析、报表生成以及数据导入导出等场景中尤为常见。这个过程涉及到的主要技术包括文件上传、Excel读取、数据转换以及Java对象映射。下面将...
Excel文件上传,获取Excel文件并解析
在JavaScript(JS)环境中,对Excel文件的导入与导出是一项常见的需求,特别是在Web应用程序中,用户可能需要上传Excel文件来分析数据或者下载经过处理的数据为Excel格式。本篇文章将详细探讨JS如何实现Excel的导入...
在Java编程环境中,将Excel数据解析并上传到MySQL数据库是一项常见的任务,特别是在数据处理和导入导出场景下。本项目提供了完整的解决方案,包括所需的jar包、数据库SQL语句以及一个可直接在Eclipse环境中运行的...
用户上传Excel文件后,后端解析数据,然后返回结果或者保存到数据库。这种方式对服务器资源要求较高,但能提供更好的稳定性和安全性。 接下来,我们讨论导出过程。当用户请求导出数据时,前端可以向后端发送请求,...
在前端开发中,有时我们需要处理用户上传的Excel文件,例如从Excel中提取数据进行展示或者进一步的处理。本文将深入探讨如何使用JavaScript在浏览器端解析和读取Excel文件,主要基于开源库`js-xlsx`。 `js-xlsx`是...
在前端开发中,有时我们需要处理用户上传的Excel文件,例如读取数据进行分析或展示。本文将详细探讨如何使用纯JavaScript在前端解析Excel文件,不依赖后端服务,且兼容各大主流浏览器。我们将主要关注以下几个关键...
在这个“java文件上传和上传excel后并解析出来的小工具”中,我们可以探讨以下几个核心知识点: 1. **MultipartFile接口**:在Spring框架中,`MultipartFile`接口用于处理HTTP请求中的多部分文件数据。它提供了读取...
在Java编程环境中,解析Excel文件是一项常见的任务,特别是在数据处理、数据分析或自动化测试等领域。Eclipse作为Java开发的主流IDE,提供了丰富的工具和支持来完成这项工作。本项目名为"java 解析Excel 并判断解析...