/**
* 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导入(上传、解析、持久化)的更多相关文章

  1. 一个简单的excel文件上传到数据库方法

    因为以前项目中有用到过Excel导入,所以整理了一下,这是一个导入Excel数据到数据库的方法 注意:需要导入poi jar包 代码清单 /** * Excel 导入 * @param mapping ...

  2. IT轮子系列(六)——Excel上传与解析,一套代码解决所有Excel业务上传,你Get到了吗

    前言 在日常开发当中,excel的上传与解析是很常见的.根据业务不同,解析的数据模型也都不一样.不同的数据模型也就需要不同的校验逻辑,这往往需要写多套的代码进行字段的检验,如必填项,数据格式.为了避免 ...

  3. 基于Spring Mvc实现的Excel文件上传下载

    最近工作遇到一个需求,需要下载excel模板,编辑后上传解析存储到数据库.因此为了更好的理解公司框架,我就自己先用spring mvc实现了一个样例. 基础框架 之前曾经介绍过一个最简单的spring ...

  4. [SAP ABAP开发技术总结]客户端文本文件、Excel文件上传下载

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. 利用Bootstrap简单实现一个文件上传进度条

    © 版权声明:本文为博主原创文章,转载请注明出处 说明: 1. 使用commons-fileupload.jar实现文件上传及进度监听 2. 使用bootstrap的进度条进行页面显示 3. 因为进度 ...

  6. extjs实现简单的多文件上传(不借助任何插件),以及包含处理上传大文件的错误的各种处理办法

    在extjs的学习过程中,有遇到过有关多文件上传的问题,但是网上的大多数都是专门的去实现多文件上传而去做的组件之类的,没有特别简单的方式,于是小白便做了下面的内容,只是通过动态的去添加extjs的自带 ...

  7. [SAP ABAP开发技术总结]文本文件、Excel文件上传下传

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  8. JQUERY插件JqueryAjaxFileUplaoder----更简单的异步文件上传

    异步上传相信大家都做过类似的功能,JqueryAjaxFileUploader为我们提供了更简单的实现和使用方式.不过既然是JQUERY的插件那么它所依赖的环境大家都懂得.JqueryAjaxFile ...

  9. 简单的文件ftp上传

    目录 简单的文件ftp上传 简单的文件ftp上传 server import socket import struct service=socket.socket() service.bind(('1 ...

随机推荐

  1. [转]Android WiFi 掉线原因分析

    看到一个比较详细的分析wifi断开的文章.收藏一下. 原文: http://blog.csdn.net/chi_wy/article/details/50963279 原因1 .从Log分析来看,这个 ...

  2. 三个支持正则表达式的行处理的工具: grep/sed/awk

    grep: 全称Global Regular Expression Print, 是干什么的,不多说了: 用法:grep [-options] [pattern] [filename] 选项: -c: ...

  3. Spring系列(一):Spring的基本概念及其核心

    一.Spring是什么 Spring是一种多层的J2EE应用程序框架,其核心就是提供一种新的机制管理业务对象及其依赖关系. 二.为什么要使用Spring 1. 降低组件之间的耦合度,实现软件各层之间的 ...

  4. 嵌入式开发值zynq驱动—— zynq SPI Flash 驱动过程

    http://blog.csdn.net/pengwangguo/article/details/52292664 http://blog.csdn.net/pengwangguo/article/d ...

  5. (转)WAVE PCM 声音文件格式

    WAVE文件格式是Microsoft为存储多媒体的RIFF规范的一部分.一个RIFF文件以一个文件头开始,然后是一系列的数据块.一个WAVE文件常常仅由一个WAVE块构成,WAVE块包含一个说明格式的 ...

  6. 贫血模型;DTO:数据传输对象(Data Transfer Object);AutoMapper ;Domain Model(领域模型);DDD(领域驱动设计)

    ====================== 我自己的理解 ========================== 一:  DTO  我自己的理解,就是 比如你有一个类,跟数据库的table表结构一模一 ...

  7. 各大引擎矩阵的矩阵存储方式 ----行矩阵 or 列矩阵

    OpenGL  里面的矩阵 float  m[16]; OpenGL中的矩阵是这样的 m[0] m[4] m[8] m[12] m[1] m[5] m[9] m[13] m[2] m[6] m[10] ...

  8. Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

    [Android布局学习系列]   1.Android 布局学习之——Layout(布局)详解一   2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)   3.And ...

  9. IT管理就这么管

    随着信息系统的广泛应用,员工没有电脑就无法工作,企业离开信息系统就无法顺利开展业务.信息部作为企业的内部信息化部门,承担了包括软件开发.系统维 护.硬件维护的几乎所有IT相关任务,对保障公司业务系统的 ...

  10. linux ss命令使用详解

    ss是Socket Statistics的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信 ...