首先说一下所使用的POI版本3.8,需要用的的Jar包:

dom4j-1.6.1.jar
poi-3.8-20120326.jar
poi-ooxml-3.8-20120326.jar
poi-ooxml-schemas-3.8-20120326.jar
poi-scratchpad-3.8-20120326.jar
xmlbeans-2.3.0.jar

web前端页面:

action:填写请求地址;

enctype="multipart/form-data":一定要带上,要不然后台获取不到文件的字节流;

<form id="AddForm" action="excel/fileInfo.do" method="post" enctype="multipart/form-data"> 
  <input id="excel" type="file" name="excel" /> <br />
  <input onclick="submitFile()" type="button" value="提交" />
</form>

struts2的请求配置:

<package name="drugs" extends="struts-default" namespace="/drugs">
  <action name="fileInfo" class="com.daat.manager.drugs.web.actions.DrugsAction" method="fileInfo">
  <result name="success" type="jsonResult"></result>
</action>
</packge>

java处理struts2请求:

 import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.ServletActionContext; public class DrugsAction extends ActionSupport{
  private File excelFile;
private String excelFileFileName; public File getExcelFile() {
return excelFile;
} public void setExcelFile(File excelFile) {
this.excelFile = excelFile;
} public String getExcelFileFileName() {
return excelFileFileName;
} public void setExcelFileFileName(String excelFileFileName) {
this.excelFileFileName = excelFileFileName;
}   
public String fileInfo(){
try {
//创建新文件名
String excelName = "xinwenjian";
//获取文件上传路径
String filePath = getFilePath(excelFileName1);
//文件复制后保存路径
String path="WEB-INF/upload/";
//根据相对部署路径计算完整路径
path=ServletActionContext.getServletContext().getRealPath(path);
System.out.println(path);
String sufix = FileUtil.getFileSufix(excelFileFileName).toLowerCase();
excelFileName1 = excelFileName1 + "." + sufix;
//判断上传文件的保存目录是否存在
if (!file.exists() && !file.isDirectory()) {
//创建目录
file.mkdir();
}
//复制文件到服务器
FileUtils.copyFile(excelFile,new File(path,excelFileName1));
//解析excel文件
allInfo(path,excelFileName1);
} catch (IOException e) {
System.out.println("error");
e.printStackTrace();
}
//this.outJsonString("success");
return getResult();
}

/**
* 获取文件上传路径
* @param dirpath
* @return
*/
public static String getFilePath(String fileName) {
System.out.print(fileName);
String filePath = fileName.substring(0, 2)+File.separator+fileName.substring(2, 4)+File.separator
+fileName.substring(4, 6)+File.separator;
return filePath;
}

}

