`

读取Excel,使用流的方式--速度很慢

阅读更多
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import jxl.Cell;
import jxl.CellType;
import jxl.NumberCell;
import jxl.Sheet;
import jxl.Workbook;

public class UploadExcel
{

private static  ArrayList lst=new ArrayList();

//将数据保存在 HashMap中
private static ArrayList<Map<String,Object>> mlist=null;


//表名
private static String tableName;

//文件路径
private static String filepath;

/**
*读取表中的数据,并将数据存放到一个三位数组中
*
* **/
public static ArrayList<Map<String,Object>> readExcel(InputStream stream)
{
System.out.println("InputStream start: ");
mlist=new ArrayList<Map<String,Object>>();
try
{
Workbook rwb=Workbook.getWorkbook(stream);
Sheet st[]=rwb.getSheets();
System.out.println("表格个数: "+st.length);
for(int a=0;a<st.length;a++)
{
ArrayList alList=new ArrayList();
ArrayList tablenames=new ArrayList();
ArrayList tableAndContents=new ArrayList();
// System.out.println("=第"+(a+1)+"张表=");
tableName=st[a].getName().trim();
    int b=0;
    //tmonth
    int tmonth=0;
   
    //行
    for(int i=1;i<st[a].getRows();i++)
    {  
       Map mp=new HashMap();
           if(st[a].getCell(0,i).getContents()==null || st[a].getCell(0,i).getContents().equals("")) break;
          
           int columns=st[a].getColumns();
           tmonth=0;
           if(columns>5) columns=5;
         //   System.out.println(columns+"   : "+st[a].getColumns());
    for(int j=0;j<columns;j++)
    {
        
         if(st[a].getCell(j,i).getContents()==null || st[a].getCell(j,i).getContents().equals("")) break;

      Cell cl=st[a].getCell(j, i);
          String strcl=new String();
          if (j == 0)
          {
if (st[a].getCell(0, i).getType() == CellType.NUMBER)
{
NumberCell cd = (NumberCell) st[a].getCell(0, i);
strcl=ChangeUtil.getDateInfor(cd.getValue());
tmonth=ChangeUtil.getDate(cd.getValue());
}
else 
{
   break;
}
          }
        else
           strcl=cl.getContents().trim(); 
        strcl=ChangeUtil.change(strcl); 
        mp.put(array[j], strcl);  
      }  

    if(mp!=null && tmonth!=0){
mp.put(array[array.length-2],"IF"+tableName);
mp.put(array[array.length-1], tmonth);
    mlist.add(mp);
    System.out.println("hello: "+mlist);
  }
    } 
}
rwb.close();
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return mlist;
}
public static List<Map<String,Object>>loadExcel(InputStream stream)
{
return readExcel(stream);
}
}
分享到:
评论

相关推荐

    使用libxl库读取excel文件

    在程序中读取excel文件比如XLS和XLSX,方法有很多,比如ADO,OLE,ODBC等方式。但是这些方法要么依赖于平台,要么读取速度慢,有的甚至需要电脑本身装有excel程序。 但是有一个付费的商业软件库Libxl,属于轻量化的...

    VC读写Excel速度慢问题解决方案的源代码

    VC读写Excel速度慢问题解决方案的源代码,希望对你有用。

    POI读写海量Excel(详细解读)

    对Excel的读取,POI有两种模式,一是用户模式,这种方式同Jxl的使用很类似,使用简单,都是将文件一次性读到内存,文件小的时候,没有什么问题,当文件大的时候,就会出现OutOfMemory的内存溢出问题。第二种是事件...

    jxl包-用于java读取excel表格

    Jxl是一个开源的Java Excel API项目,通过Jxl,Java可以很方便的操作微软的Excel文档。除了Jxl之外,还有Apache的一个POI项目,也可以操作Excel,两者相比之下:Jxl使用方便,但功能相对POI比较弱。POI使用复杂,...

    poi:适合解析小的excel文件,文件稍微大一点就出现OOM。

    事件驱动解析是把文件转换成xml,然后一边读取一边解析,这样就对内存的占用就会很少,可以很好的处理poi出现OOM的问题。 maven添加需要的jar包 &lt;groupId&gt;org.apache.poi &lt;artifactId&gt;poi &lt;version&gt;3.15 ...

    NPOI导入导出Excel案例以及各种帮助类,NPOI使用手册,导出多个Excel

    可读取excel,放入DataTable。在DataTable中我们可以做任何我们想做的事。 可以随意加工,然后导出excel。 之前在网上找到很多代码支持2007的操作,但是NOPI的dll却不支持。总是导入导出报错。 随后在一个文档里...

    PHP excel通用成绩查询系统 v7.8 SAE版.zip

    使用的是PHPexcel查询Excel,测试可用,可能速度偏慢(千条数据无影响) 直接查询Excel数据的第一个表,修改表格后FTP上传,快速搞定,非常方便。 当然LINUX可能xls文件可以倍下载,如果保密数据,请做防下载处理哦...

    VS2008c++ 对操作EXCEL进行的类的封装

    最近想研究vc中读取,存取excel文档,但所用的编译器是vs2008版本,网上多数教程或封装的有关类是vc6.0版本的,介于2008中很多的不同,我搜集网上的方法对有关操作excel的类进行了封装,以便于直接的使用。...

    czyBlog-master

    Qt读写Excel,很多人读写的速度都很慢,这里提供的一种方法会快速的读取Excel

    ExcelHelper.rar_C# dataTable_C# excel helper_c# excelhelper_exce

    C#读写Excel文件、不需要office支持,可读取Excel文件到DataSet、DataTable中,也可以将内存表写入到Excel文件。包含几个dll组件和一个cs代码文件,有详尽注释,我自己经常用。不过导出的性能不好,如果是上万行的...

    黑莓中的短信到电脑 可选格式为txt和excel

    手机中的短信多了不好管理,手机读取的时候还很慢,影响速度。这里王二推荐一款叫BBerSMSManager的手机软件,能轻松的将黑莓(BlackBerry)上的短信备份到电脑上,可以选择保存的格式为txt文件或者excel文件,并且除了...

    用友政务GRP-U8,近期常见问题85例解决方法

    1.查询科目明细账会出现很多重复记录,2.查询明细账未按照凭证号排序3.自定义凭证打印,不打印上级科目名称:13.打开凭证箱慢15.期初余额装入中导入Excel文件报错,17.以前是双凭证模式,怎么调整为单凭证模式等等85...

    计算机应用技术(实用手册)

    SECURITY OPTION(检测密码方式)如设定为SETUP,则每次打开机器时屏幕均会提示输入口令(普通用户口令或超级用户口令,普通用户无权修改BIOS设置),不知道口令则无法使用机器;如设定为SYSTEM则只有在用户想进入BIOS设置...

    vfp6.0系统免费下载

    现在您的应用程序可以使用此标准在 Microsoft Excel 和 Word 等其他应用程序之间拖放数据。 问题 2-4: 为什么有两个应用程序向导? 答案: 为了简化 Visual FoxPro 开发人员开发应用程序的过程,在 6.0 版中加入了...

    网管教程 从入门到精通软件篇.txt

    /r 找到坏扇区并恢复可读取的信息。隐含着 /p 参数。  注意 Chkdsk 命令需要 Autochk.exe 文件。如果不能在启动目录(默认为 %systemroot%System32)中找到该文件,将试着在 Windows 安装 CD 中找到它。如果有多...

    数据库编程工具 for vs05 08 2010

    数据库编程工具 for vs05 08 2010 =================================== 一款基于VB.NET环境下进行... 最好PS下:VS2010真的很巨大,微软就是一个胖子,酷睿双核的本本启动起来老慢,难不成逼我换本子学习VS啊。:-)

    短信彩信群发系统平台源码1.0版

    此系统的主要目的是让客户端感觉不到发送短信很慢。客户端只需要提交号码,由此系统接收号码发出去,从而减轻客户端的压力。 6、网关回复系统: 本系统的功能是将对接上的回复短信内容给接受过来,存到用户的收件箱中...

    回调函数的意义以及python实现实例

    因工作需要,最近在学习使用python来解析各种文件,包括xmind,xml,excel,csv等等。 在学习python解析XML的时候看到这样一段话: ElementTree(元素树) ElementTree就像一个轻量级的DOM,具有方便友好的API。代码...

    TCS230颜色传感器测试软件XCOM V2.0.rar

     TCS230测试工具可以使用TTL USB转接线连接电脑,根据命令进行操作,里面有很多的命令。可以进行测试以及调试的功能。 XCOM V2.0更新说明 1.增加了多条发送的数目,多达40条 2.可以任意编辑,导入导出您要发送...

Global site tag (gtag.js) - Google Analytics