上传:
VUE:

<el-upload
  class="upload-demo"
drag
:action="doUploadUrl"
:on-error ="uploadError"
:before-upload="beforeUpload"
:on-success="handleSuccess"
multiple
:limit="1"
:on-exceed="handleExceed"
:file-list="fileList">
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
</el-upload>
<el-alert class="mar-top-15" title="只能上传xlsx/xls文件,且不超过10M" type="error" :closable="false"></el-alert>

JAVA:

/**
* 获取Excel文件(.xls和.xlsx都支持)
* @param file
* @return ResultVo
* @throws IOException
* @throws FileNotFoundException
* @throws InvalidFormatException
*/
@RequestMapping("/uploadOldTaskDataFile.do_")
@ResponseBody
public ResultVo uploadOldTaskDataFile(@RequestBody MultipartFile file) { //对应excel模板内容总行数
int excelTemplateRowNum = 2;
//以excel模板某行作为JSON对象键
int jsonRowNum = 1; JSONArray array = new JSONArray();
try {
array = new ParseExcelToJSONArrayUtil().parseExcelFile(file, excelTemplateRowNum, jsonRowNum);
} catch (Exception e) {
log.error("excel文件解析异常");
return null;
} return historyImportService.addOldFinishedTask(array);
}
public class ParseExcelToJSONArrayUtil {

    private static final Logger log = LoggerFactory.getLogger(ParseExcelToJSONArrayUtil.class);

