本帖最后由 rightxiang 于 2011-10-13 20:00:33 编辑

解决方案 »

  1.   

    http://www.jspcn.net/htmlnews/11453819137961448.html
      

  2.   

    给你一段 我用jxl读取excel生成txt的代码:
    /**
     * 读取xls文件到set
     * 
     * @throws Exception
     */
    public static Set<String> readXlsfile(File filePath) {

    Set<String> set = new HashSet<String>();
    try {
    // long l = System.currentTimeMillis();
    InputStream is = new FileInputStream(filePath);
    Workbook rwb = Workbook.getWorkbook(is);
    Sheet[] sheets = rwb.getSheets();// 获得当前Excel表共有几个sheet
    int p = sheets.length;
    // System.out.println("此表共有几个sheet------->" + p);
    for (int w = 0; w < p; w++) {
    // 将每个sheet中的内容全部读取出来
    Sheet rs = rwb.getSheet(w);
    int rows = rs.getRows();
    for (int d = 1; d < rows; d++) {
    // 行循环,Excel的行列是从(0,0)开始的
    Cell b00 = rs.getCell(0, d);
    String strb = b00.getContents();
    set.add(strb);
    }
    }
    // System.out.println("mapping执行之间:" + (System.currentTimeMillis() - l) + "毫秒");
     System.out.println("长度" + set.size());
    } catch (Exception e) {
    System.out.println(e.getMessage());
    }
    return set;
    }

    /**
     * 读取xls文件到Map
     * 
     * @throws Exception
     */
    public static HashMap<Integer, String[]> readXlsfileMap(File filePath) {

    HashMap<Integer, String[]> set = new HashMap<Integer, String[]>();
    try {
        long l = System.currentTimeMillis();
    InputStream is = new FileInputStream(filePath);
    Workbook rwb = Workbook.getWorkbook(is);
    Sheet[] sheets = rwb.getSheets();// 获得当前Excel表共有几个sheet
    int p = sheets.length;
    // System.out.println("此表共有几个sheet------->" + p);
    int k = 1;
    for (int w = 0; w < p; w++) {
    // 将每个sheet中的内容全部读取出来
    Sheet rs = rwb.getSheet(w);
    int rows = rs.getRows();
    for (int d = 1; d < rows; d++) {
    // 行循环,Excel的行列是从(0,0)开始的
    Cell b00 = rs.getCell(0, d);
    String strb = b00.getContents();
    set.put(k, new String[]{strb});
    k ++;
    }
    }
     //System.out.println("mapping执行之间:" + (System.currentTimeMillis() - l) + "毫秒");
     //System.out.println("map长度" + set.size());
    } catch (Exception e) {
    System.out.println(e.getMessage());
    }
    return set;
    }

    /**
     * 读取xls文件到set
     * 
     * @throws Exception
     */
    public static void readXlsfile2(InputStream is){ POIFSFileSystem fs = null; 
    HSSFWorkbook wb = null; 
    HSSFSheet sheet = null; 
    HSSFRow row = null;
    long l = System.currentTimeMillis();
    Set<String> set = new HashSet<String>();
    try{
    fs = new POIFSFileSystem(is);
    wb = new HSSFWorkbook(fs);
    }catch (Exception e) {
    System.out.println(e.getMessage());
    }
    for (int w = 0; w < 1; w++) {
    sheet = wb.getSheetAt(0);
    int rowNum = sheet.getLastRowNum();
    row = sheet.getRow(0);
    for (int i = 1; i <= rowNum; i++) {
    row = sheet.getRow(i);
    set.add(row.getCell((short)0).toString());
    }
    }
    System.out.println("mapping执行之间:" + (System.currentTimeMillis() - l) + "毫秒");
    System.out.println("set长度" + set.size());
    }上面有几种方法写入txt
    /**
     * 将数据写入txt文件中,并下载到本地
     */
    public static void writeTxtFile(List<String> set, File file, String fileName, HttpServletResponse 
    response) throws Exception { // 写入文件
    if (Utils.isNull(set))
    return;
    BufferedWriter outp = new BufferedWriter(new FileWriter(file, true));
    int k = 0;
    for (String phone : set) {
    k++;
    outp.write(String.valueOf(phone));
    outp.newLine();
    if (k % 10000 == 0) {
    outp.flush();
    k = 0;
    }
    }
    outp.flush();
    outp.close();
    outp = null; // 下载文件
    try { 
    fileName = "new_noblack_" + fileName;
    download(file, fileName, response);
    } catch (Exception e) {
    // TODO Auto-generated catch block
    // e.printStackTrace();
    System.out.println("下载文件异常" + e.getMessage());
    }
    }

    /**
     * 将发件箱数据写入csv文件中,并下载到本地
     */
    public static void writeCsvFile(List<SmsSend> set, File file, String fileName, HttpServletResponse 
    response) throws Exception { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    // 写入文件
    if (Utils.isNull(set))
    return;
    BufferedWriter outp = new BufferedWriter(new FileWriter(file, true));
    String title = "收信人,发送状态,发送时间,消息内容";
    String text = "";
    outp.write(title);
    outp.newLine();
    int k = 0;
    for (SmsSend send : set) {
    k++;
    text = send.getSmsPhone() + "," + setStatus(send.getSmsStatusCode()) + "," + 
    df.format(send.getSmsTime()) + "," + send.getSmsContent();
    outp.write(String.valueOf(text));
    outp.newLine();
    if (k % 10000 == 0) {
    outp.flush();
    k = 0;
    }
    }
    outp.flush();
    outp.close();
    outp = null;
    }一般像你这种需求 ,都是分两步走先写一个读数据的类,再写一个写数据的类。。
    然后写一个总的,调用读数据的类成功后再写入数据
      

  3.   

    用Poi不行么?可以指定要读哪个单元格
      

  4.   

    先用jxl包把数据读出来啊,然后将读出的数据利用IO流写到txt文件中
            //根据路径创建File对象
            File file = new File(filePath);
                //根据选择的Excel文件创建Workbook对象
                Workbook book = Workbook.getWorkbook(file);
                //取得第一张sheet表
                Sheet sheet = book.getSheet(0);
                //总行数
                int rows=sheet.getRows();
                //总列数
                int cols=sheet.getColumns();
                //读取每行每列
                for(int i=0;i<rows;i++){
                    for(int j=0;j<cols;j++){
                      String content1=sheet.getCell(j, i).getContents();
                      ...
                      调用方法写入txt文件即可
                    }
              }
      

  5.   


    现在的要求整个excel都读出来  只读取需要的单元格  并且还是合并的单元格  这么搞啊