如何使用ColdFusion格式化电子表格列?

时间:2010-06-20 22:38:06

标签: coldfusion spreadsheet

我正在使用SpreadsheetFormatColumns()将电子表格中的列格式化为“text”,但我不知道如何执行此操作,liveocs中的所有格式都是数字,货币或日期...是否存在

之类的东西

SpreadsheetFormatColumns(mySpreadsheet,{dataFormat =“text”},“1-15”)

在那里?这真是让我烦恼......

由于

2 个答案:

答案 0 :(得分:7)

在ColdFusion 9.0.1(即更新程序1)中,如果使用SpreadsheetSetCellValue(),它将遵循您先前设置的格式。因此,要在填充工作表时强制列为文本,您可以使用3个步骤:

  1. 填充电子表格,忽略错误解释的数字值。
  2. 将所需列格式化为文本。
  3. 使用正确的值替换列中每行的错误值,现在将其视为文本。
  4. 这是一个可以复制到.cfm并按原样运行的示例(需要CF9.0.1)

    <cfscript>
        // Create a 2 column, 2 row query. The first column contains numbers or possible numbers we want formatted as text in our spreadsheet
        q   =   QueryNew( "" );
        QueryAddColumn( q,"NumbersAsText","VarChar",[ 01050094071094340000,"743059E6" ] );
        QueryAddColumn( q,"Text","VarChar",[ "abc","def" ] );
        // Get the column names as an array so we can get at them more easily later
        columns =   q.getMetaData().getColumnLabels();
        // Create a new spreadsheet object
        sheet   =   SpreadSheetNew( "test" );
        // specify the column we want formatted as text
        forceTextColumnNumber   =   1;
        // Use the query column names as column headers in our sheet
        SpreadSheetAddRow( sheet,q.columnList );
        // Add the data: the numbers will be inserted as numeric for now
        SpreadSheetAddRows( sheet,q );
        // Now we format the column as text
        SpreadSheetFormatColumn( sheet,{ dataformat="text" },forceTextColumnNumber );
        // Having formatted the column, add the column from our query again so the values correct
        while( q.next() )
        {
            // Skip the header row by adding one
            rownumber   =   ( q.currentrow + 1 );
            // Get the value of column at the current row in the loop
            value   =   q[ columns[ forceTextColumnNumber ] ][ q.currentrow ];
            // replace the previously added numeric value which will now be treated as text
            SpreadsheetSetCellValue( sheet,value,rownumber,forceTextColumnNumber );
        }
        // Download the object as a file
        sheetAsBinary   =   SpreadSheetReadBinary( sheet );
        filename    =   "test.xls";
    </cfscript>
    <cfheader name="Content-Disposition" value="attachment; filename=#Chr(34)##filename##Chr(34)#">
    <cfcontent type="application/msexcel" variable="#sheetAsBinary#" reset="true">
    

    默认情况下,我的查询的第一列中的两个值都将被视为数字(第二列为HEX)。使用此方法都将其原始值保留为文本。

答案 1 :(得分:1)

根据this chart使用'@'(不含引号)作为文本占位符。