This is my code so far, it gets data from a query then exports it into an Excel document:
<cfscript>
oArray = CreateObject("java", "java.util.Arrays");
workbook = CreateObject("java", "org.apache.poi.xssf.usermodel.XSSFWorkbook");
workbook.init();
myFont = workbook.createFont();
myFont.setBoldweight(myFont.BOLDWEIGHT_BOLD);
boldStyle = workbook.createCellStyle();
boldStyle.setFont(myFont);
</cfscript>
<!--- Set up the headings for the Excel worksheet --->
<cfscript>
thisSheet = workbook.createSheet(JavaCast("string", 'invoices due'));
rows = {};
// we need to refer to these three rows later on
rows[1] = thisSheet.createRow(0);
rows[2] = thisSheet.createRow(1);
rows[3] = thisSheet.createRow(2);
rows[4] = thisSheet.createRow(3);
//Report parameters explanation
thisCell = rows[2].createCell(0, 1);
thisCell.setCellValue(reportSum);
// user column headings
thisCell = rows[4].createCell(0, 1);
thisCell.setCellValue('Value');
thisCell.setCellStyle(boldStyle);
thisCell = rows[4].createCell(1, 1);
thisCell.setCellValue('Team');
thisCell.setCellStyle(boldStyle);
thisCell = rows[4].createCell(2, 1);
thisCell.setCellValue('Manager');
thisCell.setCellStyle(boldStyle);
</cfscript>
<cfset row = 5>
<cfloop query="invoicesDue">
<cfscript>
thisRow = thisSheet.createRow(JavaCast("int", row));
thisCell = thisRow.createCell(0, 1);
thisCell.setCellValue(HTMLEditFormat(invoicesDue.value));
thisCell = thisRow.createCell(1, 1);
thisCell.setCellValue(HTMLEditFormat(invoicesDue.ct_team));
thisCell = thisRow.createCell(2, 1);
thisCell.setCellValue(HTMLEditFormat(invoicesDue.manager));
thisCell = thisRow.createCell(3, 1);
</cfscript>
</cfloop>
<cfscript>
// todo: change to datadir from getAppRoot
outputFileName = "invoicesDue(withfundingsource)" & "_" & RandRange(00000,99999) & ".xlsx";
fos = CreateObject("java", "java.io.FileOutputStream");
fos.init(outputFilename);
workbook.write(fos);
fos.close();
</cfscript>
What I am trying to do is to format the column that is titled 'Value' to the data format 'Accounting' in Excel. I have done research but I am quite stuck.
Any ideas?
What I would do is create a file in Excel. Apply the "Accounting" format to the one of the cells. Then check the cell's style/dataFormat in POI:
dataFormatIndex = theAccountingCell.getCellStyle().getDataFormat();
In my tests, POI reported the "Accounting" format is BuiltInFormat 44
. You can apply it like this:
accountingStyle = workbook.createCellStyle();
accountingStyle.setDataFormat( javacast("int", 44) ) ;
someRow = someSheet.createRow(0);
someCell = someRow.createCell(0);
someCell.setCellStyle( accountingStyle );
someCell.setCellValue( javacast("double", 123.75) );
To view all of the BuiltInFormat values:
formats = createObject("java", "org.apache.poi.ss.usermodel.BuiltinFormats");
writeDump(formats.getAll());