简单的Excel导入(上传、解析、持久化)
/**
* excel导入
* @param req
* @param resp
* @return
*/
public void excelImport(){
//先将要上传的Excel文件上传到项目下的excel_Temp临时文件夹
String path= request.getSession().getServletContext().getRealPath("/excel_Temp/");
String fileName = UUID.randomUUID().toString().replace("-", "")+excelFileName;
FileOutputStream fos = null;
FileInputStream fis = null;
try {
fis = new FileInputStream(excel);
fos = new FileOutputStream(new File(path,fileName));
int len=0;
byte[] buffer = new byte[1024];
while((len = fis.read(buffer))!= -1){
fos.write(buffer, 0, len);
}
fos.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
//读取excel文件并获取其值
try {
List<List<Object>> list= Read_Excel.readExcel(new File(path,fileName));
//将获取到的值赋给要导入的对象
if(!(list.size()<1) ){
for (int i = 1; i < list.size(); i++) {
if(list.get(i).size() != 0){
String pk1 = pk.generateStringPk();
arcGongcInnerfile.setId(pk1);
arcGongcInnerfile.setCreDeptId(userDeptID);
arcGongcInnerfile.setCreTime(JDateToolkit.getNowDate4());
arcGongcInnerfile.setCreUserId(userID);
arcGongcInnerfile.setOrgId(orgId);
arcGongcInnerfile.setStatus("1");
arcGongcInnerfile.setInnerfileSeq((String) list.get(i).get(0));
arcGongcInnerfile.setDutyMan((String) list.get(i).get(1));
arcGongcInnerfile.setDocTitle((String) list.get(i).get(2));
arcGongcInnerfile.setDocCode((String) list.get(i).get(3));
arcGongcInnerfile.setSecurity(arcGongcInnerfileService.getIdByName((String) list.get(i).get(4)==" "?"无":(String) list.get(i).get(4)));
arcGongcInnerfile.setDocDate((String) list.get(i).get(5));
arcGongcInnerfile.setPageNum((String) list.get(i).get(6));
arcGongcInnerfile.setArchiveLink((String) list.get(i).get(7));
arcGongcInnerfile.setMemo((String) list.get(i).get(8));
try {
//将对象设值后持久化到数据库
arcGongcInnerfileService.save(arcGongcInnerfile);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
response.setCharacterEncoding("utf-8");
response.getWriter().print("导入成功!");
}catch(Exception e){
e.printStackTrace();
}
//将上传到excel_Temp文件夹里的文件清空
File file = new File(path);
File[] fileList = file.listFiles();
for (int i = 0; i < fileList.length; i++) {
File delfile = fileList[i];
delfile.delete();
}
}
package com.sinosoft.module.arc.common; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.LinkedList;
import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCell; public class Read_Excel { /**
* 读取 office excel
* @throws IOException
* @throws FileNotFoundException */
public static List<List<Object>> readExcel(File file) throws IOException{
List<List<Object>> list = new LinkedList<List<Object>>();
HSSFWorkbook hwb = new HSSFWorkbook(new FileInputStream(file));
HSSFSheet sheet = hwb.getSheetAt(0);
Object value = null;
HSSFRow row = null;
HSSFCell cell = null;
for(int i = sheet.getFirstRowNum();i<= sheet.getPhysicalNumberOfRows();i++){
row = sheet.getRow(i);
if (row == null) {
continue;
}
List<Object> linked = new LinkedList<Object>();
int count = 0;
for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
cell = row.getCell(j);
if (cell == null) {
continue;
}
DecimalFormat df = new DecimalFormat("0");// 格式化 number String 字符
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// 格式化日期字符串
DecimalFormat nf = new DecimalFormat("0");// 格式化数字
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue();
break;
case XSSFCell.CELL_TYPE_NUMERIC:
if("@".equals(cell.getCellStyle().getDataFormatString())){
value = df.format(cell.getNumericCellValue());
} else if("General".equals(cell.getCellStyle().getDataFormatString())){
value = nf.format(cell.getNumericCellValue());
}else{
value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
}
break;
case XSSFCell.CELL_TYPE_BOOLEAN:
value = cell.getBooleanCellValue();
break;
case XSSFCell.CELL_TYPE_BLANK:
value = " ";
count ++;
break;
default:
value = cell.toString();
}
if (value == null || "".equals(value)) {
value = "";
continue;
}
linked.add(value);
}
if(count<9){
list.add(linked);
} }
return list;
}
}
简单的Excel导入(上传、解析、持久化)的更多相关文章
- 一个简单的excel文件上传到数据库方法
因为以前项目中有用到过Excel导入,所以整理了一下,这是一个导入Excel数据到数据库的方法 注意:需要导入poi jar包 代码清单 /** * Excel 导入 * @param mapping ...
- IT轮子系列(六)——Excel上传与解析,一套代码解决所有Excel业务上传,你Get到了吗
前言 在日常开发当中,excel的上传与解析是很常见的.根据业务不同,解析的数据模型也都不一样.不同的数据模型也就需要不同的校验逻辑,这往往需要写多套的代码进行字段的检验,如必填项,数据格式.为了避免 ...
- 基于Spring Mvc实现的Excel文件上传下载
最近工作遇到一个需求,需要下载excel模板,编辑后上传解析存储到数据库.因此为了更好的理解公司框架,我就自己先用spring mvc实现了一个样例. 基础框架 之前曾经介绍过一个最简单的spring ...
- [SAP ABAP开发技术总结]客户端文本文件、Excel文件上传下载
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 利用Bootstrap简单实现一个文件上传进度条
© 版权声明:本文为博主原创文章,转载请注明出处 说明: 1. 使用commons-fileupload.jar实现文件上传及进度监听 2. 使用bootstrap的进度条进行页面显示 3. 因为进度 ...
- extjs实现简单的多文件上传(不借助任何插件),以及包含处理上传大文件的错误的各种处理办法
在extjs的学习过程中,有遇到过有关多文件上传的问题,但是网上的大多数都是专门的去实现多文件上传而去做的组件之类的,没有特别简单的方式,于是小白便做了下面的内容,只是通过动态的去添加extjs的自带 ...
- [SAP ABAP开发技术总结]文本文件、Excel文件上传下传
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- JQUERY插件JqueryAjaxFileUplaoder----更简单的异步文件上传
异步上传相信大家都做过类似的功能,JqueryAjaxFileUploader为我们提供了更简单的实现和使用方式.不过既然是JQUERY的插件那么它所依赖的环境大家都懂得.JqueryAjaxFile ...
- 简单的文件ftp上传
目录 简单的文件ftp上传 简单的文件ftp上传 server import socket import struct service=socket.socket() service.bind(('1 ...
随机推荐
- oracle 中execute immediate
简单来说 就是你一个存储过程当中 创建了一个表 table_a 然后要用insert into将其他的数据插入到这个table_a当中,但是因为你在创建过程的时候 table_a还不存在,过程就会显示 ...
- Linq“条件排序”
StockQuantities.OrderBy(u=>u.Status==null) 该排序先排结果为0(false)的,再排结果为1(true)的 使用场景: 一个对象有上传时间(可以为空)和 ...
- (原创)OpenStack服务如何使用Keystone (二)---部署和配置Keystone中间件
(一)Keystone端的操作 (二)如何在OpenStack服务上部署Keystone中间件 (三)详细配置keystonemiddleware 部署OpenStack时一般先安装Keystone服 ...
- firefox插件-HackBar介绍与试用
This toolbar will help you in testing sql injections, XSS holes and site security. It is NOT a tool ...
- IE8不支持数组的indexOf方法
在IE8下有个js错误,但是在其它浏览器下(Firefox, Chrome, IE9)下面都很正常.后来调试发现原因是在IE8下,js数组没有indexOf方法. 在使用indexOf方法前,执行一下 ...
- Linux网卡eth0变成eth1修改方法
由于换了主板,集成网卡mac地址变了,70-persistent-net.rules中仍然保留了老网卡的内容,新网卡则被识别为eth1. 将表示老网卡的行注释掉,然后将表示新网卡的行中eth1改成et ...
- glsl boom
原理: 1.渲染场景到fbo 2.对fbo进行高斯横向,纵向模糊,到新的fbo 3.对两张图进行叠加 模糊后的 效果就这样 给数据加大 <-vertex-> #version varyin ...
- 浅谈Linux系统中如何查看进程
进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源.一般来说,Linux系统会在进程之间共享程序代码和系统函数库,所以在任何时刻内存中都只有代码的一份拷贝. 1,ps命令 作用:p ...
- 通过tarball形式安装HBASE Cluster(CDH5.0.2)——集群安装总览
1,手动下载压缩包.tar(下载地址),采用tarball形式手工安装集群. 2,共启用13台虚拟机,CentOS6.5 64bit,nn1,nn2,rm1,rm2,dn1,dn2,dn3,dn4,d ...
- Thinkphp5笔记九:路由设置,隐藏indx.php
网站根目录下.htaccess <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine on ...