解析Excel类

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PushbackInputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory; public class UserInfo { public static void main(String[] args){
String path2003 = "D:\\Users\\star\\Workspaces\\MyEclipse 10\\.metadata\\.me_tcat\\webapps\\dms\\WEB-INF";
String FileName="xinwenjian.xls";
              //解析文件
excelInfo(path2003,FileName);
              //删除文件
deleteFile(path2003,FileName);
} public static List excelInfo(String path,String FileName){
long start2003 = System.currentTimeMillis();
List excellist=new ArrayList();
String path2003 = "";//Excel2003文件路径 //解析Excel
excellist = parseExcel(path+File.separator+FileName);
System.out.println(excellist.size());
System.out.println("excellist"+excellist.toString());
System.out.println("size:"+excellist.size());
long end2003 = System.currentTimeMillis();
System.out.println("解析Excel2003完毕!共用时"+(end2003-start2003)+"毫秒!");
deleteFile(path,FileName);
return excellist;
} /**
* 根据路径加载解析Excel
* @param path
* @return
*/
public static List parseExcel(String path){
List excellist=new ArrayList();
System.out.println(path);
Map map = new HashMap();
File file = null;
InputStream input = null;
Workbook workBook = null;
Sheet sheet = null;
if(path!=null&&path.length()>7){
//判断文件是否是Excel(2003、2007)
String suffix = path.substring(path.lastIndexOf("."),path.length());
if (".xls".equals(suffix) || ".xlsx".equals(suffix)) {// 2003后缀或2007后缀
file = new File(path);
try {
input = new FileInputStream(file);
} catch (FileNotFoundException e) {
System.out.println("未找到指定的文件!");
e.printStackTrace();
} catch (Exception e) {
System.out.println("读取Excel文件发生异常!");
e.printStackTrace();
}
if(!input.markSupported()){
input = new PushbackInputStream(input,8);
}
try{
if(POIFSFileSystem.hasPOIFSHeader(input) || POIXMLDocument.hasOOXMLHeader(input)){
workBook = WorkbookFactory.create(input);
}else{
System.out.println("非法的输入流:当前输入流非OLE2流或OOXML流!");
}
} catch(IOException e){
System.out.println("创建表格工作簿对象发生IO异常!原因:"+e.getMessage());
e.printStackTrace();
} catch(InvalidFormatException e){
//Your InputStream was neither an OLE2 stream, nor an OOXML stream.
System.out.println("非法的输入流:当前输入流非OLE2流或OOXML流!");
e.printStackTrace();
}
try{
if(workBook!=null){
int numberSheet = workBook.getNumberOfSheets();
if(numberSheet>0){
sheet = workBook.getSheetAt(0);//获取第一个工作簿(Sheet)的内容【注意根据实际需要进行修改】
excellist = getExcelContent(sheet);
}else{
System.out.println("目标表格工作簿(Sheet)数目为0!");
}
}
input.close();
}catch(IOException e){
System.out.println("关闭输入流异常!"+e.getMessage());
e.printStackTrace();
}
}else{
System.out.println("非法的Excel文件后缀!");
}
}else{
System.out.println("非法的文件路径!");
}
return excellist;
} /**
* 解析(读取)Excel内容
* @param sheet
* @return
*/
@SuppressWarnings("static-access")
public static List getExcelContent(Sheet sheet){
List excellist=new ArrayList(); Date data=new Date();
int rowCount = sheet.getPhysicalNumberOfRows();//总行数
if(rowCount>1){
Row titleRow = sheet.getRow(2);//标题行
int columnNum=titleRow.getPhysicalNumberOfCells();//总列数
for(int i=3;i<rowCount-1;i++){//遍历行,略过标题行,从第二行开始
Row row = sheet.getRow(i);//第i行
Map map=new HashMap();
for(int j=1;j<columnNum;j++){
Cell cell = row.getCell(j);//列
String title=titleRow.getCell(j).getStringCellValue();//标题
Object conten=isNUMERICAndSTRING(cell);
//当读取到null时不会报错,继续执行
                 if("NaN".equals(conten)){
conten=" ";
}
                 //string类型
if(title.indexOf("架位号")>=0){
map.put("shelfNum",conten);
}
                 //数字类型
else if(title.indexOf("商品类型")>=0){
map.put("drugType", (int)cell.getNumericCellValue());
}
//判断日期类型
else if(titleRow.getCell(j).getStringCellValue().indexOf("入库日期")>=0){
if(HSSFDateUtil.isCellDateFormatted(cell)){
data=cell.getDateCellValue();
map.put("storageDate", data);
}
}
}
excellist.add(map);
System.out.println("第"+i+"行"+excellist.toString());
}
}
return excellist;
}
     //判断行内值的类型
public static Object isNUMERICAndSTRING(Cell cell){
if(cell==null ){
return "NaN";
}else if(cell.getCellType()==cell.CELL_TYPE_STRING){
return cell.getStringCellValue().trim();
}else if(cell.getCellType()==cell.CELL_TYPE_NUMERIC){
return cell.getNumericCellValue();
}
return "error";
}
      //删除文件
private static void deleteFile(String path,String FileName) {
File file = new File(path);
File Array[] = file.listFiles();
for (File f : Array) {
if (f.isFile()) {// 如果是文件
if (f.getName().equals(FileName)) {
f.delete();
return;
}
}
}
} }

  

