一、引子

在web平台开发中仅经常会遇到一下需要批量的问题,通常得做法是使用excel上传,下面主要介绍一下在实际开发中到的实例。

二、准备工作

1、需要导入的jar包(主要用到poi包)

(1)poi-3.14.jar

(2)poi-ooxml-3.14.jar

(3)poi-ooxml-schemas-3.14.jar

(4)xmlbeans-2.6.0.jar

2、主要的API

(1)import org.apache.poi.ss.usermodel.Workbook,对应Excel文档;

  (2)import org.apache.poi.hssf.usermodel.HSSFWorkbook,对应xls格式的Excel文档;

  (3)import org.apache.poi.xssf.usermodel.XSSFWorkbook,对应xlsx格式的Excel文档;

  (4)import org.apache.poi.ss.usermodel.Sheet,对应Excel文档中的一个sheet;

  (5)import org.apache.poi.ss.usermodel.Row,对应一个sheet中的一行;

  (6)import org.apache.poi.ss.usermodel.Cell,对应一个单元格。

三、上代码

excel格式:

代码:

 1 package text;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.InputStream;
6 import java.util.ArrayList;
7 import java.util.HashMap;
8 import java.util.LinkedHashMap;
9 import java.util.List;
10 import java.util.Map;
11
12 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
13 import org.apache.poi.ss.usermodel.Cell;
14 import org.apache.poi.ss.usermodel.Row;
15 import org.apache.poi.ss.usermodel.Sheet;
16 import org.apache.poi.ss.usermodel.Workbook;
17 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
18
19 public class ExcelSolution {
20 public static void main(String[] args) {
21 String filePath = "E:\\XXXXupload\\地点.xlsx";
22 List<Map<String,String>> resultList =ExcelUtil(filePath);
23 for (Map map : resultList) {
24 System.out.println(map);
25 }
26 }
27 public static List<Map<String,String>> ExcelUtil(String filePath){
28 ArrayList<Map<String,String>> reList = new ArrayList<Map<String,String>>();
29 File file = new File(filePath);
30 Workbook wb=null;
31 if(file.exists() && file.isFile()){
32 try {
33 if(filePath.toLowerCase().endsWith(".xls")){
34 wb = new HSSFWorkbook(new FileInputStream(file));
35 }else if (filePath.toLowerCase().endsWith(".xlsx")) {
36 wb = new XSSFWorkbook(new FileInputStream(file));
37 }
38 Sheet sheet =wb.getSheetAt(0);
39 int rowNum = sheet.getPhysicalNumberOfRows(); //获取行数
40 if (rowNum >1) {
41 for (int i = 1; i < rowNum; i++) {
42 Map<String, String> map = new HashMap<String, String>();
43 Row row = sheet.getRow(i);
44 if (row!=null) {
45 // 第一列:省份
46 Cell cell0 = sheet.getRow(i).getCell(0);
47 if(cell0 != null && !"".equals(cell0)){
48 String Name =(String) cell0.getStringCellValue().trim();
49 map.put("name", Name);
50 }
51 Cell cell1 = sheet.getRow(i).getCell(1);
52 if(cell1 != null && !"".equals(cell1)){
53 String provinceName = (String)cell1.getStringCellValue().trim();
54 map.put("provinceName", provinceName);
55 }
56 Cell cell2 = sheet.getRow(i).getCell(2);
57 if(cell0 != null && !"".equals(cell2)){
58 String cityName = (String)cell2.getStringCellValue().trim();
59 map.put("cityname", cityName);
60 }
61
62 reList.add(map);
63 }
64
65 }
66
67 }
68 } catch (Exception e) {
69 System.out.println("************ 解析EXCEL失败 ************");
70 e.printStackTrace();
71 return null;
72 }
73 }
74 return reList;
75 }
76 }

输出:

五、遇到问题及解决

1、报错:

原因: 当导包不一致时会出现问题。

2.代码错误

 1 int rowNum = sheet.getPhysicalNumberOfRows(); //获取行数
2 if (rowNum >1) {
3 Map<String, String> map = new HashMap<String, String>();//出现在错误的行,一个new,存储地址是一样的
4 for (int i = 1; i < rowNum; i++) {
5 Row row = sheet.getRow(i);
6 if (row!=null) {
7 // 第一列:省份
8 Cell cell0 = sheet.getRow(i).getCell(0);
9 if(cell0 != null && !"".equals(cell0)){
10 String Name =(String) cell0.getStringCellValue().trim();
11 map.put("name", Name);
12 }
13
14 reList.add(map);
15 }
16
17 }
18
19 }

