2010-06-20 5 views
5

Я использую SpreadsheetFormatColumns() для форматирования столбцов в электронной таблице для «текста», но я не знаю, как это сделать, все форматы в liveocs для чисел, валюты или дат ... есть что-то какКак форматировать столбцы таблицы, используя ColdFusion?

SpreadsheetFormatColumns (mySpreadsheet, {DataFormat = "текст"}, "1-15")

там? это действительно давало мне покоя ...

Благодаря

ответ

1

Согласно this chart использования «@» (без кавычек) для текста заполнителем.

+0

Спасибо, оказывается, что «текст» также является возможностью (тот же вывод), но их нужно называть ПОСЛЕ того, как вы заполняете строки (что не имеет смысла на мой взгляд), поскольку теперь вместо «01050094071094340000» (желаемый результат) У меня есть «1.050094071094339e + 18», это похоже на БОЛЬШУЮ проблему (по крайней мере для меня) Используя обычный «автоматический» формат, он удалит все ведущие нули. – raulriera

7

В ColdFusion 9.0.1 (например, updater 1), если вы используете SpreadsheetSetCellValue(), он будет уважать формат, который вы ранее задали. Поэтому, чтобы заставить столбец быть текстом при заполнении листа, вы можете использовать трехэтапный процесс:

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

По умолчанию оба значения в первом столбце моего запроса будет обрабатываются как числа (второй как HEX). Используя этот метод, оба сохраняют свое исходное значение как текст.

+1

. Для получения дополнительной информации см. это сообщение в блоге: http://cfsimplicity.com/16/forcing-values-to-be-inserted-into-spreadsheets-as-text – CfSimplicity

+0

Хорошее объяснение. Хотя кажется странным, формат все еще не соблюдается при использовании объектов запроса, т.е. SpreadSheetAddRows (лист, запрос). Время поиска базы данных ошибок;) – Leigh

Смежные вопросы