我想使用 autoSizeColumn 调整列的宽度,但它不起作用,知道吗?
Statement StReporte = conexion.createStatement();
ResultSet rs_marcador = StReporte.executeQuery("call sprep_reportesmensuales('2014-06-01','2014-07-01',6,2)");
ResultSetMetaData rsmd = rs_marcador.getMetaData();
int columnsNumber = rsmd.getColumnCount();
FileOutputStream fileOut = new FileOutputStream("C:/Servidorweb/apache-tomcat-6.0.37/webapps/reportes_mensuales/reporte_prueba.xls");
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet worksheet = workbook.createSheet("POI Worksheet");
int controw = 0;
while(rs_marcador.next())
{
HSSFRow row = worksheet.createRow((short) controw);
for(int i = 0; i < columnsNumber; i++)
{
HSSFCell cellA1 = row.createCell((short) i);
cellA1.setCellValue(rs_marcador.getString(i+1));
}
worksheet.autoSizeColumn();
controw++;
}
workbook.write(fileOut);
fileOut.flush();
fileOut.close();
这是错误: HSSFSheet 类型的 autoSizeColumn() 方法未定义。
从Apache POI JavaDocs on Sheet,您会看到
autoSizeColumn
的方法签名是它接受一个int作为参数,这是要自动调整大小的列
因此,您的代码是:
while(rs_marcador.next())
{
for(int i = 0; i < columnsNumber; i++)
{
HSSFCell cellA1 = row.createCell((short) i);
cellA1.setCellValue(rs_marcador.getString(i+1));
}
worksheet.autoSizeColumn();
}
相反需要:
while(rs_marcador.next())
{
for(int i = 0; i < columnsNumber; i++)
{
HSSFCell cellA1 = row.createCell((short) i);
cellA1.setCellValue(rs_marcador.getString(i+1));
}
}
for(int i = 0; i < columnsNumber; i++)
{
worksheet.autoSizeColumn(i);
}
请注意,您应该只在最后自动调整列的大小,因为这是一个相当慢的操作
免责声明:由于OP收到错误“HSSFSheet类型的方法autoSizeColumn(int)未定义”,我假设正在使用旧版本的库。
该方法采用
short
而不是 int
(在旧版本的库上),因此您必须进行类型转换(就像您已经使用 createCell
所做的那样):
for(int i = 0; i < columnsNumber; i++)
{
worksheet.autoSizeColumn((short)i);
}
您还应该等到最后才执行此操作,因此请将其放在 while 循环之后,因为在 while 循环内您将执行多次,而只需要执行一次。所以放在前面
workbook.write(fileOut);
我在两个完全不同的项目中使用了以下代码。它有效。
worksheet.autoSizeColumn(0);
worksheet.autoSizeColumn(1);
worksheet.autoSizeColumn(2);
worksheet.autoSizeColumn(3);
worksheet.autoSizeColumn(4);
worksheet.autoSizeColumn(5);
如果我把它放在循环中,它就不起作用。