我用jxl.jar包,提取了2个excel表的内容(2个字符串)比较。以一个为准,然后用for循环去另外一个表中取数据,然后用字符串的equals函数比较,结果200多个数据 比较了十几秒才出现结果!!!这个是电脑问题呢?还是我的程序写法问题?

解决方案 »

  1.   

    你想干啥?直接读取后equal不行吗?
      

  2.   

    这种Excel 表格数据比较。 你200多个数据只需要比较200多次 就够了。因为你不会让Excel中2 个不相关的Cell进行比较,这是一种没意义的事情。
    你速度很慢,可能真的如2楼所说你比较了4万多次
      

  3.   

    就是2个excel表格里面的数据取出来对比后,把相应的数据再加到另外一张excel表上面去
      

  4.   

    import java.io.*;import jxl.*;
    import jxl.read.biff.BiffException;
    import jxl.write.*;
    import jxl.write.biff.RowsExceededException;public class ceshi {
    public static void main(String args[]) {
    try {
    Cell[] cell =new Cell[259];
    String result;
    Workbook book = Workbook.getWorkbook(new File("book1.xls" ));
    // 获得第一个工作表对象
    Sheet sheet = book.getSheet(0);
    // 得到第一列第一行的单元格
    for(int i=1;i<259;i++)
    {
    cell[i] = sheet.getCell(1, i);
    result = cell[i].getContents();
    if(result.equals(bijiao1(2))){
    write11(result);
    System.out.println(result);
    }
    }
    //write11(result);
    book.close();
    } catch (Exception e) {
    System.out.println(e);
    }
    }
    public static String bijiao1(int i ){
    Workbook book = null;
    try {
    book = Workbook.getWorkbook(new File("结果.xls" ));
    } catch (BiffException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    // 获得第一个工作表对象
    Sheet sheet = book.getSheet(0);
    // 得到第一列第一行的单元格
    Cell cell1 = sheet.getCell(0, i);
    String result = cell1.getContents();
    return result;
    }
    public static void write11(String a){
    try 

    //Excel获得文件 
    Workbook wb=Workbook.getWorkbook(new File("结果.xls")); 
    //打开一个文件的副本,并且指定数据写回到原文件 
    WritableWorkbook book= 
    Workbook.createWorkbook(new File("结果.xls"),wb); 
    //添加一个工作表 
    WritableSheet sheet=book.getSheet(0); 
    sheet.addCell(new Label(9,1,a)); 
    book.write(); 
    book.close(); 
    }catch(Exception e) 

    System.out.println(e); 


    }
    }
      

  5.   

    我的代码:
    import java.io.*;import jxl.*;
    import jxl.read.biff.BiffException;
    import jxl.write.*;
    import jxl.write.biff.RowsExceededException;public class ceshi {
    public static void main(String args[]) {
    try {
    Cell[] cell =new Cell[259];
    String result;
    Workbook book = Workbook.getWorkbook(new File("book1.xls" ));
    // 获得第一个工作表对象
    Sheet sheet = book.getSheet(0);
    // 得到第一列第一行的单元格
    for(int i=1;i<259;i++)
    {
    cell[i] = sheet.getCell(1, i);
    result = cell[i].getContents();
    if(result.equals(bijiao1(2))){
    write11(result);
    System.out.println(result);
    }
    }
    //write11(result);
    book.close();
    } catch (Exception e) {
    System.out.println(e);
    }
    }
    public static String bijiao1(int i ){
    Workbook book = null;
    try {
    book = Workbook.getWorkbook(new File("结果.xls" ));
    } catch (BiffException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    // 获得第一个工作表对象
    Sheet sheet = book.getSheet(0);
    // 得到第一列第一行的单元格
    Cell cell1 = sheet.getCell(0, i);
    String result = cell1.getContents();
    return result;
    }
    public static void write11(String a){
    try 

    //Excel获得文件 
    Workbook wb=Workbook.getWorkbook(new File("结果.xls")); 
    //打开一个文件的副本,并且指定数据写回到原文件 
    WritableWorkbook book= 
    Workbook.createWorkbook(new File("结果.xls"),wb); 
    //添加一个工作表 
    WritableSheet sheet=book.getSheet(0); 
    sheet.addCell(new Label(9,1,a)); 
    book.write(); 
    book.close(); 
    }catch(Exception e) 

    System.out.println(e); 


    }
    }
      

  6.   

    Workbook wb=Workbook.getWorkbook(new File("1.xls"));  第一次读取,然后存储到a
    Workbook wb=Workbook.getWorkbook(new File("2.xls"));  第二次读取,然后存储到b
    比较a,b
      

  7.   

    不是字符串比较慢,而是读写文件慢
    你的代码每循环一次,执行write11()一次
    write11()需要打开文件,写文件关闭文件
    磁盘IO向来是速度的瓶颈
    你最好把结果先保存在一个数组里,最后一次写入文件
      

  8.   


    哦这样,那bijiao1()循环了200多次,bijiao1居然也每次都执行一次完整的文件操作
    你一次性把需要被比较的读入一个数组吧,不要这么反复地打开文件
      

  9.   

    如果是  对应单元格比较   就按11#的 一次加载2个XLS 文件 然后  循环比较 对应的单元格  equals如果说是 只要 XLS2 中有跟 XLS1中相同的内容 不论单元格位置是不是相同 都要作为结果取出的话你可以试试这种方法加载 xls1  遍历存入 map<String,Integer> 中  key 为 xls1中的 字符串   value 初始为0然后 加载 xls2  遍历 xls2 然后  if(map.get(xls2.value)==0) map.put(xls2.value,map.get(xls2.value)+1)最后 把所有 值不等于0的  key  输出到  结果文件中  
      

  10.   


    Sheet sheet = book.getSheet(0);
    String[] a = new String[259];
    List<String> b = new ArrayList<String>();
    // 得到第一列第一行的单元格
    for(int i=1;i<259;i++)
    {
        cell[i] = sheet.getCell(1, i);
        a[i] = cell[i].getContents();
    }for(int i=1;i<259;i++)
    {
        cell[i] = sheet.getCell(1, i);
        if(a[i] != null && a[i].equals(cell[i].getContents())) {
           //数据相同
           b.add(a[i]);
         }
    }//然后处理b中的数据
      

  11.   

    把两个excel要比的数据全部读出来放到内存里,然后再比较,excel的IO操作本来就很慢