1.jsp页面

<form action="hw/pe_xls_upload" method="post" enctype="multipart/form-data" >
<table>
<tr>
<td>导入硬件序列号/密码Excel文件:</td>
<td><input name="hwFile" type="file"/>&nbsp;&nbsp;</td> <!-- style="width: 400px;height: 25px;" -->
<td><input type="submit" value="上传导入并激活" onclick="javascript:layer.alert('正在处理中', 16);"/></td>
</tr>
</table>
</form>

2.controller控制器

@RequestMapping("pe_xls_upload")
public String hwXlsUpload(@RequestParam("hwFile") MultipartFile hwFile, HttpServletRequest request){
String msg = "";
if(!hwFile.isEmpty()){
String fileType = hwFile.getContentType();
System.err.println("fileType:" + fileType);
if(!fileType.equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") && !fileType.equals("application/vnd.ms-excel") ){
logger.error("上传文件类型错误!fileType:{}", fileType);
msg = "上传文件类型错误";
}else{
try{
String basePath = SysConf.CON_IMAGE_DIR + "upload/";
java.io.File dir = new java.io.File(basePath);
if(!dir.exists()){
dir.mkdir();
}
String fileName = basePath + hwFile.getOriginalFilename();
File file = new File(fileName);
FileUtils.writeByteArrayToFile(file, hwFile.getBytes());
if(file.exists()){
//Excel文件操作
Map<String, String> map = null;
map = CarHwXls.readXls(fileName);
/*for (Map.Entry<String, String> entry : map.entrySet()){
System.err.println("$$entry.getKey():" + entry.getKey() + " --- " + entry.getValue());
}*/ //1.硬件导入和激活
CarHwApiNew.insertHwPsw(map);
//2.硬件导入和激活
CarHwApiNew.activeHwCar(); msg = "文件上传成功,并导入和激活设备序列号和密码信息成功完成";
}else{
msg = "文件上传失败";
}
}catch(Exception e){
logger.error("添加硬件设备号:", e);
msg = e.getMessage();
}
}
}else{
msg = "请选择上传文件";
} request.setAttribute("msg", msg);
queryHwList(new CarHwSearchBean(),request); return "hw/list";
}

3.xls工具类

