大约写到3万多行的时候会出错。我已经把Xmx改到我机器允许的最大值了~~搜索了一下,好像有人说可以用分批写入的方式?可是不知道具体如何实现~~求达人指教~~有别的解决办法也请不吝指教~~100分都送,不够可以再加~~

解决方案 »

  1.   

    关注,我用过jxl,不过也没有到这么多行
      

  2.   

    你的数据是从哪儿来的?读出时就应该用分批了.
    ------------------------------------------------读出时候分批没有问题啊,可是最终还是都要写到同一个xls文件里去啊,错误是写文件时候发生的~~
      

  3.   

    你可以分段读取,这样的话,就不会抛出OutOfMemery异常了
      

  4.   

    写excel文件效率太低了,最好的方法,把数据导出成cvs文件,然后手工导入到excel中。
    从程序直接写很容易把服务器跑挂掉。
      

  5.   

    唉,不是读取的问题,是写入时候的问题啊。还是贴自己的例子吧。package ExcelOut;import java.io.FileOutputStream;
    import java.io.File; 
    import java.awt.*;
    import javax.swing.*;import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFCell;public class ExcelOut extends Frame{    public static void main(String[] args) {
            try{
                makeExcelfile("C:\\test.xls");
            }catch(Exception e){
                e.printStackTrace();
                System.out.println("fault!");
            }
        }    private static void makeExcelfile(String filename) throws Exception{        HSSFWorkbook wb = new HSSFWorkbook();
            FileOutputStream fileOut = new FileOutputStream(filename);        createListSheet(wb);        wb.write(fileOut);
            fileOut.close();
            System.out.println("completed");
        }    private static void createListSheet(HSSFWorkbook wb) throws Exception{
            HSSFSheet sheet = wb.createSheet();
            wb.setSheetName(1,"List",HSSFWorkbook.ENCODING_UTF_16);
            
        HSSFRow row = sheet.createRow(0);
        
        setCell(row,0,"No.");
        setCell(row,1,"a");
        setCell(row,2,"keyword");
        setCell(row,3,"name");
        setCell(row,4,"type");
        setCell(row,5,"counter");
        setCell(row,6,"length");
        setCell(row,7,"note");
        
        String a[] = new String[8];
            
            for(int i=1;i<=40000;i++){
            a[0] = ""+i;
            a[1] = "hinryaku"+i;
            a[2] = "keyword"+i;
            a[3] = "hinmei"+i;
            a[4] = "katamei"+i;
            a[5] = "number"+i;
            a[6] = "length"+i;
            a[7] = "note"+i;
            setListSheetLine(sheet,i,a);
            }
        }
      
        private static void setListSheetLine(HSSFSheet st,int rowNo,String[] arg) throws Exception{
        HSSFRow row = st.createRow(rowNo);
        for(int i=0;i<8;i++)
        setCell(row,i,arg[i]);
        }    private static void setCell(HSSFRow row,int columnNo,String arg){
        HSSFCell cell = row.createCell((short)columnNo);
        cell.setEncoding(HSSFCell.ENCODING_UTF_16);
            cell.setCellValue(arg);
        }
    }出错是在wb.write(fileOut);,outofmemory了~~
      

  6.   

    写excel文件效率太低了,最好的方法,把数据导出成cvs文件,然后手工导入到excel中。
    从程序直接写很容易把服务器跑挂掉。
    ------------------------------------------------------------------------------这个我也会……可是客户要求直接写到xls文件里去~~我又有什么办法?
      

  7.   

    up~~刚刚试了jxl,也一样,唉~~
      

  8.   

    你不用程序,直接手工复制粘贴出三万行记录,你看看EXCEL什么反应?也快吃不消了。不要分段了,干脆就分文件吧,这么多数据,来个文件序列是理所当然的。否则,不要说写,就是打开都表现差强。
      

  9.   

    rester214 (呆呆中)  你的是写的问题,我在读的时候就OOM了,就这么两句
    java.io.File file = new java.io.File("xxx.xls");
    fs = new POIFSFileSystem(new FileInputStream(file));
    HSSFWorkbook wb = new HSSFWorkbook(fs) //在这就溢出了,我的文件才5000行
      

  10.   

    写excel文件效率太低了,最好的方法,把数据导出成cvs文件,然后手工导入到excel中