说明

最近在做一个比较小型的网站,需要批量导入注册用户.用户的信息写在一张excel表格里面. 
所以就需要读取excel.所以就记录下遇到的问题,以及以后查看.

相关技术

使用的POI解析Excel需要使用的jar包 
 
注(使用的maven.我就添加了右边的两个依赖就可以了)

分析

解析Excel首先就要解析Excel的结构.然后用面向对象的思想分析一下 
 
这是一个excel文件.下面我们就来分析一下如果让你写这个poi框架,那么你会怎么设计. 
1. 首先要有一个对象表示这整个Excel文件. 
2. 可是这个excel文件中有好多页.Sheet1, Sheet2等等,所以我们还需要一个对象表示页. 
3. 在页中,有行,所以还需要一个对象表示行. 
4. 在行中,最后细分到格cell. 
5. 格cell中数据还有好多类型.有字符串,数字,时间等等.

POI中的对象与excel对象的对应

excel文件就有多种类型了.后缀有 xls 与 xlsx 
 
所以对于不同类型的文件,就需要使用不同的poi中的对象了. 
1. 如果你要解析的是xls文件 
 
从代码不难发现,这里的处理逻辑是 
1>. 先用inputstream获取excel文件的io流 
2>. 然后创建一个内存中的excel文件HSSFWorkbook类型对象.这个对象表示了整个excel文件. 
3>. 对这个excel文件的每页做循环处理 
4>. 对每页中的每行做循环处理. 
5>. 对每行中的每个单元格做做处理,获取这个单元格的值. 
6>. 把这行的结果添加到一个List数组中. 
7>. 把每行的结果添加到最后的总结果中. 
8>. 解析完以后就获取了一个List< List < String > > 类型的对象了. 
2. 如果你要处理xlsx类型的文件则 
 
和上面一样,我就不说了.

存在的问题

其实有时候我们希望得到的数据就是excel中的数据,可是最后发现结果不理想 
如果你的excel中的数据是数字,你会发现Java中对应的变成了科学计数法的. 
所以在获取值的时候就要做一些特殊处理. 
这样就能保证获取的值是我想要的值. 
网上的做法是对于数值类型的数据格式化,获取自己想要的结果. 
其实也没有那么麻烦.我在做的时候突然想到了一种处理解决方案.供参考 
我们看一下poi中对于的toString()方法 
 
该方法是poi的方法,从源码中我们可以发现,该处理流程是 
1. 获取单元格的类型 
2. 根据类型格式化数据并输出.这不一下子就造成了很多不是我们想要的. 
所以我们就要改造一下这个方法例如这样 
 
我的做法是这样的 
1. 对于不熟悉的类型,或者为空则返回”” 控制串. 
2.如果是数字,则修改单元格类型为String,然后返回String.这样就保证数字不被格式化了. 
3. 虽然不知道这么做有什么后果,可是成功了. 

