日期:2014-05-20  浏览次数:20906 次

关于中国移动导出Excel的实现的问题:
HTML code
http://service.hb.10086.cn/ecare/qryDetailList.action

办理移动的话费


点了查询之后:

显示出如上所示的 url

可以看出是执行了 qryDetailList.action
这个页面是没有分页的,所以页面很长很长。。。

上面就是一个按钮:html代码如下:
HTML code
<input class="btn_text4" type="button" onclick="exportDetailExcel();" value="导出EXCEL">


这个导出Excel 执行的就是 generateDetailExcel.action 这个action

找了下资料 :

jxl
poi
ireport 
貌似都可以解决,由于项目时间紧、所以一个个的试貌似也范不着了。
想问下: 本人项目中导出/导入的部分还是非常多的,是一个小的系统,
问下,有经验的同学,哪种适合我?

------解决方案--------------------
我只用过poi

不过很简单 - - 。 网上搜个例子就可以用了!
------解决方案--------------------
poi吧,蛮简单的....
------解决方案--------------------
windows平台的服务器 能用 jacob的 

其他的平台 就poi了 

------解决方案--------------------
曾经写过POI来导入导出,感觉还是挺方便的。
------解决方案--------------------
POI和JXL比较常见,用的比较多的还是JLX,两个的功能上不相上下,至于兼容性吗,如3楼,不知道JXL在其他非windows系统上如何。
------解决方案--------------------
给你个我自己写的很简单的例子,仅供参考。。用jxl的
Java code
package jxl;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

public class JxlExcelWriter {
    
    /**
     * @param out 输出excel文件.
     * @param br 输入txt文件.
     */
    public void writeExcel(OutputStream out, BufferedReader br) {
        if(br == null) {
            throw new IllegalArgumentException("写excel流需要file!");
        }
        try {
            int rowNum = 0; // 写入行数
            int sheetNum = 1; // 写入sheet编号
            
            WritableWorkbook workbook = Workbook.createWorkbook(out);
            WritableSheet ws = workbook.createSheet("sheet " + sheetNum, 0);
            
            //文件行数
            String line = null;
            while((line = br.readLine()) != null){
                String[] data = line.split("\t");
                putRow(ws, rowNum, data); // 写一行到sheet
                rowNum++;
                if(rowNum > 10000){
                    rowNum = 0;
                    sheetNum++;
                    ws = workbook.createSheet("sheet " + sheetNum, 0);
                }
            }
            
            workbook.write();
            workbook.close(); // 关闭、保存Excel
            
            System.out.print("success!");
        } catch (RowsExceededException e) {
            System.out.println("jxl write RowsExceededException: "+e.getMessage());
        } catch (WriteException e) {
            System.out.println("jxl write WriteException: "+e.getMessage());
        } catch (IOException e) {
            System.out.println("jxl write file i/o exception!, cause by: "+e.getMessage());
        }
    }

    private void putRow(WritableSheet ws, int rowNum, String[] data) throws RowsExceededException, WriteException {
        
        for(int i=0; i<data.length; i++) {
            Label cell = new Label(i, rowNum, ""+data[i]);
            ws.addCell(cell);
        }
    }
    
    public static void main(String args[]) {
        
        try {
            BufferedReader br = new BufferedReader(new FileReader("e:/input/data.txt"));
            OutputStream out = new FileOutputStream(new File("e:/out/test.xls"));
            
            JxlExcelWriter jxlExcelWriter = new JxlExcelWriter();
            jxlExcelWriter.writeExcel(out, br);
            out.close();
            br.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
}