autoSizeColumn不适用于我的HSSFSheet POI

时间:2014-09-24 17:33:43

标签: jsp apache-poi

我想用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()方法。

2 个答案:

答案 0 :(得分:1)

Apache POI JavaDocs on Sheet,您会看到autoSizeColumn的方法签名是an int as a parameter,这是自动调整大小的列

因此,您的代码是:

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);
}

请注意,您应该只在最后自动调整列的大小,因为这是一个相当慢的操作

答案 1 :(得分:0)

免责声明:由于OP收到错误&#34;方法autoSizeColumn(int)未定义类型HSSFSheet&#34;我假设该库的旧版本正在使用中。

该方法需要short而不是int(在旧版本的库中),因此您必须进行类型转换(就像您已经使用createCell一样):

for(int i = 0; i < columnsNumber; i++)
{
   worksheet.autoSizeColumn((short)i);
}

你也应该等到最后这样做,所以把它放在你的while循环之后,因为在while循环中你会多次这样做而你只需要做一次。所以在workbook.write(fileOut);

之前把它放好