Excel 数字处理的更多相关文章

  1. 工作中最常用的Excel函数公式大全

    电脑那些事儿2016-05-18 22:23:02微软 公式 工作阅读(22574)评论(1) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场.举报 Wo ...

  2. jxl 处理 Excel 样式

    jxl 能够操作的 excel 样式: 1. Workbook的格式设置(代表一个excel文件) 2. Sheet的格式设置(代表一个表格) 3. Cell的格式设置(代表一个单元格) PS:此jx ...

  3. Excel的一些常用设置

    1. Freeze表头 (1) 下拉Worksheet的Pane,让该sheet有2个工作区,将该pane下拉到某一特定的行. (2)Window->Freeze Panes.此时会将pane智 ...

  4. Java怎样处理EXCEL的读取

    须要包:poi-3.5.jar.poi-ooxml-3.5.jar 实例: [java] view plaincopy public class ProcessExcel { private Work ...

  5. Excel常见操作,重复数据,去除数据关联

    Eecel对一个数据进行操作后按住右下角的十字架往下拉就可以对下面的操作进行相同 的操作,所以只需先对一个数据进行操作,再拉下来就可以了 通过公式处理的数据跟其它数据有关联 需要对这些数据进行去除它们 ...

  6. 【造轮子】打造一个简单的万能Excel读写工具

    大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...

  7. excel 日期/数字格式不生效需要但双击才会生效的解决办法

    原因: Excel2007设置过单元格格式后,并不能立即生效必须挨个双击单元格,才能生效.数据行很多.效率太低. 原因:主要是一些从网上拷贝过来的日期或数字excel默认为文本格式或特殊-中文数字格式 ...

  8. C# Excel导入、导出【源码下载】

    本篇主要介绍C#的Excel导入.导出. 目录 1. 介绍:描述第三方类库NPOI以及Excel结构 2. Excel导入:介绍C#如何调用NPOI进行Excel导入,包含:流程图.NOPI以及C#代 ...

  9. Word/Excel 在线预览

    前言 近日项目中做到一个功能,需要上传附件后能够在线预览.之前也没做过这类似的,于是乎就查找了相关资料,.net实现Office文件预览大概有这几种方式: ① 使用Microsoft的Office组件 ...

随机推荐

  1. WPF 同一窗口内的多线程 UI(VisualTarget)

    WPF 的 UI 逻辑只在同一个线程中,这是学习 WPF 开发中大家几乎都会学习到的经验.如果希望做不同线程的 UI,大家也会想到使用另一个窗口来实现,让每个窗口拥有自己的 UI 线程.然而,就不能让 ...

  2. java基础:eclipse编程不得不知道的技巧

    如果你是位具有开发经丰富的工程师,在开发的过程中,你就会很强烈的要求快捷的编程.如何快捷编程,只有更加熟悉开发工具.那么eclipse是同样也有很多技巧.可以带着下面问题来阅读1.如何查找类相关信息? ...

  3. "http://127.0.0.1:4723/wd/hub"的解释

    先补充一个内容,就是appium安装时候的环境变量配置,必须要配ANDROID_HOME这个变量,不是“要配置”,是“必须配置”,其他的那些放到系统变量的path里就可以了: # coding: ut ...

  4. python 客户端点对点通信小案例

    点对点通讯分为客户端和服务器,多个客户端通过服务器进行信息的交流 服务器端代码  service端 #!/usr/bin/env python # -*- coding:utf-8 -*- impor ...

  5. pipeline的存储代码

    在spider中最后一个函数返回item时会scrapy会调用pipeline里面的 process_item(self, item, spider):函数并传入item,spider等参数在这里可以 ...

  6. 【C#】datetimepicker初始为空值的方法

    方法一: 在窗口初始化函数中添加: dateTimePickerEnd.Format = DateTimePickerFormat.Custom; dateTimePickerEnd.CustomFo ...

  7. WPF自定义组件,自定义属性(依赖属性)

    正常定义的以来属性,在XAML里设置值得时候是不触发Setter的,只能在code中用. 监听PropertyChangedCallback事件可以感知XAML里的设置,这样才能code和XAML配合 ...

  8. simulink pi的方法产生锁相环

    pi方法就是比例积分方法,关于pi方法介绍参考http://www.elecfans.com/dianzichangshi/20120909287851.html 锁相环pi方法原理参考http:// ...

  9. python-pycharm控制台输出带颜色

    python_控制台输出带颜色的文字方法   在python开发的过程中,经常会遇到需要打印各种信息.海量的信息堆砌在控制台中,就会导致信息都混在一起,降低了重要信息的可读性.这时候,如果能给重要的信 ...

  10. Nunit中如何进行事务性单元测试

    单元测试要求:单元测试方法并不真正去变更数据库,也就是说单元测试不依赖于数据库中的数据.那我们如何解决执行单元测试方法后,不变更数据库中数据呢? 一般的解决方案有两种: 1. 新建一个单元测试数据库, ...