    /**
* description: 解析excel文件成JSONArray
*
* @param file
* @param excelTemplateRowNum 对应excel模板内容总行数
* @param jsonRowNum 以excel模板某行作为JSON对象键
*
* @return JSONArray
*/
public JSONArray parseExcelFile(MultipartFile file, int excelTemplateRowNum, int jsonRowNum) throws Exception{ JSONArray array = new JSONArray(); File newFile = multipartFileToFile(file); array = readXLSOrXLSX(newFile, excelTemplateRowNum, jsonRowNum); //删除在项目目录下自动生成一个临时的file文件
File del = new File(newFile.toURI());
del.delete(); return array;
} /**
* MultipartFile转换成能解析的File文件
*
* @param multipartFile
* @return File
*/
public File multipartFileToFile (MultipartFile multipartFile) throws Exception{
File f = null;
if(multipartFile.equals("")||multipartFile.getSize() <= 0){
multipartFile = null;
}else{
InputStream ins = multipartFile.getInputStream();
f = new File(multipartFile.getOriginalFilename());
inputStreamToFile(ins, f);
}
return f;
} /**
* 流转换成File文件
*
* @param file
* @param inputStream
*/
public void inputStreamToFile(InputStream inputStream, File file) {
FileOutputStream os = null;
try {
os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[1024];
while ((bytesRead = inputStream.read(buffer)) != -1){
os.write(buffer,0,bytesRead);
}
}catch (Exception e){
throw new RuntimeException("调用inputStreamToFile产生异常:"+e.getMessage());
}finally {
try {
if (os != null){
os.close();
}
if (inputStream != null){
inputStream.close();
}
}catch (IOException e){
throw new RuntimeException("inputStreamToFile关闭io产生异常:"+e.getMessage());
}
}
} /**
* 读取XLS或者XLSX文件
* @param file,excelTemplateRowNum,jsonRowNum
* @return
* @throws Exception
*/
public JSONArray readXLSOrXLSX(File file, int excelTemplateRowNum, int jsonRowNum) throws Exception {
Workbook book = null;
try {
book = new XSSFWorkbook(file);
} catch (Exception ex) {
book = new HSSFWorkbook(new FileInputStream(file));
}
Sheet sheet = book.getSheetAt(0);
return read(sheet, book, excelTemplateRowNum, jsonRowNum);
} /**
* 解析数据
* @param sheet 表格sheet对象
* @param book 用于流关闭
* @return
* @throws IOException
*/
public JSONArray read(Sheet sheet, Workbook book, int excelTemplateRowNum, int jsonRowNum) throws IOException{
int rowStart = sheet.getFirstRowNum(); // 首行下标
int rowEnd = sheet.getLastRowNum(); // 尾行下标
// 如果首行+excelTemplateRowNum-1与尾行相同,表明只有excelTemplateRowNum行,直接返回空数组
if (rowEnd == rowStart + excelTemplateRowNum - 1) {
book.close();
return new JSONArray();
}
// 获取第jsonRowNum行JSON对象键
Row lastExcelTemplateRow = sheet.getRow(rowStart + jsonRowNum - 1);
int cellStart = lastExcelTemplateRow.getFirstCellNum();
int cellEnd = lastExcelTemplateRow.getLastCellNum();
Map<Integer, String> keyMap = new HashMap<Integer, String>();
for (int j = cellStart; j < cellEnd; j++) {
keyMap.put(j,getValue(lastExcelTemplateRow.getCell(j), rowStart, j, book, true));
}
// 从第excelTemplateRowNum+1行开始获取每行JSON对象的值
JSONArray array = new JSONArray();
for(int i = rowStart + excelTemplateRowNum; i <= rowEnd ; i++) {
Row eachRow = sheet.getRow(i);
JSONObject obj = new JSONObject();
StringBuffer sb = new StringBuffer();
for (int k = cellStart; k < cellEnd; k++) {
if (eachRow != null) {
String val = getValue(eachRow.getCell(k), i, k, book, false);
sb.append(val); // 所有数据添加到里面,用于判断该行是否为空
obj.put(keyMap.get(k),val);
}
}
if (sb.toString().length() > 0) {
array.add(obj);
}
}
book.close();
return array;
} /**
* 获取每个单元格的数据
* @param cell 单元格对象
* @param rowNum 第几行
* @param index 该行第几个
* @param book 主要用于关闭流
* @param isKey 是否为键:true-是,false-不是。 如果解析Json键,值为空时报错;如果不是Json键,值为空不报错
* @return
* @throws IOException
*/
public String getValue(Cell cell, int rowNum, int index, Workbook book, boolean isKey) throws IOException{ // 空白或空
if (cell == null || cell.getCellTypeEnum() == CellType.BLANK ) {
if (isKey) {
book.close();
throw new NullPointerException(String.format("the key on row %s index %s is null ", ++rowNum,++index));
}else{
return "";
}
} // 0. 数字 类型
if (cell.getCellTypeEnum() == CellType.NUMERIC) {
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return df.format(date);
} /*String val = cell.getNumericCellValue()+"";
val = val.toUpperCase();
if (val.contains("E")) {
val = val.split("E")[0].replace(".", "");
}*/
//防止数字变成科学计数法的形式,使数据最后的0保留
DecimalFormat df = new DecimalFormat("0");
String val = df.format(cell.getNumericCellValue()); //解析excel获得的数字去除末尾的.0
if (val.endsWith(".0")) {
val = val.substring(0, val.length() - 2);
}
return val;
} // 1. String类型
if (cell.getCellTypeEnum() == CellType.STRING) {
String val = cell.getStringCellValue();
if (val == null || val.trim().length()==0) {
if (book != null) {
book.close();
}
return "";
}
return val.trim();
} // 2. 公式 CELL_TYPE_FORMULA
if (cell.getCellTypeEnum() == CellType.FORMULA) {
return cell.getStringCellValue();
} // 4. 布尔值 CELL_TYPE_BOOLEAN
if (cell.getCellTypeEnum() == CellType.BOOLEAN) {
return cell.getBooleanCellValue()+"";
} // 5. 错误 CELL_TYPE_ERROR
return "";
}
}

最后对解析excel文件得到的 JSONArray 数据进行处理,然后批量插入到数据库中

SQL:

