2016-06-14 4 views
3

Я видел сообщение this, но там есть разрешение. Во всяком случае, я использую ColdFusion 10 для создания электронной таблицы Excel. Однако, когда я использую SpreadsheetFormatRow() и передаю строки, которые нужно отформатировать, он имеет значение только около 3 и затем резко останавливается. Вот пример ...SpreadsheetFormatRow внезапно прекращает работу

ColdFusion код

<cfscript> 

    rowCount = 1; 
    headingRows = 4; 

    // Create instance of new Spreadsheet 
    excelSheet = SpreadsheetNew("ReportName",false); 

    // HEADING (IMAGE) ROW FORMAT 
    formatHeadingRow = StructNew(); 
    formatHeadingRow.fgcolor="blue";   

    // Add rows to fill the header area (must add as many as we are spanning with the above image) 
    for (x=0;x<headingRows;x++) { 
     SpreadsheetAddRow(excelSheet,"TEST,TEST,TEST,TEST,TEST,TEST,TEST,TEST,TEST,TEST,TEST,TEST"); 
     SpreadsheetFormatRow(excelSheet,formatHeadingRow,rowCount); 
     rowCount++; 
    } 

</cfscript> 

<!--- stream it to the browser ---> 
<cfheader name="Content-Disposition" value="inline; filename=reportName.xls"> 
<cfcontent type="application/vnd.ms-excel" variable="#SpreadSheetReadBinary(excelSheet)#"> 

и вот скриншот полученного листа Excel

enter image description here

Почему форматирование остановки после X количество строк и ячеек? Если переключиться на использование формата XML с

excelSheet = SpreadsheetNew("ReportName",true); 

это работает должным образом. Однако я использую пользовательскую палитру для своих цветов, поэтому я не думаю, что переход на XLSX будет работать для меня. Когда я пытаюсь и затем вызвать

palette = excelSheet.getWorkbook().getCustomPalette(); 

Я получаю ошибку о том, что метод getCustomPalette() не определено.

coldfusion.runtime.java.MethodSelectionException: The getcustompalette method was not found 

Может ли кто-нибудь помочь мне понять это? Спасибо!!!

Или еще лучше, так как он работает с форматом XML, может кто-нибудь показать пример того, как использовать пользовательскую палитру (в формате XML) XLSX

+0

Просто попробовал ваш код через trycf и она отлично работает на CF10 http://trycf.com/gist/ce1e66bed5fe5d1bc40f8abd79f8fc72/acf?theme=monokai –

+0

@JohnWhish Я просто попытался использовать свою ссылку trycf.com, и он дал мне то же самое Результаты. Сломанное форматирование после нескольких строк, а последние несколько ячеек остались белыми, а не синими. Какая версия Excel? Mine - Excel 2016 с Office 365 – Phil

ответ

3

Это вопрос, который я видел, часто при работе с XLS файлами от CF; они, похоже, перестают применять стили после определенного количества ячеек. Я смог обойти это, выведя вместо xlsx. (Я был в состоянии повторить и «исправить» проблему, делая это.)

excelSheet = SpreadsheetNew("ReportName",true); 

...

<cfheader name="Content-Disposition" value="inline; filename=reportName.xlsx"> 
<cfcontent type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" 
     variable="#SpreadSheetReadBinary(excelSheet)#"> 
+0

, хотя это действительно работает, мне нужно использовать собственную таблицу с моей таблицей, чтобы я не ограничивался предопределенными цветами HSSF. Когда я пытаюсь использовать параметр XLSL, метод getCustomPalette() больше не доступен в объекте рабочей книги. – Phil

3

Поскольку вы подаете точно такой же формат для всех строк, только сделать это один раз, а не на каждом ряду. Использование SpreadsheetFormatCellRange после цикла должен решить вопрос:

SpreadsheetFormatCellRange(excelSheet 
          , formatHeadingRow 
           , startRow 
           , startCol 
           , endRow 
           , endCol); 

Я подозреваемый проблема как-то соотносится с Excel's maximum style limits. Поскольку CF является черным ящиком, трудно понять, сколько стилей он на самом деле создает или точно, как они применяются. Однако, по моему опыту, очень легко превысить пределы стиля, даже не зная об этом. Особенно при использовании более старого формата файлов .xls, чьи ограничения намного ниже. Вот почему я предложил using the newer .xlsx format instead.

Метод getCustomPalette() не определен.

Исправить. Он не существует в XSSF. Есть ли какая-то причина, по которой вам нужна пользовательская палитра, а не только defining your own colors, как упоминалось в вашей другой теме?

+0

, реализуя пример, который вы предоставили на моем другом посту, чтобы получить мои пользовательские цвета и перейти к XSLX-формату. – Phil

+0

Справедливости ради, если вы собираетесь переключиться на xlsx, @TimJasko предположил, что сначала :) В то время как вышеупомянутое решение проблемы для .xls, честно говоря, это только продление неизбежного в отношении стилей. Лучшим вариантом является переход на .xlsx, который обладает большей функциональностью и более высокими лимитами стиля. – Leigh

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