3

I'd like to create a single excel file with two sheets using CF9, SpreadsheetWrite and cfscript. Something like:

var data= spreadsheetNew( 'data' );
var key= spreadsheetNew( 'key');
spreadsheetAddRow( data, dataInfo );
spreadsheetAddRow( key, keyInfo );      
spreadsheetWrite( data, filePath );
spreadsheetWrite( key, filePath );

I don't find documentation that explains how to combine multiple sheets in one file. Here's what I find.

http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSe9cbe5cf462523a0-7b585809122c5a12c54-7fff.html

It states that one can 'Write multiple sheets to a single file.' but whether that means more than one sheet at a time is not clear. You can accomplish this using tags but I need to use cfscript.

<cfspreadsheet action="update"  filename = "filePath" sheetname = "key" > 

How does one write the above tag-based call using cfscript?

Greg
  • 61
  • 1
  • 8

1 Answers1

6

Yes, it is not very clear from the documentation. SpreadsheetNew creates a Workbook with a single worksheet. To add additional sheets, use the SpreadSheetCreateSheet function. Before you can manipulate the new sheet, it must be made active with SpreadSheetSetActiveSheet. Here is a quick example of creating a workbook with two sheets:

<cfscript>
    // Create new workbook with one worksheet. 
    // By default this worksheet is active
    Workbook = SpreadsheetNew("Sheet1");
    // Add data to the currently active sheet
    SpreadSheetAddRow(Workbook, "Apples");
    SpreadSheetAddRow(Workbook, "Oranges");


    //Add second worksheet, and make it active
    SpreadSheetCreateSheet(Workbook, "Sheet2");
    // Add data to the second worksheet
    SpreadSheetSetActiveSheet(Workbook, "Sheet2");
    SpreadSheetAddRow(Workbook, "Music");
    SpreadSheetAddRow(Workbook, "Books");

    //Finally, save it to a file
    SpreadSheetWrite(Workbook, "c:/path/to/yourFile.xls", true);
</cfscript>

Side note, I would not recommend using <cfspreadsheet action="update"> anyway. Last I recall it was a bit buggy.

Community
  • 1
  • 1
Leigh
  • 28,765
  • 10
  • 55
  • 103
  • I've never understood why all these examples end with "and then save it to a file", why would you ever want to do that? If you want to send it out to the output stream instead (for the end user to save it as a file) you can do this: ` ` – Richard Tingle Sep 26 '17 at 13:14
  • @RichardTingle If you're FTPing somewhere, or for archiving purposes, maybe? – Matt Gutting May 24 '19 at 13:56