Ram Sharan Mittal
Ram Sharan Mittal

Reputation: 526

apache poi excel big auto column width

I am try to create a big excel 2010 with 30 columns and 1 million records with Apache poi latest. I am creating as describe in this link http://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xssf/usermodel/examples/BigGridDemo.java . but I want column width to be same as column header text size. but when I am doing this after creating excel with following code

for (int x = 0; x < sheet.getRow(0).getPhysicalNumberOfCells(); x++) {
            sheet.setColumnWidth(x, 20*256);
        }

it is taking a huge time and even with 5gb heap size I am getting out of memory.

thanks

ram

Upvotes: 14

Views: 61061

Answers (3)

Nilesh
Nilesh

Reputation: 133

sheet.autoSizeColumn(columnNumber) works. This will resize the column to the largest cell length.

Upvotes: 4

Adi Kish
Adi Kish

Reputation: 89

I would also suggest you look at using sxssf. It uses an xml format to load it into Excel. This is much faster and a better way to create large reports or grids. The autosizing function in xssf takes too long by default.

Upvotes: 5

Sankumarsingh
Sankumarsingh

Reputation: 10079

First Select the first row or header because only Header can give you the max number of cells in a row.

HSSFRow row = wb.getSheetAt(0).getRow(0);

Then use autoSizeColumn on each column of that row

for(int colNum = 0; colNum<row.getLastCellNum();colNum++)   
    wb.getSheetAt(0).autoSizeColumn(colNum);

This will set the column width same as that of its Header width.

Upvotes: 33

Related Questions