5

SpreadsheetFormatColumns()を使用してスプレッドシートの列を「テキスト」にフォーマットしていますが、これを行う方法がわかりません。livedocsのすべてのフォーマットは、数値、通貨、または日付用です...次のようなものがあります。

SpreadsheetFormatColumns(mySpreadsheet、{dataFormat = "text"}、 "1-15")

そこに?これは本当に私を悩ませています...

ありがとう

4

2 に答える 2

7

ColdFusion 9.0.1 (アップデーター 1) では、SpreadsheetSetCellValue() を使用すると、以前に設定した形式が尊重されます。したがって、シートに入力するときに列を強制的にテキストにするには、3 段階のプロセスを使用できます。

  1. 誤って解釈された数値を無視して、スプレッドシートに入力します。
  2. 必要な列をテキストとして書式設定します。
  3. 列の各行の誤った値を正しい値に置き換えます。これはテキストとして扱われます。

以下は、.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">

デフォルトでは、クエリの最初の列の値は両方とも数値として扱われます (2 番目の列は HEX として扱われます)。この方法を使用すると、どちらも元の値をテキストとして保持します。

于 2011-04-13T14:12:40.003 に答える
1

この表によると、テキスト プレースホルダーには「@」(引用符なし) を使用します。

于 2010-06-20T23:04:35.267 に答える