我对Eclipse Java编码一无所知。我正在努力完成一个管理库存的项目。我遇到的问题是,当我试图将项目写入excel单元格时,我收到错误消息,称数组超出了界限。
附言:项目和item.get部分名称等都定义在另一个类文件下。请帮忙。谢谢
FileOutputStream os =new FileOutputStream("orderreceipt");
//Create a new workbook for writing data
HSSFWorkbook wb2 = new HSSFWorkbook();
//Create a new sheet:
HSSFSheet newsheet = wb2.createSheet("MyNewSheet");
//Create a new row:
for (int i=0; i<6; i++){
HSSFRow newrow = newsheet.createRow(i);
sentorder item = (sentorder)items.get(i);
for (short j=0; j<5; j++){
HSSFCell cell = newrow.createCell(j);
cell.setCellValue(item.getPartname());
cell.setCellValue(item.getPartnumber());
cell.setCellValue(item.getQuantity());
cell.setCellValue(new Date());
HSSFCellStyle styleOfCell = wb2.createCellStyle();
styleOfCell.setDataFormat(HSSFDataFormat
.getBuiltinFormat("m/d/yy"));
styleOfCell.setFillForegroundColor(HSSFColor.AQUA.index);
styleOfCell.setFillPattern(HSSFCellStyle.BORDER_THIN);
cell.setCellStyle(styleOfCell);
}}
wb2.write(os);
}
我可以看到附加代码有很多问题:
>
如前所述,您正在重新设置相同的单元格值4次
您多次创建同一单元格样式(这不是在后台缓存的,可以创建的单元格样式数量很大程度上是有限的,因此如果生成数千行,您可能会遇到麻烦
在编写工作簿后,您不会流式处理。Java中的流是一种宝贵的资源,需要手动关闭。
如果没有堆栈跟踪,很难百分之百地说出您看到的ArrayOutOfBound问题来自何处,然而,我的猜测是,您试图使用不存在的索引访问项目(来自项目集合),这是一个结果,即您是从行索引而不是现有的项目列表中驱动报表数据。
此外,由于您对Java非常陌生,因此有两条指导原则可以帮助您在将来生成更好、更不容易出错的代码:
>
使用适当的Java命名约定-请遵循标准Java命名约定http://java.about.com/od/javasyntax/a/nameconventions.htm,您的代码将更易于阅读和推理(尤其是当您寻求社区帮助时)-即sentorder类应命名为sentorder。
尝试将代码拆分为更小、更可测试的模块,即可以从主方法中调用helpercreateDataRow
方法,通常在一个方法中有多个内部循环,这使得测试、调试和推理变得异常困难。
除非您真的需要生成. xls格式,否则请考虑使用XSSF*类来生成xlsx文档-它比HSSF*有很多改进(包括更好的dataFormat支持)。
考虑到这些,我重写了您的示例:
public void improved(List<SentOrder> items) throws IOException {
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("MyNewSheet");
HSSFCellStyle styleOfCell = workbook.createCellStyle();
styleOfCell.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));
styleOfCell.setFillForegroundColor(HSSFColor.AQUA.index);
styleOfCell.setFillPattern(HSSFCellStyle.BORDER_THIN);
int rowIndex = 0;
for(SentOrder item : items) {
HSSFRow row = sheet.createRow(rowIndex++);
HSSFCell nameCell = row.createCell(0);
nameCell.setCellValue(item.getPartName());
HSSFCell numberCell = row.createCell(1);
numberCell.setCellValue(item.getPartNumber());
HSSFCell quantityCell = row.createCell(2);
quantityCell.setCellValue(item.getQuantity());
HSSFCell dateCell = row.createCell(3);
dateCell.setCellValue(new Date());
dateCell.setCellStyle(styleOfCell);
}
FileOutputStream os = new FileOutputStream("order_receipt.xls");
try {
workbook.write(os);
} finally {
os.flush();
os.close();
}
}
问题内容: 是的,我知道元组是不可变的,但是这种情况使得我需要在每个元组中插入一个额外的值。因此,其中一项是金额,我需要在其旁边添加其他货币的新项目,如下所示: 可能? 谢谢! 问题答案: 您可以将其转换为列表,插入项目,然后将其转换回元组。
如何使用Apache POI将文本/图像写入特定的合并单元格。特定单元格意味着,我直接将文本或图像写入B3: D7。下面的代码是每个索引的手动代码,而不是单元格的特定名称和数量。我想通过单元格名称和编号放置。
我正在编写一个程序,它将数据写入excel表格的表格格式。我的代码提供了我想要的所有细节。 但是为了得到表格格式,我必须在excel sheet中遵循以下步骤 我想让我的代码自动生成我想要的格式,而不需要我在excel表中执行上面显示的步骤。有人能帮我吗?提前道谢。下面显示的是我的代码。 `
问题内容: 如何在poi的帮助下在单元格中写下我的全部价值? 即如果值是1000.000,那么我怎么能写出完整的值而不会在“之后”截断000。与POI?表示我想要全部价值。 就我而言,只需要1000,但这对我来说不是正确的格式。 问题答案: 您必须设置要存储此数字的单元格的“格式”。示例代码: 来源:http : //poi.apache.org/spreadsheet/quick- guide.
本文向大家介绍python3.7 openpyxl 在excel单元格中写入数据实例,包括了python3.7 openpyxl 在excel单元格中写入数据实例的使用技巧和注意事项,需要的朋友参考一下 本来我是想尝试,选中某个多个单元格复制到同一个sheet的其他位置,找了很多资料没有找到,目前只有这么一个办法,如果有大佬看到,欢迎补充请教。 补充知识:【openpyxl】python中对Exc
请帮我解决这个问题。 提前谢谢你。