Excel 数字处理
说明
最近在做一个比较小型的网站,需要批量导入注册用户.用户的信息写在一张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 数字处理的更多相关文章
- 工作中最常用的Excel函数公式大全
电脑那些事儿2016-05-18 22:23:02微软 公式 工作阅读(22574)评论(1) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场.举报 Wo ...
- jxl 处理 Excel 样式
jxl 能够操作的 excel 样式: 1. Workbook的格式设置(代表一个excel文件) 2. Sheet的格式设置(代表一个表格) 3. Cell的格式设置(代表一个单元格) PS:此jx ...
- Excel的一些常用设置
1. Freeze表头 (1) 下拉Worksheet的Pane,让该sheet有2个工作区,将该pane下拉到某一特定的行. (2)Window->Freeze Panes.此时会将pane智 ...
- Java怎样处理EXCEL的读取
须要包:poi-3.5.jar.poi-ooxml-3.5.jar 实例: [java] view plaincopy public class ProcessExcel { private Work ...
- Excel常见操作,重复数据,去除数据关联
Eecel对一个数据进行操作后按住右下角的十字架往下拉就可以对下面的操作进行相同 的操作,所以只需先对一个数据进行操作,再拉下来就可以了 通过公式处理的数据跟其它数据有关联 需要对这些数据进行去除它们 ...
- 【造轮子】打造一个简单的万能Excel读写工具
大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...
- excel 日期/数字格式不生效需要但双击才会生效的解决办法
原因: Excel2007设置过单元格格式后,并不能立即生效必须挨个双击单元格,才能生效.数据行很多.效率太低. 原因:主要是一些从网上拷贝过来的日期或数字excel默认为文本格式或特殊-中文数字格式 ...
- C# Excel导入、导出【源码下载】
本篇主要介绍C#的Excel导入.导出. 目录 1. 介绍:描述第三方类库NPOI以及Excel结构 2. Excel导入:介绍C#如何调用NPOI进行Excel导入,包含:流程图.NOPI以及C#代 ...
- Word/Excel 在线预览
前言 近日项目中做到一个功能,需要上传附件后能够在线预览.之前也没做过这类似的,于是乎就查找了相关资料,.net实现Office文件预览大概有这几种方式: ① 使用Microsoft的Office组件 ...
随机推荐
- BZOJ1131 POI2008 Sta 【树形DP】
BZOJ1131 POI2008 Sta Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=10 ...
- 重温CLR(十二) 委托
回调函数是一种非常有用的编程机制,它的存在已经有很多年了..NET通过委托来提供回调函数机制.不同于其他平台(比如非托管C++)的回调机制,委托的功能要多得多.例如,委托确保回调方法是类型安全的(这是 ...
- Built(最小生成树+构图离散化)
个人心得:看了题目很明确,最小生成树,但是但是周赛卡住了,因为10W的点若一个一个找出距离很明显内存和时间都炸了, 静下心来,画了下图,仔细一想,任意一个点都只会在她左右俩边选择建立联系,那么我们只要 ...
- 《selenium2 python 自动化测试实战》(9)——切换窗口
有时候我们点击按钮后页面会跳转到新的窗口,我们需要到新的窗口中去进行接下来的操作,这时候就需要切换窗口的操作,我们根据句柄(handle)来操作窗口之间的切换,看代码: # coding: utf-8 ...
- Arrays--codility
lesson 2: Arrays exercise: Problem: Given array A consisting of N integers, return the reversed arra ...
- spring整合xfire出现Document root element "beans", must match DOCTYPE root "null"错误解决方案
fire自带的包下有个spring1.2.6的jar包,而工程的jar包是2.0的. 解决方案: 1.将原配置文件的头schema方式换为DOCTYPE方式,原配置文件如下(非maven) <? ...
- golang的https服务器
先生成ssl证书 openssl genrsa - openssl req - 然后,大概这样 package main import ( "log" "net/http ...
- waitpid()设置WNOHANG位(非阻塞模式)判断子进程的状态是否有所改变
参考<Linux/Unix系统编程手册>26.1.5,对于系统调用waitid() #include <sys/wait.h> int waitid(idtype_t idty ...
- vim 编辑技巧
vi是linux下最常用的编辑器,vim是vi的加强版,本篇将介绍vim的一些快捷键和使用技巧,借鉴网上其他文章表示
- 【转】Hadoop学习路线图
按照这个路线图来学习即可. 1.M. Tim Jones的三篇文章: 用Hadoop进行分布式数据处理第1部分(入门):http://www.ibm.com/developerworks/ ...