关于优化,及项目中遇到的问题-02

excel如果是常规格式,系统则会根据单元格中的内容,自动判断数据类型。

例如单元格里的内容是“2011-10-17”,Excel会自动将其识别为日期类型。如果是文本格式,Excel只会将其作为字符串来处理。

所以在导入时,获取Cell 应该有3种模式(日期格式,数字格式,文本格式);

1.excel中的格式

文本格式:为String,

数字格式:有千位符的要替换 ‘,’ 数字类型也可以转化为String。

日期格式:比较特殊,Cell种所获取的为NUMNIC类型,

需要先判断为NUMNIC ,再判断是否为日期类型,代码如下

                            if(Cell.CELL_TYPE_NUMERIC == Obj.getCellType()) {
                                //日期类型
                                if(org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(Obj)) {
                                    map.put("params"+k, convertCellToString(Obj));
                                }else {
                                    if(StringHelper.IsEmptyOrNull(getValue(Obj))) {
                                        continue;
                                    }else {
                                        Obj.setCellType(Cell.CELL_TYPE_STRING);//转String类型
                                        map.put("params"+k, getValue(Obj));
                                    }
                                }
                            }else {
                                Obj.setCellType(Cell.CELL_TYPE_STRING);
                                map.put("params"+k, getValue(Obj));
                                if(StringHelper.IsEmptyOrNull(getValue(Obj))) {
                                    continue;
                                }
                            }

上面的Obj 为Cell 对象(row中取的 cell).

convertCellToString方法需要 获取 Cell 中的Date类型从而转化为String 类型,获取Cell中的Date的方法为cell.getDateCellValue(),通过SimpleDateFormat 转化格式 (‘yyyy-MM-dd‘),如果Cell为空会报异常,需要给空字符串,如下:
          public static String convertCellToString(Cell cell){
              //如果为null会抛出异常,应当返回空字符串
              if (cell == null)
                 return "";

             //POI对单元格日期处理很弱,没有针对的类型,日期类型取出来的也是一个double值,所以同样作为数值类型
            //解决日期2006/11/02格式读入后出错的问题,POI读取后变成“02-十一月-2006”格式        
             if(cell.toString().contains("-") && DateUtil.isCellDateFormatted(cell)){
                String ans = "";
                 try {
                     ans = new SimpleDateFormat("yyyy-MM-dd").format(cell.getDateCellValue());
                 } catch (Exception e) {
                    ans = cell.toString();
                 }
                 return ans;
            }

             cell.setCellType(Cell.CELL_TYPE_STRING);
             return cell.getStringCellValue();
         }
 

原文地址:https://www.cnblogs.com/yunliu0603/p/10869727.html

时间: 05-15

关于优化,及项目中遇到的问题-02的相关文章

项目总结二:关于项目中一些功能的优化

前言: 最近一直在维护老的项目,遇到的问题也千奇百怪,需要修补的,需要优化的,需要特殊处理的,感觉总是那么的无语.也许这时候也应该感叹一句:路漫漫其修远兮,吾将上下而求索吧. 这篇文章就只是讲讲老项目中遇到的种种不敢苟同的代码写法,以及遇到一些问题时的处理方法. 1.关于按钮事件的重复点击问题 我们开发中大概都经历过这样的事情,我的一个button被重复的快速点击,(我们开发者应该更清楚的知道这意味着什么).那我们再深入的想一下(给这样的事件安排一个特定的环境):例如当网络较差的情况下,再例如当

Android在项目中接入腾讯TBS浏览器WebView的教程与注意的地方

腾讯TBS浏览器服务 我们都知道,在Android开发中,经常会用到Webview,而且WebView是出了名的坑的,各种bug.这时候腾讯老哥站出来了,搞了一个TBS浏览器服务这个东西. 说得这么屌,其实就是一个webView控件,然后解析解析网页的内核是他自己做的,叫X5内核(系统原生的WebView用的是WebKit内核),所以我们开发者用的时候,主要就是用这个com.tencent.smtt.sdk.WebView控件 当然这个控件有很多功能,当然也有些要注意的地方. 官网地址:http

项目中使用Redis的一些总结和体会