public class CarHwXls {
private static Logger logger = LoggerFactory.getLogger(CarHwXls.class); /**
* 读取xls文件内容
*
* @return List<XlsDto>对象
* @throws IOException
* 输入/输出(i/o)异常
*/
public static Map<String, String> readXls(String xlspath) throws IOException {
Map<String, String> map = new HashMap<String, String>();
/** 检查文件名是否为空或者是否是Excel格式的文件 */
if (xlspath == null || !(WDWUtil.isExcel2003(xlspath) || WDWUtil.isExcel2007(xlspath)))
{
logger.info("文件名不是excel格式");
map.put("msg", "文件名不是excel格式");
return map;
} /** 检查文件是否存在 */
File file = new File(xlspath);
if (file == null || !file.exists())
{
logger.info("文件不存在");
map.put("msg", "文件不存在");
return map;
} InputStream is = new FileInputStream(xlspath);
// HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
/** 根据版本选择创建Workbook的方式 */ Workbook wb = null; if (WDWUtil.isExcel2003(xlspath))
{
wb = new HSSFWorkbook(is);
}
else
{
wb = new XSSFWorkbook(is);
} // CellStyle cellStyle = wb.createCellStyle();
// DataFormat format = wb.createDataFormat();
// cellStyle.setDataFormat(format.getFormat("@")); // 循环工作表Sheet
for (int numSheet = 0; numSheet < wb.getNumberOfSheets(); numSheet++) {
Sheet sheet = wb.getSheetAt(numSheet); //HSSF
// System.out.println("sheet:" + sheet);
if (sheet == null) {
continue;
}
// 循环行Row,从第一行开始。
for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
Row row = sheet.getRow(rowNum); //HSSF
// System.out.println("row:"+row);
if (row == null) {
continue;
}
// 循环列Cell
// 0学号 1姓名 2学院 3课程名 4 成绩
// for (int cellNum = 0; cellNum <=4; cellNum++) {
Cell cell0 = row.getCell(0); //HSSF
// cell0.setCellStyle(cellStyle); //设置为文本型
// System.out.println("@@cell0:" + getValue(cell0));
if (cell0 == null || !getValue(cell0).startsWith("96779")) { //不已96779开头的记录。
continue;
} Cell cell1 = row.getCell(1); //HSSF
// cell1.setCellStyle(cellStyle); //设置为文本型
// System.out.println("$$cell1:" + getValue(cell1));
if (cell1 == null || getValue(cell1).length() != 8) {
continue;
} map.put(getValue(cell0), getValue(cell1));
}
}
// System.out.println("SIZE:" + list.size());
return map;
} /**
* 得到Excel表中的值
*
* @param hssfCell
* Excel中的每一个格子
* @return Excel中每一个格子中的值
*/
@SuppressWarnings("static-access")
public static String getValue(Cell cell) { //HSSF
/*if (cell.getCellType() == cell.CELL_TYPE_BOOLEAN) {
// 返回布尔类型的值
return String.valueOf(cell.getBooleanCellValue());
} else if (cell.getCellType() == cell.CELL_TYPE_NUMERIC) {
// 返回数值类型的值
return String.valueOf(cell.getNumericCellValue());
} else {
// 返回字符串类型的值
return String.valueOf(cell.getStringCellValue());
}*/
String cellValue = "";
if (null != cell)
{
// 以下是判断数据的类型
switch (cell.getCellType())
{
case HSSFCell.CELL_TYPE_NUMERIC: // 数字
// cellValue = cell.getNumericCellValue() + "";
DecimalFormat df = new DecimalFormat("0"); //避免科学计数法显示。
cellValue = df.format(cell.getNumericCellValue()); // cellValue = cell.getStringCellValue();
break; case HSSFCell.CELL_TYPE_STRING: // 字符串
cellValue = cell.getStringCellValue();
break; case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
cellValue = cell.getBooleanCellValue() + "";
break; case HSSFCell.CELL_TYPE_FORMULA: // 公式
cellValue = cell.getCellFormula() + "";
break; case HSSFCell.CELL_TYPE_BLANK: // 空值
cellValue = "";
break; case HSSFCell.CELL_TYPE_ERROR: // 故障
cellValue = "非法字符";
break; default:
cellValue = "未知类型";
break;
}
}
return cellValue; } /**
* @param args
*/
public static void main(String[] args) {
Map<String, String> map = null;
try {
map = CarHwXls.readXls("d://硬件号.xlsx");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (Map.Entry<String, String> entry : map.entrySet()){
System.err.println("entry.getKey():" + entry.getKey() + " --- " + entry.getValue());
}
} } class WDWUtil
{
/**
* @描述:是否是2003的excel,返回true是2003
* @参数:@param filePath 文件完整路径
* @参数:@return
* @返回值:boolean
*/
public static boolean isExcel2003(String filePath)
{
return filePath.matches("^.+\\.(?i)(xls)$");
} /**
* @描述:是否是2007的excel,返回true是2007
* @参数:@param filePath 文件完整路径
* @参数:@return
* @返回值:boolean
*/
public static boolean isExcel2007(String filePath)
{
return filePath.matches("^.+\\.(?i)(xlsx)$");
}
}