<!--批量往 T_HI_TASKINST 表中插入数据-->
<insert id="addOldFinishedTask" parameterType="java.util.List">
INSERT INTO T_HI_TASKINST
(proc_inst_id,node_id,node_type,node_name,assignee,status,operate_time,is_delete,create_time,remark)
values
<foreach collection="list" item="item" index="index" separator="," >
(#{item.processInstanceId},#{item.nodeId},#{item.nodeType},#{item.nodeName},#{item.assignee},#{item.status},#{item.operateTime},#{item.isDelete},#{item.createTime},#{item.remark})
</foreach>
</insert>

POM:

<!-- poi,excel解析xls格式 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<!-- poi-ooxml,excel解析xlsx格式 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<encoding>UTF-8</encoding>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>

vue下载和上传excle数据文件,解析excel文件数据并存在数据库中的更多相关文章

  1. C#仪器数据文件解析-Excel文件(xls、xlsx)

    不少仪器工作站可以将数据导出为Excel文件,包括97-2003版本的xls文件和2007+的xlsx文件. 采集Excel文件相比采集pdf文件更容易.程序更健壮,毕竟Excel中数据有明确的行.列 ...

  2. 重新想象 Windows 8 Store Apps (66) - 后台任务: 下载和上传

    [源码下载] 重新想象 Windows 8 Store Apps (66) - 后台任务: 下载和上传 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 后台任务 后台 ...

  3. 重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性

    [源码下载] 重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性 作者:webabcd 介 ...

  4. 解析Excel文件并把数据存入数据库

    前段时间做一个小项目,为了同时存储多条数据,其中有一个功能是解析Excel并把其中的数据存入对应数据库中.花了两天时间,不过一天多是因为用了"upload"关键字作为URL从而导致 ...

  5. github下载和上传项目

    git下载和上传项目 下载: git clone +地址 上传: 1.git init 在当前项目的目录中生成本地的git管理(多一个.git文件夹,为隐藏文件) 2.git add .(注意最后面有 ...

  6. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】) 转

    效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中[附源代码下载])    本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较   ...

  7. PHP实时生成并下载超大数据量的EXCEL文件

    最近接到一个需求,通过选择的时间段导出对应的用户访问日志到excel中, 由于用户量较大,经常会有导出50万加数据的情况.而常用的PHPexcel包需要把所有数据拿到后才能生成excel, 在面对生成 ...

  8. Java通过jxl解析Excel文件入库,及日期格式处理方式 (附源代码)

    JAVA可以利用jxl简单快速的读取文件的内容,但是由于版本限制,只能读取97-03  xls格式的Excel. 本文是项目中用到的一个实例,先通过上传xls文件(包含日期),再通过jxl进行读取上传 ...

  9. 数据导出至Excel文件--好库编程网http://code1.okbase.net/codefile/SerializeHelper.cs_2012122018724_118.htm

    using System; using System.IO; using System.Data; using System.Collections; using System.Data.OleDb; ...

随机推荐

  1. bzoj5006: [THUWC2017 Bipartite]随机二分图

    某人在玩一个非常神奇的游戏.这个游戏中有一个左右各 nnn 个点的二分图,图中的边会按照一定的规律随机出现. 为了描述这些规律,某人将这些边分到若干个组中.每条边或者不属于任何组 (这样的边一定不会出 ...

  2. PAT 乙级 1003 我要通过!(20) C++版

    1003. 我要通过!(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue “答案正确”是自动判题系统给出的最 ...

  3. 客户端负载均衡Feign之四:Feign配置

    Ribbon配置 在Feign中配置Ribbon非常简单,直接在application.properties中配置即可,如: # 设置连接超时时间 ribbon.ConnectTimeout=500 ...

  4. AMQP & JMS对比(转载)

    AMQP & JMS对比 原文地址:https://blog.csdn.net/hpttlook/article/details/23391967 初次接触消息队列时,在网上搜索,总是会提到如 ...

  5. module 'pip' has no attribute 'pep425tags'

    AMD64 import pip._internal print(pip._internal.pep425tags.get_supported()) 1 2 WIN32 import pip prin ...

  6. 文件IO-Linux

    pcb:结构体 一个进程由一个文件描述符表:1024,前三个占用,文件描述符作用,需要磁盘文件. 1:open.close int open(const char* pathname,int flag ...

  7. centos6.2 安装Mysql5.6

    1. mysql官网下载rpm包 [root@slave2 home]# ls hbase  hive  mysql  mysql57-community-release-el6-11.noarch. ...

  8. concurrent.futures进线程池和协程

    concurrent.futures 异步执行进程线程池的模块,一个抽象类,定义submit,map,shutdown方法 from concurrent.futures import Process ...

  9. Android Studio连接不到MuMu模拟器;

    网易推出的mumu模拟器还挺好用的,主要是流畅占内存小: 但是安装mumu模拟器后,as连接不到mumu模拟器: 好了,教程来了:两步走: 先把模拟器运行起来! 第一步:打开Terminal,输入:  ...

  10. solr7.1.0学习笔记(10)---Solr发布到Tomcat

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/weixin_39082031/article/details/79069554 将solr作为一个单 ...