如题,我下载程序下载行数较少的时候是没有问题的,可是下载多行的时候就挺到了write()的地方了,没有任何报错,请问是什么原因?是不是缓冲区问题?我该如何解决那?

解决方案 »

  1.   

    多设断点 DEBUG。单从你描述的现象,无法判断。
      

  2.   

    嗯,看下JXL包里面tutorial.html这个文件,里面都有介绍,很好的,不过是英文版的
      

  3.   

    上面的程序都通过了,其实也不是死到那里了,就是到了workBook.write()的时候特别慢,10000条左右需要700多秒,有没有遇到过的?
    断点也设了,其它设置的通过的都很快,整个过程放到了try块里了没有报错。
      

  4.   

    public void exlCreate(ReportEntry report, String path)  
        {
            ReportEntry re = report;//获得报表体
            List tableList = new ArrayList(re.getTableList());
            
            Condition[] conditions = re.getConditions();//获得条件        String title = re.getTableTitle();//获得报表标题
            boolean bExportSucc = false;
            try
            {
                File f = new File(path);
                f.createNewFile();
                //以下开始输出到EXCEL
                /**创建工作簿 */
                WritableWorkbook workbook = Workbook.createWorkbook(new FileOutputStream(f));
                
                /** 创建工作表* */
                WritableSheet sheet = workbook.createSheet(title, 0);
                /** **********设置页眉、页脚***************** */
                sheet.setHeader("页眉", "", "第 &P 页,共 &N 页"); //设置页眉
                sheet.setFooter("", "", "&D &T"); //设置页脚
                /** 字体 */
                WritableFont NormalFont = new WritableFont(WritableFont.ARIAL, 10);
                WritableFont BoldFont = new WritableFont(WritableFont.ARIAL, 14,
                        WritableFont.BOLD);
                WritableFont SmallFont = new WritableFont(WritableFont.ARIAL, 8);
                //用于跨行
                WritableCellFormat wcf_merge = new WritableCellFormat(NormalFont);
                wcf_merge.setBorder(Border.ALL, BorderLineStyle.THIN); //线条
                wcf_merge.setVerticalAlignment(VerticalAlignment.TOP); //垂直对齐
                wcf_merge.setAlignment(Alignment.LEFT);
                wcf_merge.setWrap(true); //是否换行            /** ************以下设置几种格式的单元格************ */
                //用于标题
                WritableCellFormat wcf_title = new WritableCellFormat(BoldFont);
                wcf_title.setBorder(Border.NONE, BorderLineStyle.THIN); //线条
                wcf_title.setVerticalAlignment(VerticalAlignment.CENTRE); //垂直对齐
                wcf_title.setAlignment(Alignment.CENTRE); //水平对齐
                wcf_title.setWrap(true); //是否换行            //用于正文左
                WritableCellFormat wcf_left = new WritableCellFormat(NormalFont);
                wcf_left.setBorder(Border.ALL, BorderLineStyle.THIN); //线条
                wcf_left.setVerticalAlignment(VerticalAlignment.CENTRE); //垂直对齐
                wcf_left.setAlignment(Alignment.LEFT); //水平对齐
                wcf_left.setWrap(false); //是否换行
                
    //         // 用于正文左没有边框
                WritableCellFormat wcf_left_noborder = new WritableCellFormat(NormalFont);
                wcf_left.setBorder(Border.NONE, BorderLineStyle.THIN); //线条
                wcf_left.setVerticalAlignment(VerticalAlignment.CENTRE); //垂直对齐
                wcf_left.setAlignment(Alignment.LEFT); //水平对齐
                wcf_left.setWrap(false); //是否换行            //用于正文右
                WritableCellFormat wcf_right = new WritableCellFormat(SmallFont);
                wcf_right.setBorder(Border.NONE, BorderLineStyle.THIN); //线条
                wcf_right.setVerticalAlignment(VerticalAlignment.CENTRE); //垂直对齐
                wcf_right.setAlignment(Alignment.RIGHT);
                wcf_right.setWrap(false); //是否换行            WritableCellFormat wcf_r = new WritableCellFormat(NormalFont);
                wcf_r.setBorder(Border.ALL, BorderLineStyle.THIN); //线条
                wcf_r.setVerticalAlignment(VerticalAlignment.CENTRE); //垂直对齐
                wcf_r.setAlignment(Alignment.LEFT);
                wcf_r.setWrap(false); //是否换行            /*标题**/
                String[] ids = ReportParser.getAllqueryId();
                String orientation = ReportParser.getReportOrientation();
                
      

  5.   

    int lastRowCount = 1;
                int headerRowCount = 0;
                int dataRowCount = 0;
                int loopLength = ids.length;
                
                if (re.usedForDown())
                    
                {
                    loopLength = 1;
                }
                else
                {
    //              将翻页制为无效
                    re.pageIndex.setEnabled(false);
                    re.setTableList(new ArrayList());
                    re.setPageIndex(re.pageIndex);
                    
                    for(int i = 0 ;i < tableList.size();i++)
                    {
                        logger.info("查询个数:"+tableList.size());
                        logger.info("开始reload");
                        re.reload(((Table)tableList.get(i)).getId());
                        logger.info("结束reload");
                    }
                    tableList = re.getTableList();
                }
                for (int index = 0; index < loopLength; index++)
                {
                    int currentRow = 0;
                    Header header ;
                    if (!re.usedForDown())
                        header = re.getHeader(ids[index]);
                    else
                        header = re.getHeader();
                    headerRowCount = header.getHeaderRows();
                    //logger.info(header);
                    //获得报表数据
                    Data data = ((Table)tableList.get(index)).getTableData();
                    dataRowCount = data.getRowNums();
                    if (index == 0)
                    {
                        sheet.mergeCells(1, 0, data.getColumnNums(), 0);
                        sheet.addCell(new Label(1, 0, title, wcf_title));
                        
                        
                    }
                    List headerRow;
                    HeaderItem hi = new HeaderItem();                //System.out.println(header.getHeaderRows());
                    for (; currentRow < header.getHeaderRows(); currentRow++)
                    {
                        
                        //System.out.println(header.toString());
                        headerRow = header.getOneRow(currentRow + 1);
                        //System.out.println(headerRow);
                        for (int j = 0; j < headerRow.size(); j++)
                        {
                            
                            hi = (HeaderItem) headerRow.get(j);
                            
                            sheet.mergeCells(hi.getItemColumnNum(), hi
                                    .getItemRowNum() + lastRowCount , hi.getItemColumnNum()
                                    + hi.getItemColumnSpan() - 1, hi
                                    .getItemRowNum() + lastRowCount
                                    + hi.getItemRowSpan() - 1); 
                            sheet.addCell(new Label(hi.getItemColumnNum(), hi
                                    .getItemRowNum() + lastRowCount, hi.getItemName(), wcf_r));
                        }
                        logger.info("画完表头");                }                DataItem[] dataItems;
                    for (int i = 0; i < data.getRowNums(); i++)
                    {
                        if(i%1000 == 0)
                            logger.info("画到了:"+i);
                        for (int j = 0; j < header.getHeaderFrame()[1]; j++)
                        {
                                                    dataItems = data.getOneColumn(j);
                            if (dataItems[i].getItemRowNum() != -1)
                            {
                                sheet
                                        .mergeCells(
                                                dataItems[i].getItemColumnNum(),
                                                dataItems[i].getItemRowNum()
                                                        + currentRow + lastRowCount ,
                                                dataItems[i].getItemColumnNum()
                                                        + dataItems[i]
                                                                .getItemColumnSpan()
                                                        - 1, dataItems[i]
                                                        .getItemRowNum()
                                                        + currentRow + lastRowCount
                                                        + dataItems[i]
                                                                .getItemRowSpan()
                                                        - 1);
                                if (Special.canDouble(String.valueOf(dataItems[i]
                                        .getItemValue())))
                                    sheet.addCell(new Number(dataItems[i]
                                            .getItemColumnNum(), dataItems[i]
                                            .getItemRowNum()
                                            + currentRow + lastRowCount, Double.parseDouble(String
                                            .valueOf(dataItems[i].getItemValue())),
                                            wcf_r));
                                else
                                    sheet
                                            .addCell(new Label(
                                                    dataItems[i].getItemColumnNum(),
                                                    dataItems[i].getItemRowNum()
                                                            + currentRow + lastRowCount,
                                                    ""
                                                            + (dataItems[i]
                                                                    .getItemValue() == null ? ""
                                                                    : dataItems[i]
                                                                            .getItemValue()),
                                                    wcf_r));
                            }
                            
                        }
                    }
                    lastRowCount += headerRowCount + dataRowCount + currentRow;
                    logger.info("画完报表");
                }
                Header header = ((ComplexTable)re.getTableList().get(0)).getTableHeader();
                //System.out.println(header.toString());
                List theRowHeader = header.getOneRow(header.getHeaderRows());
                HeaderItem hi;
                //计算每列宽度
                for(int i = 0;i < theRowHeader.size();i++)
                {
                    hi = (HeaderItem)theRowHeader.get(i);
                    System.out.println(hi);
                    if(!(hi.getItemWidth() == null || hi.getItemWidth().equals("")))
                    {
                        //System.out.println("in");
                        if(hi.getItemWidth().indexOf("%") != -1)
                        {
                            
                            String doubleStr = new Double(((1024-5)/8)*percentToNumber(hi.getItemWidth())).toString();
                            sheet.setColumnView(i+1,Integer.parseInt(StrUtil.doubleToInt(doubleStr)));
                            //System.out.println(doubleStr);
                        }
                        else
                        {
                            sheet.setColumnView(i+1,(Integer.parseInt(hi.getItemWidth())-5)/8);
                            
                            
                        }
                    }
                }
                System.out.println("计算完宽度");
                /** **********以上所写的内容都是写在缓存中的,下一句将缓存的内容写到文件中******** */
                workbook.write();
              
                System.out.println("完成写文件");
                /** *********关闭文件************* */
                workbook.close();
                bExportSucc = true;
                logger.info("over!");
            } catch (Exception e)
            {
                e.printStackTrace();
                System.out.println("在输出到EXCEL的过程中出现错误,错误原因:" + e.toString());
            }
        }
    }这是程序,到“计算完宽度”之前都是很快的,之后就到“over”就非常慢了,大家帮忙看看吧,谢谢