如何使用 ColdFusion 设置电子表格列的格式?

问题描述 投票:0回答:3

我正在使用 SpreadsheetFormatColumns() 将电子表格中的列格式设置为“文本”,但我不知道如何执行此操作,livedocs 中的所有格式都是数字、货币或日期...是否有类似的内容

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

在外面吗?这真的很困扰我...

谢谢

coldfusion spreadsheet
3个回答
9
投票

在 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">

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


1
投票

根据此图表使用“@”(不带引号)作为文本占位符。


0
投票

通过将电子表格单元格设置为字符串或使用左填充来保持前导零的示例。

<cfscript>
myValue = "03";
row = 1;
col = 1;
rowCnt = 14;
spreadsheetSetCellValue(sObj,"#myValue#",row,col,"String");
spreadsheetAddRow(sObj obj, “1,2,03,a,b”, row, 1, true, "NUMERIC:1,2; STRING:3-5 " );
spreadsheetFormatCellRange(sObj,{dataformat="##,####0",alignment="right",font="Times New Roman",fontsize=9},13,2,rowCnt,12);
spreadsheetFormatCellRange(sObj,{dataformat="$##,####0",alignment="right",italic=true,font="Times New Roman",fontsize=9},13,13,rowCnt,15);
spreadsheetFormatCellRange(sObj,{dataformat="0.0%",alignment="right",italic=true,font="Times New Roman",fontsize=9},13,16,rowCnt,17);
</cfscript>

在电子表格AddRow() 中,“true”(默认)插入新行。 “false”将覆盖现有的。包括然后添加数据类型/格式属性。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.