java 读取 excel 2003 或 excel 2007 -凯发k8网页登录

debug - 天道酬勤

   :: 凯发k8网页登录首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  671 随笔 :: 6 文章 :: 256 评论 :: 0 trackbacks

 

package com.common.website.util;

import java.io.file;
import java.io.fileinputstream;
import java.io.ioexception;
import java.io.inputstream;
import java.text.decimalformat;
import java.util.arraylist;
import java.util.list;

import org.apache.poi.hssf.usermodel.hssfdateutil;
import org.apache.poi.hssf.usermodel.hssfworkbook;
import org.apache.poi.ss.usermodel.cell;
import org.apache.poi.ss.usermodel.row;
import org.apache.poi.ss.usermodel.sheet;
import org.apache.poi.ss.usermodel.workbook;
import org.apache.poi.xssf.usermodel.xssfworkbook;

/**
 * 

     * 
  • title:[poi基础上的excel数据读取工具]

  •  * 
  • description: [支持excell2003,excell2007,自动格式化数值型数据,自动格式化日期型数据]

  •  * 
  • 凯发天生赢家一触即发官网 copyright 2009 roadway co., ltd.

  •  * 
  • all right reserved.

  •  * 
  • created by [惠万鹏] [jan 20, 2010]

  •  * 
  • midified by [modifier] [modified time]

  •  * 
     * 
  • 所需jar包列表

  •  * 
  • poi-3.6-20091214.jar

  •  * 
  • poi-contrib-3.6-20091214.jar

  •  * 
  • poi-examples-3.6-20091214.jar

  •  * 
  • poi-ooxml-3.6-20091214.jar

  •  * 
  • poi-ooxml-schemas-3.6-20091214.jar

  •  * 
  • poi-scratchpad-3.6-20091214.jar

  •  * 
  • xmlbeans-2.3.0.jar

  •  * 

       * 
       * @version 1.0
       
      */
      public class poiexcelutil
      {
          
      /** 总行数 */
          
      private int totalrows = 0;
          
          
      /** 总列数 */
          
      private int totalcells = 0;
          
          
      /** 构造方法 */
          
      public poiexcelutil()
          
      {}
          
          
      /**
           * 

             * 
      • description:[根据文件名读取excel文件]

      •      * 
      • created by [huyvanpull] [jan 20, 2010]

      •      * 
      • midified by [modifier] [modified time]

      •      * 

               * 
               * @param filename
               * 
          @return
               * 
          @throws exception
               
          */
              
          public list<arraylist<string>> read(string filename)
              
          {
                  list
          <arraylist<string>> datalst = new arraylist<arraylist<string>>();
                  
                  
          /** 检查文件名是否为空或者是否是excel格式的文件 */
                  
          if (filename == null || !filename.matches("^. \\.(?i)((xls)|(xlsx))$"))
                  
          {
                      
          return datalst;
                  }

                  
                  
          boolean isexcel2003 = true;
                  
          /** 对文件的合法性进行验证 */
                  
          if (filename.matches("^. \\.(?i)(xlsx)$"))
                  
          {
                      isexcel2003 
          = false;
                  }

                  
                  
          /** 检查文件是否存在 */
                  file file 
          = new file(filename);
                  
          if (file == null || !file.exists())
                  
          {
                      
          return datalst;
                  }

                  
                  
          try
                  
          {
                      
          /** 调用本类提供的根据流读取的方法 */
                      datalst 
          = read(new fileinputstream(file), isexcel2003);
                  }

                  
          catch (exception ex)
                  
          {
                      ex.printstacktrace();
                  }

                  
                  
          /** 返回最后读取的结果 */
                  
          return datalst;
              }

              
              
          /**
               * 

                 * 
          • description:[根据流读取excel文件]

          •      * 
          • created by [huyvanpull] [jan 20, 2010]

          •      * 
          • midified by [modifier] [modified time]

          •      * 

                   * 
                   * @param inputstream
                   * 
              @param isexcel2003
                   * 
              @return
                   
              */
                  
              public list<arraylist<string>> read(inputstream inputstream,
                          
              boolean isexcel2003)
                  
              {
                      list
              <arraylist<string>> datalst = null;
                      
              try
                      
              {
                          
              /** 根据版本选择创建workbook的方式 */
                          workbook wb 
              = isexcel2003 ? new hssfworkbook(inputstream)
                                  : 
              new xssfworkbook(inputstream);
                          datalst 
              = read(wb);
                      }

                      
              catch (ioexception e)
                      
              {
                          e.printstacktrace();
                      }

                      
              return datalst;
                  }

                  
                  
              /**
                   * 

                     * 
              • description:[得到总行数]

              •      * 
              • created by [huyvanpull] [jan 20, 2010]

              •      * 
              • midified by [modifier] [modified time]

              •      * 

                       * 
                       * @return
                       
                  */
                      
                  public int gettotalrows()
                      
                  {
                          
                  return totalrows;
                      }

                      
                      
                  /**
                       * 

                         * 
                  • description:[得到总列数]

                  •      * 
                  • created by [huyvanpull] [jan 20, 2010]

                  •      * 
                  • midified by [modifier] [modified time]

                  •      * 

                           * 
                           * @return
                           
                      */
                          
                      public int gettotalcells()
                          
                      {
                              
                      return totalcells;
                          }

                          
                          
                      /**
                           * 

                             * 
                      • description:[读取数据]

                      •      * 
                      • created by [huyvanpull] [jan 20, 2010]

                      •      * 
                      • midified by [modifier] [modified time]

                      •      * 

                               * 
                               * @param wb
                               * 
                          @return
                               
                          */
                              
                          private list<arraylist<string>> read(workbook wb)
                              
                          {
                                  list
                          <arraylist<string>> datalst = new arraylist<arraylist<string>>();
                                  
                                  
                          /** 得到第一个shell */
                                  sheet sheet 
                          = wb.getsheetat(0);
                                  
                          this.totalrows = sheet.getphysicalnumberofrows();
                                  
                          if (this.totalrows >= 1 && sheet.getrow(0!= null)
                                  
                          {
                                      
                          this.totalcells = sheet.getrow(0).getphysicalnumberofcells();
                                  }

                                  
                                  
                          /** 循环excel的行 */
                                  
                          for (int r = 0; r < this.totalrows; r)
                                  
                          {
                                      row row 
                          = sheet.getrow(r);
                                      
                          if (row == null)
                                      
                          {
                                          
                          continue;
                                      }

                                      
                                      arraylist
                          <string> rowlst = new arraylist<string>();
                                      
                          /** 循环excel的列 */
                                      
                          for (short c = 0; c < this.gettotalcells(); c)
                                      
                          {
                                          cell cell 
                          = row.getcell(c);
                                          string cellvalue 
                          = "";
                                          
                          if (cell == null)
                                          
                          {
                                              rowlst.add(cellvalue);
                                              
                          continue;
                                          }

                                          
                                          
                          /** 处理数字型的,自动去零 */
                                          
                          if (cell.cell_type_numeric == cell.getcelltype())
                                          
                          {
                                              
                          /** 在excel里,日期也是数字,在此要进行判断 */
                                              
                          if (hssfdateutil.iscelldateformatted(cell))
                                              
                          {
                                                  cellvalue 
                          = dateutil.get4ymdhms(cell.getdatecellvalue());
                                              }

                                              
                          else
                                              
                          {
                                                  cellvalue 
                          = getrightstr(cell.getnumericcellvalue()  "");
                                              }

                                          }

                                          
                          /** 处理字符串型 */
                                          
                          else if (cell.cell_type_string == cell.getcelltype())
                                          
                          {
                                              cellvalue 
                          = cell.getstringcellvalue();
                                          }

                                          
                          /** 处理布尔型 */
                                          
                          else if (cell.cell_type_boolean == cell.getcelltype())
                                          
                          {
                                              cellvalue 
                          = cell.getbooleancellvalue()  "";
                                          }

                                          
                          /** 其它的,非以上几种数据类型 */
                                          
                          else
                                          
                          {
                                              cellvalue 
                          = cell.tostring()  "";
                                          }

                                          
                                          rowlst.add(cellvalue);
                                      }

                                      datalst.add(rowlst);
                                  }

                                  
                          return datalst;
                              }

                              
                              
                          /**
                               * 

                                 * 
                          • description:[正确地处理整数后自动加零的情况]

                          •      * 
                          • created by [huyvanpull] [jan 20, 2010]

                          •      * 
                          • midified by [modifier] [modified time]

                          •      * 

                                   * 
                                   * @param snum
                                   * 
                              @return
                                   
                              */
                                  
                              private string getrightstr(string snum)
                                  
                              {
                                      decimalformat decimalformat 
                              = new decimalformat("#.000000");
                                      string resultstr 
                              = decimalformat.format(new double(snum));
                                      
                              if (resultstr.matches("^[- ]?\\d \\.[0] $"))
                                      
                              {
                                          resultstr 
                              = resultstr.substring(0, resultstr.indexof("."));
                                      }

                                      
                              return resultstr;
                                  }

                                  
                                  
                              /**
                                   * 

                                     * 
                              • description:[测试main方法]

                              •      * 
                              • created by [huyvanpull] [jan 20, 2010]

                              •      * 
                              • midified by [modifier] [modified time]

                              •      * 

                                       * 
                                       * @param args
                                       * 
                                  @throws exception
                                       
                                  */
                                      
                                  public static void main(string[] args) throws exception
                                      
                                  {
                                          list
                                  <arraylist<string>> datalst = new poiexcelutil()
                                                  .read(
                                  "e:/book1_shao.xls");
                                          
                                  for (arraylist<string> innerlst : datalst)
                                          
                                  {
                                              stringbuffer rowdata 
                                  = new stringbuffer();
                                              
                                  for (string datastr : innerlst)
                                              
                                  {
                                                  rowdata.append(
                                  ",").append(datastr);
                                              }

                                              
                                  if (rowdata.length() > 0)
                                              
                                  {
                                                  system.out.println(rowdata.deletecharat(
                                  0).tostring());
                                              }

                                          }

                                      }

                                  }
posted on 2010-01-20 18:25 huikk 阅读(9846) 评论(14)     所属分类: tool
# re: java 读取 excel 2003 或 excel 2007 2010-12-15 14:10
如果一次读取 300000条数据怎么办?  回复  
  

# re: java 读取 excel 2003 或 excel 2007 2010-12-31 11:41
把你的poi包给我发一份。谢谢
* poi-3.6-20091214.jar
* poi-contrib-3.6-20091214.jar
* poi-examples-3.6-20091214.jar
* poi-ooxml-schemas-3.6-20091214.jar
* poi-scratchpad-3.6-20091214.jar
* >xmlbeans-2.3.0.jar  回复  
  

# re: java 读取 excel 2003 或 excel 2007 2010-12-31 11:41
@张
我的邮箱123306454@qq.com  回复  
  

# re: java 读取 excel 2003 或 excel 2007 2012-05-28 17:42
什么啊,程序不对workbook wb = isexcel2003 ? new hssfworkbook(inputstream)
: new xssfworkbook(inputstream);
  回复  
  

# re: java 读取 excel 2003 或 excel 2007 2012-10-15 18:33
dateutil.get4ymdhms这个方法报错啊 怎么回事儿啊 下载的是你的jar包 求解释  回复  
  

# re: java 读取 excel 2003 或 excel 2007 2012-10-15 22:44 惠万鹏
public class dateutil
{
/**
*

    *
  • description:[得到当前的时间]

  • *
  • created by [huyvanpull] [oct 26, 2009]

  • *
  • midified by [modifier] [modified time]

  • *

      *
      * @return
      */
      public static date getdate()
      {
      calendar canlendar = calendar.getinstance();
      return canlendar.gettime();
      }

      /**
      *

        *
      • description:[提到指定的millis得到时间]

      • *
      • created by [huyvanpull] [oct 26, 2009]

      • *
      • midified by [modifier] [modified time]

      • *

          *
          * @param millis
          * @return
          */
          public static date getdate(long millis)
          {
          calendar canlendar = calendar.getinstance();
          canlendar.clear();
          canlendar.settimeinmillis(millis);
          return canlendar.gettime();
          }

          public static long getmillis()
          {
          return calendar.getinstance().gettimeinmillis();
          }

          /**
          *

            *
          • description:[得到指定日期的字符串(yyyy-mm-dd hh:mm:ss.sss)]

          • *
          • created by [huyvanpull] [oct 26, 2009]

          • *
          • midified by [modifier] [modified time]

          • *

              *
              * @param date
              * @param formate
              * @return
              */
              public static string getdateformate(date date, string formate)
              {
              try
              {
              simpledateformat simpledateformate = new simpledateformat(formate);
              return simpledateformate.format(date);
              }
              catch (exception e)
              {}
              return "";
              }

              /**
              *

                *
              • description:[根据日期得到yyyy-mm-dd hh:mm:ss.sss格式字符串]

              • *
              • created by [huyvanpull] [oct 26, 2009]

              • *
              • midified by [modifier] [modified time]

              • *

                  *
                  * @param date
                  * @return
                  */
                  public static string get4ymdhmss(date date)
                  {
                  return dateutil.getdateformate(date, "yyyy-mm-dd hh:mm:ss.sss");
                  }

                  /**
                  *

                    *
                  • description:[根据日期得到yyyy-mm-dd hh:mm:ss格式字符串]

                  • *
                  • created by [huyvanpull] [oct 26, 2009]

                  • *
                  • midified by [modifier] [modified time]

                  • *

                      *
                      * @param date
                      * @return
                      */
                      public static string get4ymdhms(date date)
                      {
                      return dateutil.getdateformate(date, "yyyy-mm-dd hh:mm:ss");
                      }

                      /**
                      *

                        *
                      • description:[根据日期得到yyyy-mm-dd hh:mm格式字符串]

                      • *
                      • created by [huyvanpull] [oct 26, 2009]

                      • *
                      • midified by [modifier] [modified time]

                      • *

                          *
                          * @param date
                          * @return
                          */
                          public static string get4ymdhm(date date)
                          {
                          return dateutil.getdateformate(date, "yyyy-mm-dd hh:mm");
                          }

                          /**
                          *

                            *
                          • description:[根据日期得到yyyy-mm-dd格式字符串]

                          • *
                          • created by [huyvanpull] [oct 26, 2009]

                          • *
                          • midified by [modifier] [modified time]

                          • *

                              *
                              * @param date
                              * @return
                              */
                              public static string get4ymd(date date)
                              {
                              return dateutil.getdateformate(date, "yyyy-mm-dd");
                              }

                              /**
                              *

                                *
                              • description:[把指定字符(yyyy-mm-dd hh:mm:ss.sss)串转成date]

                              • *
                              • created by [huyvanpull] [oct 26, 2009]

                              • *
                              • midified by [modifier] [modified time]

                              • *

                                  *
                                  * @param sdate
                                  * @return
                                  */
                                  public static date parse4ymdhmss(string sdate)
                                  {
                                  return dateutil.parsedate(sdate, "yyyy-mm-dd hh:mm:ss.sss");
                                  }

                                  /**
                                  *

                                    *
                                  • description:[把指定字符(yyyy-mm-dd hh:mm:ss)串转成date]

                                  • *
                                  • created by [huyvanpull] [oct 26, 2009]

                                  • *
                                  • midified by [modifier] [modified time]

                                  • *

                                      *
                                      * @param sdate
                                      * @return
                                      */
                                      public static date parse4ymdhms(string sdate)
                                      {
                                      return dateutil.parsedate(sdate, "yyyy-mm-dd hh:mm:ss");
                                      }

                                      /**
                                      *

                                        *
                                      • description:[把指定字符(yyyy-mm-dd hh:mm)串转成date]

                                      • *
                                      • created by [huyvanpull] [oct 26, 2009]

                                      • *
                                      • midified by [modifier] [modified time]

                                      • *

                                          *
                                          * @param sdate
                                          * @return
                                          */
                                          public static date parse4ymdhm(string sdate)
                                          {
                                          return dateutil.parsedate(sdate, "yyyy-mm-dd hh:mm");
                                          }

                                          /**
                                          *

                                            *
                                          • description:[把指定字符(yyyy-mm-dd)串转成date]

                                          • *
                                          • created by [huyvanpull] [oct 26, 2009]

                                          • *
                                          • midified by [modifier] [modified time]

                                          • *

                                              *
                                              * @param sdate
                                              * @return
                                              */
                                              public static date parse4ymd(string sdate)
                                              {
                                              return dateutil.parsedate(sdate, "yyyy-mm-dd");
                                              }

                                              /**
                                              *

                                                *
                                              • description:[根据指定格式,把字符串转成日期]

                                              • *
                                              • created by [huyvanpull] [oct 26, 2009]

                                              • *
                                              • midified by [modifier] [modified time]

                                              • *

                                                  *
                                                  * @param sdate
                                                  * @param formate
                                                  * @return
                                                  */
                                                  public static date parsedate(string sdate, string formate)
                                                  {
                                                  simpledateformat simpledateformate = new simpledateformat(formate);
                                                  try
                                                  {
                                                  return simpledateformate.parse(sdate);
                                                  }
                                                  catch (parseexception e)
                                                  {
                                                  return null;
                                                  }
                                                  }

                                                  /**
                                                  *

                                                    *
                                                  • description:[两个长整型的时间相差(时间的毫秒数),可以得到指定的毫秒数,秒数,分钟数,天数]

                                                  • *
                                                  • created by [huyvanpull] [oct 26, 2009]

                                                  • *
                                                  • midified by [modifier] [modified time]

                                                  • *

                                                      *
                                                      * @param minuendtime[被减去的时间]
                                                      * @param subtrahendtime[减去的时间]
                                                      * @param tdatestr[part可选值["d","h","m","s","ms"]
                                                      * @return[minuendtime-subtrahendtime]
                                                      * @return
                                                      */
                                                      public static double getdiftwotime(date minuendtime, date subtrahendtime,
                                                      string tdatestr)
                                                      {
                                                      if (minuendtime == null || subtrahendtime != null)
                                                      {
                                                      return dateutil.getdiftwotime(minuendtime.gettime(), subtrahendtime
                                                      .gettime(), tdatestr);
                                                      }
                                                      return 0;
                                                      }

                                                      /**
                                                      *

                                                        *
                                                      • description:[两个长整型的时间相差(时间的毫秒数),可以得到指定的毫秒数,秒数,分钟数,天数]

                                                      • *
                                                      • created by [huyvanpull] [oct 26, 2009]

                                                      • *
                                                      • midified by [modifier] [modified time]

                                                      • *

                                                          *
                                                          * @param minuendtime[被减去的时间]
                                                          * @param subtrahendtime[减去的时间]
                                                          * @param tdatestr[part可选值["d","h","m","s","ms"]
                                                          * @return[minuendtime-subtrahendtime]
                                                          */
                                                          public static double getdiftwotime(long minuendtime, long subtrahendtime,
                                                          string tdatestr)
                                                          {
                                                          if (tdatestr == null || tdatestr.equals(""))
                                                          {
                                                          tdatestr = "ms";
                                                          }
                                                          double temp = 1;
                                                          /** 毫秒数 */
                                                          if ("ms".equalsignorecase(tdatestr))
                                                          {
                                                          temp = 1;
                                                          }
                                                          /** 得到秒 */
                                                          if ("s".equalsignorecase(tdatestr))
                                                          {
                                                          temp = 1000;
                                                          }
                                                          /** 得到分 */
                                                          if ("m".equalsignorecase(tdatestr))
                                                          {
                                                          temp = 1000 * 60;
                                                          }
                                                          /** 得到小时 */
                                                          if ("h".equalsignorecase(tdatestr))
                                                          {
                                                          temp = 1000 * 60 * 60;
                                                          }
                                                          /** 得到天 */
                                                          if ("d".equalsignorecase(tdatestr))
                                                          {
                                                          temp = 1000 * 60 * 60 * 24;
                                                          }
                                                          return (minuendtime - subtrahendtime) / temp;
                                                          }

                                                          /**
                                                          *

                                                            *
                                                          • description:[从日期中得到指定部分(yyyy/mm/dd/hh/ss/sss)数字]

                                                          • *
                                                          • created by [huyvanpull] [oct 26, 2009]

                                                          • *
                                                          • midified by [modifier] [modified time]

                                                          • *

                                                              *
                                                              * @param date
                                                              * @param part[part可选值["y","m","d","h","m","s","ms"]
                                                              * @return
                                                              */
                                                              public static int getpartoftime(date date, string part)
                                                              {
                                                              calendar canlendar = calendar.getinstance();
                                                              canlendar.clear();
                                                              canlendar.settime(date);
                                                              /** 得到年 */
                                                              if (part.equalsignorecase("y"))
                                                              {
                                                              return canlendar.get(calendar.year);
                                                              }
                                                              /** 得到月 */
                                                              if (part.equalsignorecase("m"))
                                                              {
                                                              return canlendar.get(calendar.month) 1;
                                                              }
                                                              /** 得到日 */
                                                              if (part.equalsignorecase("d"))
                                                              {
                                                              return canlendar.get(calendar.day_of_month);
                                                              }
                                                              /** 得到时 */
                                                              if (part.equalsignorecase("h"))
                                                              {
                                                              return canlendar.get(calendar.hour_of_day);
                                                              }
                                                              /** 得到分 */
                                                              if (part.equalsignorecase("m"))
                                                              {
                                                              return canlendar.get(calendar.minute);
                                                              }
                                                              /** 得到秒 */
                                                              if (part.equalsignorecase("s"))
                                                              {
                                                              return canlendar.get(calendar.second);
                                                              }
                                                              /** 得到毫秒 */
                                                              if (part.equalsignorecase("ms"))
                                                              {
                                                              return canlendar.get(calendar.millisecond);
                                                              }
                                                              return -1;
                                                              }
                                                              }  回复  
                                                                

# re: java 读取 excel 2003 或 excel 2007 2012-12-21 12:41
能读2003xls文件,但是读不了xlsx文件  回复  
  

# re: java 读取 excel 2003 或 excel 2007 2012-12-21 13:58
不是程序不对,读取2003没问题,读取2007的话workbook wb = isexcel2003 ? new hssfworkbook(inputstream)
: new xssfworkbook(inputstream) 这一行就会有异常,我觉得不是程序的错误,可能是jar包出错了?? 我也不知道,希望楼主能出面解决一下  回复  
  

# re: java 读取 excel 2003 或 excel 2007 2012-12-21 14:00 惠万鹏
没问题的, 这个是经过测试, 现在项目也在使用.
你检查一下你的jar包是否有问题.  回复  
  

# re: java 读取 excel 2003 或 excel 2007 2012-12-21 14:01 惠万鹏
加我qq我给你一个文件.  回复  
  

# re: java 读取 excel 2003 或 excel 2007 2013-05-05 08:42
错误: 找不到或无法加载主类,怎么会这样,jar包倒入没问题阿!  回复  
  

# re: java 读取 excel 2003 或 excel 2007 2013-05-05 09:14
完全没问题,eclipse的问题  回复  
  

# re: java 读取 excel 2003 或 excel 2007[未登录] 2013-08-01 17:31
有类变量,并发会有问题吧?  回复  
  

# re: java 读取 excel 2003 或 excel 2007 2014-02-10 20:51
还需要dom4j这个jar包,楼主忘列了吧  回复  
  


只有注册用户后才能发表评论。


网站导航:
              
相关文章:
 
网站地图