社区
Web 开发
帖子详情
jxl问题 write的时候死住不动了 请问什么原因?
jackal81
2005-11-29 12:39:11
如题,我下载程序下载行数较少的时候是没有问题的,可是下载多行的时候就挺到了write()的地方了,没有任何报错,请问是什么原因?是不是缓冲区问题?我该如何解决那?
...全文
292
14
打赏
收藏
jxl问题 write的时候死住不动了 请问什么原因?
如题,我下载程序下载行数较少的时候是没有问题的,可是下载多行的时候就挺到了write()的地方了,没有任何报错,请问是什么原因?是不是缓冲区问题?我该如何解决那?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Goldrush
2006-04-16
打赏
举报
回复
up up
linlin2005
2005-12-19
打赏
举报
回复
帮顶
cuiyingfeng
2005-12-19
打赏
举报
回复
这个很正常呀,你在io设备时,慢一些不是问题,重要的是这个问题看你怎么处理这种现象。
jackal81
2005-11-29
打赏
举报
回复
为啥没人回复????
常遇道
2005-11-29
打赏
举报
回复
这么长。帮你顶
jackal81
2005-11-29
打赏
举报
回复
呵呵,谢谢大家支持,多多帮忙啊
xieqiang824
2005-11-29
打赏
举报
回复
我也搞不清楚,等我问问经理看看,我才搞开发半年,也不是很熟,不好意思
jackal81
2005-11-29
打赏
举报
回复
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”就非常慢了,大家帮忙看看吧,谢谢
jackal81
2005-11-29
打赏
举报
回复
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();
christina_sll
2005-11-29
打赏
举报
回复
学习
jackal81
2005-11-29
打赏
举报
回复
上面的程序都通过了,其实也不是死到那里了,就是到了workBook.write()的时候特别慢,10000条左右需要700多秒,有没有遇到过的?
断点也设了,其它设置的通过的都很快,整个过程放到了try块里了没有报错。
xieqiang824
2005-11-29
打赏
举报
回复
嗯,看下JXL包里面tutorial.html这个文件,里面都有介绍,很好的,不过是英文版的
nighthawk
2005-11-29
打赏
举报
回复
多设断点 DEBUG。单从你描述的现象,无法判断。
xieqiang824
2005-11-29
打赏
举报
回复
你把程序贴出来看看
jxl
模版生成excel
7. **示例代码**:通常,使用
jxl
的流程包括加载模板文件,找到要填充的单元格,使用`Cell.setContents()`方法设置内容,然后使用`Workbook.
write
()`方法将更新后的工作簿写入新的Excel文件。 8. **
jxl
s-examples-...
JXL
动态读写Excel文件框架
JXL
是一个专门为 Java 设计的开源库,用于动态地读取和写入 Microsoft Excel 文件。这个框架使得在任何支持 Java 的操作系统上处理 Excel 数据变得简单。
JXL
的主要目标是提供一个轻量级且高效的解决方案,使得...
Java通过POI和
JXL
给Excel动态添加水印
### Java通过POI和
JXL
给Excel动态添加水印 #### 概述 在实际工作中,经常需要对敏感或重要的Excel文件进行保护措施,比如添加水印。这不仅可以增加文档的专业性,还可以作为版权保护的一种手段。本文将详细介绍...
jxl
.jar包最新jar包亲测可用
《使用
jxl
.jar包在Java中操作Excel文件的详尽指南》 在Java开发中,与Excel文件交互是一项常见的任务,比如数据导入、导出、分析等。
jxl
.jar库提供了一个强大的解决方案,使得开发者无需依赖Windows环境即可处理...
JXL
导出Excel数据表
JXL
库是一个Java库,专门用于读写Microsoft Excel文件,它为开发者提供了一种便捷的方式来处理Excel数据,无需依赖Microsoft Office。本篇将详细介绍如何使用
JXL
库来导出Excel数据表,并结合描述中的信息,探讨其...
Web 开发
81,122
社区成员
341,744
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章