第一部分:为什么我的项目中要使用Redis 我知道有些地方没说到位,希望大神们提出来,我会吸取教训,大家共同进步! 注册时邮件激活的部分使用Redis 发送邮件时使用Redis的消息队列,减轻网站压力. 使用Lucene.Net在进行分词时使用Redis消息队列和多线程来避免界面卡死等性能问题. 请大家先思考一个问题:这个问题在大并发.高负载的网站中必须考虑!大家思考如何让速度更快. 三种方法:(1)数据库(2)页面静态化(3)Redis.Memcached 第二部分:Redis是什么 概述:r

Shuttle ESB(六)——在项目中的应用

如果说你认真看了前面几篇关于ESB的介绍,我相信,在这一篇文章中,你将会找到很多共鸣. 尽管,市面上开源的ESB确实非常之多,像Java中的Mule ESB,Jboss ESB:.Net中的NServiceBus.而Shuttle ESB是一个新兴的开源框架,网络上资源也比较少.我们当初为什么会选用Shuttle ESB呢? 正所谓没有最好,只有更合适.多次调研发现,Shuttle ESB有以下几大优点:1.Shuttle ESB是基于EDA的:2.Shuttle ESB的实现以发布订阅为核心:

【.net 深呼吸】项目中是否有必要删去多余的引用

很多大伙伴们常常会苦思一个问题:项目代码中用不到的引用,是不是应该删除,以避免代码在编译后存在太多的无意义引用? 其实,这个问题,你完全可以自己去应证的,咋应证呢?知道反射吗,对了,只要你知道这玩意儿,那事情就好 do 了. 我建了一个控制台应用项目,然后,如下图,我在[引用]节点下添加这么一堆引用. 然后,我写了这段代码: XElement x = new XElement("car", new XElement("color", "Red")

用java写一个远程视频监控系统,实时监控(类似直播)我想用RPT协议,不知道怎么把RPT协议集成到项目中

我最近在用java写一个远程视频监控系统,实时监控(类似直播)我想用RPT协议,不知道怎么把RPT协议集成到项目中,第一次写项目,写过这类项目的多多提意见,哪方面的意见都行,有代码或者demo的求赏给我,谢谢

DotNet项目中的一些常用验证操作

在项目中需要对用户输入的信息,以及一些方法生成的结果进行验证,一般在项目中较多的采用js插件或js来进行有关信息的校验,但是从项目安全性的角度进行考虑,可对系统进行js注入. 如果在后台对用户输入的信息进行验证会相对的安全,在出现信息验证不合法时,可以直接在程序中抛出异常,终止程序的运行. 现在提供几种较为常用的验证方法,可以减少在项目中开发时间和错误性: 1.判断域名:         /// <summary>         /// 普通的域名         /// </summ

javaWeb项目中如何实现在线查看pdf文件

最近有需求要实现在网页直接查看pdf,word,excel文件.但是实际当中并没有很好的开源插件供我们使用,确实有一些付费的插件不错,也很好用,但是对于我来说都不适合. 现在只是单纯的找到了围魏救赵的方法. 就是先实现显示pdf文件,其他文件用别的方式去转成pdf.虽然这个方法确实不好,但是也是没有办法的办法了,如果以后能有更好的,那就再发布别的吧. 这里我就直接介绍pdf的显示方法. 直接上干货. 首先在E:\tomcat8\webapps这个目录下面拷贝下面这个文件 http://yunpa

Python+Selenium进行UI自动化测试项目中,常用的小技巧2:读取配置文件(configparser,.ini文件)

在自动化测试项目中,可能会碰到一些经常使用的但 很少变化的配置信息,下面就来介绍使用configparser来读取配置信息config.ini 读取的信息(config.ini)如下: [config]platformName=AndroidappPackage=com.sheinsideappActivity=.module.GuideActivitybaseUrl=http://0.0.0.0:4723/wd/hubfindElementTimes=10[cmd]openAppium=nod

团队项目中个人的定位及计划

我们团队在这一次的移动APP开发计划中准备做一个针对上海地区大学分数线进行专业推荐的APP,根据前几章的学习,团队中的成员将会被初步分为开发人员.测试人员以及PM(program manager).我在这次的软件开发中担任开发人员的职务. 在开发开始的阶段,全员首先一起明确这次APP的主题,一起分析好这款APP将要实现怎样的功能,将要面向哪些受众:对于市面上的同类软件,我们还能添加哪些实用的功能.首先将会尽可能地将上海地区内高校近几年的分数线.每个系的最低录取分数统计好录入系统中,再根据考生相应