目前我有一批数据需要从客户端的Excel文件中导入,并且对数据中的某一行进行逻辑校验和重复校验(同个文档中是否有相同数据),然后将校验结果在页面中显示,并将有错误的列在前面。数据量在10000条左右。我曾尝试开发过一个,但是当数据大于400条就会造成页面卡死,没反应。
有没有比较好的方法解决,由于放在互联网上,速度也不能太慢。

解决方案 »

  1.   

    我用的这个,可以用,但是没有经过大量数据测试: public List uploadExcel(String filePath) {

    List<String> list = new ArrayList<String>();
    try {
    HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(
    filePath));//将得到的文件放到HSSFWorkbook
    HSSFSheet sheet = workbook.getSheetAt(0);// 在Excel文档中,第一张工作表的缺省索引是0
    int rows = sheet.getPhysicalNumberOfRows();// 获取到Excel文件中的所有行数
    // 遍历列
    for (int i = 1; i < rows; i++) {
    // 读取左上端单元格
    HSSFRow row = sheet.getRow(i);//得到行数
    String value = "";
    // int cells = row.getPhysicalNumberOfCells();// 获取到Excel文件中的所有的列
    int cells = sheet.getRow(i).getLastCellNum();
    // System.out.println("第"+i+"行:"+sheet.getRow(i).getLastCellNum());
    int ce = row.getLastCellNum();

    if (row != null) {// 行不为空
    // 遍历列
    for (int j = 0; j < row.getLastCellNum(); j++) {//Resource.xls每行具有八列
    HSSFCell cell = row.getCell((short) j);// 获取到列的值
    if (cell != null) {
    switch (cell.getCellType()) {
    case HSSFCell.CELL_TYPE_FORMULA:
    break;
    case HSSFCell.CELL_TYPE_NUMERIC:// 判断是否为数字
    value += cell.getNumericCellValue() + ";";
    break;
    case HSSFCell.CELL_TYPE_BLANK: // 判断是否为空格,若为空格,则用&代替
    value += "&" + ";";
    break;
    case HSSFCell.CELL_TYPE_STRING:// 判断是否为字符串
    value += cell.getStringCellValue() + ";";
    break;
        case HSSFCell.CELL_TYPE_BOOLEAN:   
            break;   
        case HSSFCell.CELL_TYPE_ERROR:   
            break;   
        default:   
            break; 
    }
    }else{
    continue;
    }
    }
    }
    StringBuffer sb = new StringBuffer();
    for(int m=0;m<row.getLastCellNum();m++){
    sb.append("&;");
    }
    if (!value.equals(sb.toString())) {// 若一行为空格,则不加入list集合中
    list.add(value);
    }
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    return list;
    }
      

  2.   

    10000数据,如果采用页面级DOM操作,想不死也难。
    直接数据库中操作吧