POI上传,导入excel文件到服务器1的更多相关文章

  1. .NET 客户端上传本地excel文件到服务器上,并在客户端显示

    // 上传按钮 protected void btnUp_Click(object sender, EventArgs e) { bool b = Upload(fuExcel); // 上传exce ...

  2. 前端js webuploader上传(导入)excel文件

    项目开发中用到导入(上传)Excel文件 我使用的是百度的webuploader: 1:下载:http://fex.baidu.com/webuploader/(官方下载/示例) 2:使用Web Up ...

  3. Apache POI 一键上传(导入excel文件到数据库)

    import cn.XXXX.bos.utils.PinYin4jUtils; import org.apache.commons.lang3.StringUtils; // HSSF:操作07版本之 ...

  4. ci框架读取上传的excel文件数据

    原文链接: https://blog.csdn.net/qq_38148394/article/details/87921373 此功能实现使用到PHPExcel类库,PHPExcel是一个PHP类库 ...

  5. java 解析上传的Excel文件

    java poi解析上传的Excel文件 package com.zhl.push.Utils; /** * @Author TAO * @ClassName ExcelData * @Descrip ...

  6. 上传读取Excel文件数据

    /// <summary> /// 上传读取Excel文件数据 /// 来自http://www.cnblogs.com/cielwater /// </summary> // ...

  7. 利用django如何解析用户上传的excel文件

    https://www.jb51.net/article/119452.htm 前言 我们在工作中的时候,会有这种需求:用户上传一个格式固定excel表格到网站上,然后程序负债解析内容并进行处理.我最 ...

  8. 使用ASP.NET上传多个文件到服务器

    在Email系统中经常会上传多个文件到服务器,用户大多习惯一次上传所有的文件,而不是逐个上传,我们可以使用javascript动态地添加file元素到表单,然后在服务器端处理这些file 效果图如下: ...

  9. springMVC从上传的Excel文件中读取数据

    示例:导入客户文件(Excle文件) 一.编辑customer.xlsx 二.在spring的xml文件设置上传文件大小 <!-- 上传文件拦截,设置最大上传文件大小 10M=10*1024*1 ...

随机推荐

  1. js多条件if语句简写发生Uncaught SyntaxError: Unexpected token }

    改写原生js 多条件if判断语句时,采用三元方法,发生Uncaught SyntaxError: Unexpected token } function compareImgSize() { var ...

  2. It isn't possible to write into a document from an asynchronously-loaded

    It isn't possible to write into a document from an asynchronously-loaded   今天遇到了一个问题: 通过document.wri ...

  3. Daily Scrumming 2015.10.23(Day 4)

    今明两天任务表 Member Today’s Task Tomorrow’s Task 江昊 继续学习rails ActiveRecord 数据库迁移 域名备案申请 学习rails router配置与 ...

  4. beat冲刺(7/7)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(7/7) 后敬甲(组长) 过去两天完成了哪些任务 ppt制作 视频拍摄 接下来的计划 准备答辩 还剩下哪些 ...

  5. 软工之404 Note Found队选题报告

    目录 NABCD分析引用 N(Need,需求): A(Approach,做法): B(Benefit,好处): C(Competitors,竞争): D(Delivery,交付): 初期 中期 个人贡 ...

  6. Internet History, Technology and Security (Week 9)

    Week 9 Security: Web Security We are now on the second to last week of the class and finishing up ou ...

  7. scrapy-yield scrapy.Request()不执行、失效、Filtered offsite request to错误 [转]

    scrapy错误:yield scrapy.Request()不执行.失效.Filtered offsite request to错误.首先我们在Request()方法里面添加这么一个东东: yiel ...

  8. PHP 常用函数总结(四)

    9.PHP常用判断函数 is_bool();//判断是否为布尔型 is_float(); //判断是否为浮点型 is_int(); //判断是否为整型 is_numeric(); //判断是否为数值型 ...

  9. 【转载】Vue项目中的文件/文件夹命名规范

    文件或文件夹的命名遵循以下原则: index.js 或者 index.vue,统一使用小写字母开头的(kebab-case)命名规范 属于组件或类的,统一使用大写字母开头的(PascalCase)命名 ...

  10. iframe & cors

    iframe & cors <!DOCTYPE html> <html lang="zh-Hans"> <head> <meta ...