`

读取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速度慢问题解决方案的源代码

    然而,使用默认的方式读写Excel文件时,可能会遇到性能瓶颈,导致整个程序运行速度变慢。这在处理大量数据时尤为明显,如考勤系统的数据管理。本篇将详细介绍如何通过优化源代码来解决VC++读写Excel速度慢的问题,并...

    大数据量Excel读取工具.zip

    Excel本身虽然功能强大,但在处理大量数据时会面临性能瓶颈,如打开速度慢、内存消耗大、计算效率低等。当文件超过一定大小,如超过100万行,Excel的性能会显著下降。 为了解决这些问题,开发者通常会选择使用编程...

    c# excel采用三种方式上传数据

    但是,这种方式的缺点也很明显,它依赖于Excel客户端的安装,并且运行速度相对较慢,因为涉及到进程间通信。以下是一个简单的示例,展示如何使用InterOp读取Excel数据: ```csharp using Excel = Microsoft.Office....

    C#的Excel导入功能源码(附使用说明)

    - **读取Excel数据**: 通过指定工作表名称或索引,读取单元格内容,可以是单个单元格,也可以是整行或整列。 - **导入数据**: 将程序中的数据写入Excel,创建新的工作表或覆盖已有内容。 - **处理大量数据**: 支持大...

    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 ...

    VC++操作CListCtrl与EXCEL表格,附带两个小例子

    第四,ODBC方式可以读写EXCEL文件,但速度很慢,需要安装ODBC驱动程序。ADO方式与OLE方式类似,也可以读写EXCEL文件,但速度可能不高。 第五,LibXL是一个收费的EXCEL库,可以不依赖EXCEL读取XLS文件,包括设置格式...

    python用win32com处理excel表格.pdf

    openpyxl 是不需要其它支持的,但加载 Excel 文件的效率比 xlrd 慢 3 倍以上,内存使用在 10 倍以上。 2. 使用 win32com 读取 Excel 文件 使用 win32com 读取 Excel 文件可以避免读写格式上的问题。win32com 只是...

    (完整word)python操作excel.doc

    本文主要介绍了使用 Python 操作 Excel 的方法,包括读取 Excel 文件、插入数据库等操作。文章首先介绍了三种读写 Excel 的方法:xlrd、xlwt、xlutils、openpyxl 和 win32com,比较了它们的优缺点,并选择了 xlrd 和...

    解决python执行较大excel文件openpyxl慢问题

    而`xlrd`库则使用了更高效的方法,它能够像访问数组一样直接定位到指定单元格的数据,因此读取速度较快,几乎不受文件大小影响。 在代码中,作者展示了如何使用`openpyxl`和`xlrd`分别读取同一文件中的特定单元格...

    C#将Excel导入到Access数据库表(winForm版)

    1. **读取Excel文件**:通过`OpenFileDialog`控件选取Excel文件。 2. **连接Excel文件**:利用OLE DB技术建立与Excel文件的连接。 3. **查询Excel数据**:编写SQL语句查询Excel中的特定表或工作表数据。 4. **插入...

    Test - VBA - EXCEL

    这个脚本可能实现了在Excel表格的每m列或行之间插入n个空白列或行的功能,这对于组织数据、创建间隔或者准备数据格式化可能很有帮助。 3. **vba自带密码**: 这可能是指如何为VBA宏设置密码保护,以防止未经授权...

    php_excel操作类

    - **读取Excel文件**:Spreadsheet_Excel_Reader可以逐行或逐列遍历工作表,获取每个单元格的值,包括文本、数字、日期等类型,同时也可以处理公式和条件格式化。 - **写入Excel文件**:Spreadsheet_Excel_Writer...

    利用JAVA操作EXCEL文件

    它支持读取Excel 95、97、2000等格式的文件,读取公式的值(支持Excel 97之后的公式),生成Excel 97格式的数据表,以及进行字体、数字、日期格式化,单元格阴影和颜色操作等功能。不过,它目前不支持读取图表信息和...

    C++/c导入导出Excel

    这种方式可以直接创建、修改和保存Excel文件,但需要安装Excel,并且运行速度相对较慢。 - **libxlsxwriter**:专门用于创建.xlsx文件的C库,它不依赖于Excel,可以高效地生成大量数据的Excel文件。 - **xlsxio**...

    商业编程-源码-数据导入与数据导出Excel.zip

    在商业编程领域,数据导入与数据导出是至关重要的功能,尤其当涉及到与Excel这种广泛使用的电子表格软件交互时。本资源"商业编程-源码-数据导入与数据导出Excel.zip"提供了一套源码,帮助开发者实现这一功能。下面...

    使用easyExecl大文件读写,实测50mb 13s,附测试类工具类

    3. **读取操作**:使用`EasyExcel.read()`方法,传入文件路径、实体类和监听器实例,开始读取Excel。EasyExcel会自动按照设置解析数据并调用监听器的方法。 4. **写入操作**:对于写入,可以使用`EasyExcel.write()...

    excel转二进制文件以及代码源码

    XML格式的Excel文件(XLSX)基于ZIP压缩,包含多个XML文档,这使得文件体积较大且读写速度较慢。相比之下,二进制格式的Excel文件(XLSB)使用了更紧凑的数据结构,减少了磁盘空间占用,同时加快了文件的加载和保存...

    将Excel数据导入到SqlServer中

    3. OPENROWSET:Sql Server提供的一种函数,可以直接从外部源(如Excel文件)读取数据,将其作为结果集返回,进而插入到数据库表中。 将Excel数据导入Sql Server的过程通常包括以下步骤: 1. 准备Excel数据:确保...

Global site tag (gtag.js) - Google Analytics