autoSizeColumn 不适用于我的 HSSFSheet POI

问题描述 投票:0回答:3

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

jsp apache-poi
3个回答
1
投票

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

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


0
投票

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

该方法采用

short
而不是
int
(在旧版本的库上),因此您必须进行类型转换(就像您已经使用
createCell
所做的那样):

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

您还应该等到最后才执行此操作,因此请将其放在 while 循环之后,因为在 while 循环内您将执行多次,而只需要执行一次。所以放在前面

workbook.write(fileOut);


0
投票

我在两个完全不同的项目中使用了以下代码。它有效。

worksheet.autoSizeColumn(0);
worksheet.autoSizeColumn(1);
worksheet.autoSizeColumn(2);
worksheet.autoSizeColumn(3);
worksheet.autoSizeColumn(4);
worksheet.autoSizeColumn(5);

如果我把它放在循环中,它就不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.