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++) {
断点也设了,其它设置的通过的都很快,整个过程放到了try块里了没有报错。
{
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();
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”就非常慢了,大家帮忙看看吧,谢谢