jxl问题 write的时候死住不动了 请问什么原因?

jackal81 2005-11-29 12:39:11
如题,我下载程序下载行数较少的时候是没有问题的,可是下载多行的时候就挺到了write()的地方了,没有任何报错,请问是什么原因?是不是缓冲区问题?我该如何解决那?
...全文
343 14 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
你把程序贴出来看看
内容概要:本文系统研究了基于豪猪优化算法(CPO)的多无人机协同集群在三维空间中的避障路径规划问题,聚焦于实现以最低成本为目标的航迹优化,综合考虑路径长度、飞行高度、威胁规避及转弯角度等多个关键因素。通过构建精细化的三维环境模型与多无人机协同机制,采用Matlab平台实现CPO算法的仿真与验证,充分展示了该算法在复杂动态障碍环境下的高效搜索能力与全局优化性能。研究不仅涵盖了路径规划的数学建模与目标函数设计,还深入探讨了算法的收敛特性与鲁棒性,为智能群体系统在实际场景中的应用提供了理论依据与技术支撑。; 适合人群:具备一定编程基础和优化算法背景,从事无人机系统控制、智能路径规划、群体协同、人工智能与自动化等相关领域的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于多无人机协同执行侦察、灾害监测、应急救援、区域巡检等复杂任务中的自主路径规划;②为智能优化算法在三维动态环境下的路径决策问题提供可复现的技术范例;③支持研究人员对CPO算法与其他主流群智能算法(如PSO、GWO、WOA等)进行性能对比与改进研究,推动路径规划技术的发展。; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点理解目标函数的多维度建模方式与CPO算法的迭代优化流程,可通过调整环境参数与约束条件进行仿真实验,对比不同算法在相同场景下的路径质量与收敛速度,从而深入掌握其优势与适用边界。
内容概要:本文围绕电动汽车参与电力系统运行备用的能力评估展开深入研究,利用Matlab代码实现对电动汽车集群提供运行备用服务的建模与仿真分析。研究重点在于量化电动汽车作为分布式灵活资源参与电网辅助服务的潜力,通过构建精细化的数学模型,分析其可调功率容量、响应速度、时空分布特性及聚合能力,并采用多面体聚合、内近似模型与闵可夫斯基和等先进方法精确刻画其可调度能力边界。研究进一步结合大规模电动汽车接入场景,探讨其在多时间尺度调度框架下参与调峰、调频等辅助服务的优化策略,评估其对提升高比例可再生能源电网灵活性与稳定性的贡献,最终通过仿真验证所提模型与方法的有效性与实用性。; 适合人群:具备电力系统分析、智能电网、新能源汽车或优化调度等相关专业背景,熟悉Matlab/Simulink仿真工具,从事科研、工程应用的高校研究生、科研人员及电力行业工程师。; 使用场景及目标:①精确评估大规模电动汽车集群在不同约束条件下可提供的运行备用容量;②研究电动汽车在日前、日内及实时调度中的动态响应能力与优化调度策略;③为高渗透率新能源电力系统提供基于移动储能的灵活性资源解决方案,支撑电网安全经济运行。; 阅读建议:建议结合Matlab代码与技术文档同步学习,重点关注多面体聚合建模、能力边界计算及优化调度算法的设计与实现,可进一步拓展至V2G(车辆到电网)、需求响应等互动场景进行二次开发与应用验证。
打开链接下载源码: https://pan.quark.cn/s/a4b39357ea24 OpenCV(开源计算机视觉库)中的DNN(Deep Neural Network)模块是一种功能强大的工具,其目的是用于深度学习模型的操作。该模块使得开发人员能够在OpenCV环境中直接运用已经训练好的深度学习网络,以执行图像识别、目标检测、图像分割等多种功能。DNN模块能够兼容多种深度学习框架的模型,包括TensorFlow、Caffe、ONNX等。 一、DNN模块概述 OpenCV的DNN模块是为了简化深度学习模型的集成过程而专门设计的,它允许开发人员加载预先训练好的神经网络模型,并在图像数据上执行前向传播操作。借助这个模块,用户可以选用GPU或者CPU来提升计算效率,从而构建出高效的应用程序。 二、目标检测案例 在OpenCV的DNN模块中,目标检测是一个常见的应用情形。例如,可以选用SSD(Single Shot Multibox Detector)、YOLO(You Only Look Once)或者 Faster R-CNN 等模型进行实时的目标检测。这些模型能够识别并定位图像中的多个对象,并返回每个对象的类别和边界框坐标。 三、模型转换:PB到PBTXT 在OpenCV中运用TensorFlow模型时,通常需要处理的是`.pb`格式的模型文件,这是TensorFlow的二进制模型文件格式。然而,为了能够读取模型的结构信息,我们需要`.pbtxt`格式的文本文件。转换过程涉及解析`.pb`文件并将其结构信息导出为`.pbtxt`格式,这样做可以让人清晰地了解网络层和参数的配置。在OpenCV中,可以使用`tf.train.write_graph()`函数将.pb...

81,111

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