poi excel文件上传并解析xls文件的更多相关文章

  1. php文件上传代码解析

    php文件上传代码解析 is_uploaded_file()  //函数判断指定的文件是否是通过 HTTP POST 上传的,返回一个布尔值. $_FILES['upfile']['tmp_name' ...

  2. Web攻防系列教程之文件上传攻防解析(转载)

    Web攻防系列教程之文件上传攻防解析: 文件上传是WEB应用很常见的一种功能,本身是一项正常的业务需求,不存在什么问题.但如果在上传时没有对文件进行正确处理,则很可能会发生安全问题.本文将对文件上传的 ...

  3. php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)

    网上有很多php文件上传的类,文件上传处理是php的一个特色(至少手册上是将此作为php特点来展示的,个人认为php在数组方面的优异功能更有特 色),学php的人都知道文件上传怎么做,但很多人在编程中 ...

  4. django设置并获取cookie/session,文件上传,ajax接收文件,post/get请求及跨域请求等的方法

    django设置并获取cookie/session,文件上传,ajax接收文件等的方法: views.py文件: from django.shortcuts import render,HttpRes ...

  5. HTTP文件上传服务器-支持超大文件HTTP断点续传的实现办法

    最近由于笔者所在的研发集团产品需要,需要支持高性能的大文件http上传,并且要求支持http断点续传.笔者在以前的博客如何实现支持大文件的高性能HTTP文件上传服务器已经介绍了实现大文件上传的一些基本 ...

  6. PHP实现单文件、多文件上传 封装 面向对象实现文件上传

    文件上传配置 客户端配置 1.表单页面 2.表单的发送方式为post 3.添加enctype = "multipart/form-data" <form action=&qu ...

  7. SpringBoot - 实现文件上传2(多文件上传、常用上传参数配置)

    在前文中我介绍了 Spring Boot 项目如何实现单文件上传,而多文件上传逻辑和单文件上传基本一致,下面通过样例进行演示. 多文件上传 1,代码编写 1)首先在 static 目录中创建一个 up ...

  8. java 文件上传与解析(excel,txt)

    excel上传与解析 https://blog.csdn.net/zsysu_it/article/details/79074067 txt解析 https://blog.csdn.net/CSDNw ...

  9. 聊一聊jquery文件上传(支持多文件上传)

    谈到文件上传,现在一般都用现成的组件可以使用.PC端的可以使用uploadify.针对微网站H5也有uploadifive.但是这组件并不能满足各种场景的需求,例如:预览 切图 放大缩小,取消之类的. ...

随机推荐

  1. 4.python中的用户交互

    学习完如何写'hello world'之后,我们还是不太满意,因为这样代码就写死了,以后运行的时候都只打印一局固定的话而已. 但是,我想在程序运行后,自己手动输入内容怎么办,此时就要学习如何使用用户交 ...

  2. 使用supervisor的一些注意事项

    一直都有在使用supervisor来管理linux上的服务进程.最近有同事说有某服务貌似有问题,让上去检查一下.上去以后发现某服务反应的确很慢,所以就用supervisor重启一下.但是重启的时候就发 ...

  3. 命令行工具cmder

    1.下载地址 http://bliker.github.io/cmder/ 分为两个版本:mini版和Full版 2.快捷命令配置: 比如,快速启动canssandra/redis数据库服务和查询工具 ...

  4. Android 使用Fragment,ViewPagerIndicator 制作csdn app主要框架

    转载  转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23513993 本来准备下载个CSDN的客户端放手机上,没事可以浏览浏览资 ...

  5. 银行卡BIN码大全

    BIN号即银行标识代码的英文缩写.BIN由6位数字表示,出现在卡号的前6位,由国际标准化组织(ISO)分配给各从事跨行转接交换的银行卡组织.银行卡的卡号是标识发卡机构和持卡人信息的号码,由以下三部分组 ...

  6. Linux中printf格式化输出

    printf使用文本或者由空格分隔的参数,我们可以在printf中使用格式化字符串.printf不会写像echo那样自动添加换行符,必须手动添加 =========================== ...

  7. Gearman 安装使用教程

    Gearman是一个分发任务的程序框架,可以用在各种场合,Gearman更偏向于任务分发功能.它的任务分布非常简单,简单得可以只需要用脚本即可完成. Gearman 分布式任务实现原理上只用到2个字段 ...

  8. 深度理解依赖注入(Dependence Injection)

    前面的话:提到依赖注入,大家都会想到老马那篇经典的文章.其实,本文就是相当于对那篇文章的解读.所以,如果您对原文已经有了非常深刻的理解,完全不需要再看此文:但是,如果您和笔者一样,以前曾经看过,似乎看 ...

  9. Stream,Reader/Writer,Buffered的区别(1)

    Stream: 是字节流形式,exe文件,图片,视频等.支持8位的字符,用于 ASCII 字符和二进制数据. Reader/Writer: 是字符流,文本文件,XML,txt等,用于16位字符,也就是 ...

  10. Android--从相册中选取照片并返回结果

    启动系统相册去选择图片 //从相册中选取的方法 private void selectPhoto(){ Intent intent = new Intent(Intent.ACTION_PICK); ...