Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Format number with thousands separator in Excel using Apache POI

I want to format some number cells, with a comma as thousands separator. For example:

12        -> 12
1200      -> 1,200
12000     -> 12,000
12000000  -> 12,000,000
120000000 -> 120,000,000

I have the following code. What should I use as formatStr? Is there an easy way? Or do I have to detect the number of zeros in order to produce something like this #,###,###?

String formatStr = "";
HSSFCellStyle style = workbook.createCellStyle();
HSSFDataFormat format = workbook.createDataFormat();
style.setDataFormat(format.getFormat(formatStr));
cell.setCellStyle(style);
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);

Keep in mind that I'm dealing with numbers. The cell type will be numeric, not string.

Update

enter image description here

like image 801
Alkis Kalogeris Avatar asked Dec 10 '14 12:12

Alkis Kalogeris


People also ask

What is the thousand separator format?

The character used as the thousands separatorIn the United States, this character is a comma (,). In Germany, it is a period (.). Thus one thousand and twenty-five is displayed as 1,025 in the United States and 1.025 in Germany. In Sweden, the thousands separator is a space.


2 Answers

Just add this:

style.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));

and it will follow the format you want.

like image 195
Ian Avatar answered Oct 06 '22 02:10

Ian


Just #,### or #,##0 should be sufficient. Excel interprets this as having thousands separators every three digits (not just before the last three, which I infer is what you were expecting).

enter image description here

In the spirit of teaching a man to fish, this is how you can find out for yourself:

Format as Number, 0 decimal places, with 1000 separator:

enter image description here

Click OK, then re-open the number format dialog and go to Custom. Have a look at the formatting code ("Type"). It says #,##0, which for me gives the exact same result as #,###.

enter image description here

like image 29
Jean-François Corbett Avatar answered Oct 06 '22 02:10

Jean-François Corbett