社区
Web 开发
帖子详情
jxl问题 write的时候死住不动了 请问什么原因?
jackal81
2005-11-29 12:39:11
如题,我下载程序下载行数较少的时候是没有问题的,可是下载多行的时候就挺到了write()的地方了,没有任何报错,请问是什么原因?是不是缓冲区问题?我该如何解决那?
...全文
280
14
打赏
收藏
jxl问题 write的时候死住不动了 请问什么原因?
如题,我下载程序下载行数较少的时候是没有问题的,可是下载多行的时候就挺到了write()的地方了,没有任何报错,请问是什么原因?是不是缓冲区问题?我该如何解决那?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
你把程序贴出来看看
使用POI和Excel VBA生成图表
项目中想实现excel图表但POI不支持所以想到了这个方法。放上来抛砖引玉,感兴趣的欢迎大家交流 注:-------------------------------------------------------------------------- 其实现原理和利用JavaScript实现...
jxl
详细使用介绍
jxl
详细使用介绍 va Excel API既可以从本地文件系统的一个文件(.xls),也可以从输入流中读取Excel数据表。读取Excel数据表的第一步是创建Workbook(术 语:工作薄),下面的代码片段举例说明了应该如何操作:(完整...
jxl
动态导出Excel
import
jxl
.
write
.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; import java.net.URLEncoder; import java.util.*...
JXL
详解
而
JXL
提供了对图片的支持(但是仅仅支持png格式的图片),
问题
就是对公式支持不是很好,但还是提供了简单的公式读取支持。因此你的项目中要选用什么样的第三方插件为完全由你的应用来决定。如果你的软件是跟财务有...
使用
jxl
动态合并单元格
WritableFont classifyFont = new WritableFont(
jxl
.
write
.WritableFont.createFont("宋体"), 11, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,
jxl
.format.Colour.BLACK); ...
Web 开发
81,092
社区成员
341,716
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章