错误结果:

如何实现批量上传----------Java解析excel的更多相关文章

  1. springboot实现上传并解析Excel

    添加pom依赖 <!-- excel解析包 --> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> ...

  2. 【转】上传并解析excel

    [转载自]http://blog.csdn.net/u011563331/article/details/51322523 通过解析excel,将数据存储到数据库中.现在将方法保存下来. 使用的是ap ...

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

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

  4. 实现Excel文件的上传和解析

    前言 本文思维导图 一.需求描述 实现一个页面上传excel的功能,并对excel中的内容做解析,最后存储在数据库中. 二.代码实现 需求实现思路: 先对上传的文件做校验和解析,这里我们通过Excel ...

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

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

  6. 使用phpExcel批量上传excel表数据到mysql数据库中

    /*批量上传数据*/ if(isset($_POST['submit']) && $_POST['submit']=='上传文件') { //导入类文件 require_once (& ...

  7. Java Miniui实现批量上传文件demo 201906221520

    可能需要的jar包: 需要miniui(类似easyui). Test2019062201.jsp <%@ page language="java" contentType= ...

  8. jquery文件批量上传控件Uploadify3.2(java springMVC)

    人比較懒  有用为主 不怎么排版了 先放上Uploadify的官网链接:http://www.uploadify.com/  -->里面能够看到PHP的演示样例,属性说明,以及控件下载地址.分f ...

  9. [Pulgin] 利用swfupload实现java文件批量上传

    URL:http://blog.csdn.net/xuweilinjijis/article/details/8876305 之前在网上找过很多相关资料,很多所谓的批量上传都是忽悠人的,真正的批量上传 ...

随机推荐

  1. MongoDB分片集群部署方案

    前言 副本集部署是对数据的冗余和增加读请求的处理能力,却不能提高写请求的处理能力:关键问题是随着数据增加,单机硬件配置会成为性能的瓶颈.而分片集群可以很好的解决这一问题,通过水平扩展来提升性能.分片部 ...

  2. [Usaco2005 Dec]Scales 天平

    题目描述 约翰有一架用来称牛的体重的天平.与之配套的是N(1≤N≤1000)个已知质量的砝码(所有砝码质量的数值都在31位二进制内).每次称牛时,他都把某头奶牛安置在天平的某一边,然后往天平另一边加砝 ...

  3. STL_map和multimap容器

    一.map/multimap的简介 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对.它提供基于key的快速检索能力. map中key值是唯一的.集合中的元素按一定的顺 ...

  4. 不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK

    不支持的字符集 (在类路径中添加 orai18n.jar): ZHS16GBK 报错图示: 报错内容: Exception in thread "main" java.sql.SQ ...

  5. 活动精彩实录 | 王峰:Cassandra在360的多场景应用及未来趋势

    点击此处观看完整活动视频 大家好,我是360的王峰,我今天主要通过Cassandra在多场景下的应用来介绍一下Cassandra在360落地的情况. 我会从以下这几个方面进行介绍.首先介绍下Cassa ...

  6. Urlrewrite

    Urlrewrite  地址重写,用户得到的全部都是经过处理后的URL地址 过滤用户的所有请求,符合规则的便对其进行重定向 rule结点中from默认使用的正则表达式来匹配,若用户访问服务器时的URL ...

  7. 静默安装Oracle也没那么恐怖

    几种必须静默安装的情况 服务器为了减少资源占用,没安装图形组件 不能进入机房,只能远程SSH 想炫(Z)耀(B),静默安装显得有技术含量 磁盘分区要求 如没有特别要求,装机时可按如下分区比较好管理 / ...

  8. Redis 实战 —— 12. 降低内存占用

    简介 降低 Redis 的内存占用有助于减少创建快照和加载快照所需的时间.提升载入 AOF 文件和重写 AOF 文件时的效率.缩短从服务器进行同步所需的时间(快照. AOF 文件重写在 持久化选项 中 ...

  9. Kubernetes (yaml 文件详解)

    # yaml格式的pod定义文件完整内容:apiVersion: v1       #必选,版本号,例如v1kind: Pod       #必选,Podmetadata:       #必选,元数据 ...

  10. ubuntu下scala下载+集成IDEA开发环境

    环境须知: ubuntu 16.04 scala 2.11.0 jdk 1.8.0 Idea 2016.3 JDK环境安装 (1)安装jdk, 注意scala很好的支持jdk 1.8 的jvm 编译环 ...