2016-08-22 2 views
1

Я экспортирую запрос в файл Excel с помощью cfspeadsheet. Он работает и создает лист Excel. Однако проблема заключается в том, что один из столбцов, то есть card_number, содержит 15-значное число, которое отображается следующим образом: 4.5421E+15. Есть ли способ показать полный номер: 4254218068670980?Как показать полный номер в листе Excel?

<!--- create manual query for demo ---> 
<cfset qData = queryNew("")> 
<cfset queryAddColumn(qData, "NumericCol", "BigInt",["4254218068670980"])> 
<cfset queryAddColumn(qData, "StringCol", "Varchar",["4254218068670980"])> 
<cfset queryAddColumn(qData, "DecimalCol", "Decimal",["4254218068670980"])> 

<!--- export to file ---> 
<cfspreadsheet action="write" 
     filename="c:/path/to/myFile.xls" 
     query="qData" 
     overwrite="true"> 
+0

Я ДЕЙСТВИТЕЛЬНО надеюсь, что это не номер кредитной карты .... ;-) – Leigh

+0

nope ramdom number, я тоже могу изменить его любой путаницы –

ответ

1

Необходимо определить и использовать формат ячейки для отображения полного номера. Ниже приведен фрагмент кода для кода:

<cfscript> 
theFile=GetDirectoryFromPath(GetCurrentTemplatePath()) & "new_data.xls"; 
//Create a new Excel spreadsheet object. 
theSheet = SpreadsheetNew("Expenses"); 
//Set the value a cell. 
SpreadsheetSetCellValue(theSheet,"4254218068670980",1,4); 
//Set value into another cell. 
SpreadsheetSetCellValue(theSheet,"4254218068670980",2,4); 
// Define a format class for for number. 
longNum=StructNew(); 
longNum.dataformat = "0"; 
//Now use this class to format cell 
SpreadsheetFormatCell(theSheet,longNum,2,4); 
</cfscript> 

Существует множество поддерживаемых форматов; для полного списка вы можете проверить here. Также, как и SpreadsheetFormatCell, вы можете использовать SpreadsheetFormatColumn или другие связанные функции.

+0

Вам необходимо отформатировать ячейку, прежде чем заполнять ее данными. Я также заметил, что количество ячеек и строк, которые вы можете форматировать таким образом, ограничено 4000, но пока я еще не нашел пути. Вот почему мы используем пользовательские теги POI Ben Nadel, которые вы можете найти здесь (https://github.com/bennadel/POIUtility.cfc). – Sander

+1

@Sander - Скорее всего, это вызвано форматированием ячеек по отдельности. [Excel ограничивает количество «стилей», которые вы можете применить] (http://stackoverflow.com/questions/37817997/spreadsheetformatrow-abruptly-stops-working/37820034#37820034). Пределы ниже для .xls, чем .xlsx. Обычно решение состоит в том, чтобы применять форматы один раз - к диапазону или целому столбцу - вместо индивидуально. – Leigh

0

(слишком долго для комментариев ...)

FWIW, CFSPREADSHEET предназначен для очень простых экспорта, без большого колокола и свистки. Если вам нужно специальное форматирование, вместо этого вы должны использовать функции электронных таблиц.

Ближайший эквивалент вашего текущего кода, вероятно, является функцией SpreadsheetAddRows(sheet, query). Он заполняет рабочий лист данными в поставляемом объекте запроса. Как указано в Viv's answer, вы можете форматировать столбцы по желанию. Например, если вы хотите, чтобы значение, которое будет рассматриваться как текст, используйте {dataformat = "@"}:

<cfscript> 
    SpreadsheetAddRows(theSheet, qData); 
    SpreadsheetFormatColumns(theSheet, {dataformat = "@"}, "1-3"); 
    SpreadSheetWrite(theSheet, "c:/path/to/myFile.xls", true); 
</cfscript> 

Как и в сторону, примеры в документации не всегда является лучшим или чистым. Рассмотрите их как отправную точку, а не используйте код точно «как есть».

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