5

我们在基于 Java 的 Web 应用程序中使用Display 标签库

除了使用显示标签库来显示列表之外,我们还使用它来将数据导出到工作正常的 Excel 表。

问题是数据被包裹在 Excel 工作表列中。

我需要单击单元格以展开单元格以查看完整数据。

有什么办法可以防止这种数据包装?Excel 工作表单元格可以根据其中数据的宽度自行调整吗?

4

3 回答 3

3

是的,如果您使用 POI 和 HSSF 来创建文档,则可以自动格式化单元格。如果不是,我建议您使用它,只需打开现有文档并自动调整您需要的列大小。

创建所有单元格后但在保存文档之前,您只需调用此方法来调整列的大小。例如,我在一张这样的表格上为我的所有列都这样做了:

//
// Create an instance of workbook and sheet
//
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
sheet.setAutobreaks(true);
 .
 .//code in which you create actual rows and cells HERE  
 .
//auto formating to fit the page
for(int i=0; i<repModel.getReportHeaders().length;i++){
sheet.autoSizeColumn((short) (i+1));     
}

这里是使用 poi 启动的最佳链接: Busy Developers' Guide to HSSF and XSSF Features

于 2012-06-01T18:06:58.457 回答
2

看起来此博客条目讨论了 DisplayTag 的 excel 导出机制,并向您展示了如何修改 Excel 导出以绑定到自定义 HSSF 表编写器。

总结一下:

  • 编写一个实现 org.displaytag.export.BinaryExportView(或扩展 DisplayTag 的 DefaultHssfExportView)
  • 所述实现需要委托给扩展 DisplayTag 的 HssfTableWriter 的新类(或将 DisplayTag 中的原始数据复制/粘贴到新源中,因为这听起来像是一堆不必要的私有访问器方法)
  • 覆盖(或更改)HssfTableWriter 中的特定方法(我认为它称为 writeBottomBanner())
  • 使用以下行更新您的 displaytag.properties 文件:export.excel.class=xyzMyExcelExportView

也就是说,我正在查看 DisplayTag 1.2 中的源代码,它似乎已经在扩展自动调整大小的列 (http://displaytag.sourceforge.net/1.2/displaytag-export-poi/xref/org/ displaytag/render/HssfTableWriter.html#347)。您使用的是 DisplayTag 1.2,还是使用的是早期版本?如果您使用的是早期版本,升级到 1.2 可能会解决您的问题。还是我误解了您所说的数据被“包装”的意思?

于 2012-06-01T18:50:23.960 回答
1

如果您使用 HSSF Poi 生成 excel 文档,那么您应该能够调整列宽:

http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFSheet.html#setColumnWidth%28int,%20int%29

于 2012-05-29T08:13:08.750 回答