2016-06-14 10 views
3

私はthis投稿を見ましたが、解像度があるように見えます。とにかく、私はExcelスプレッドシートを生成するためにColdFusion 10を使用しています。しかし、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)#"> 

、ここでは、なぜ、フォーマットは、Xの後に結果のExcelシートのスクリーンショット

enter image description here

停止されています行とセルの数? XML形式に切り替えると、

excelSheet = SpreadsheetNew("ReportName",true); 

が正しく機能します。しかし私は私の色のためのカスタムパレットを使用しているので、私はXLSX形式への切り替えは私にとってはうまくいかないと思います。試してみると

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

getCustomPalette()メソッドが定義されていないというエラーが表示されます。

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

誰でも私がこれを理解するのを助けることができますか?ありがとうございました!!!

それとも、より良い、それはXML形式で動作するので、誰もがXLSX(xml形式)でカスタムパレットを使用する方法の一例を示すことができる

+0

ちょうどtrycfを経由してあなたのコードを試してみましたが、それがhttp://trycf.com/gist/ce1e66bed5fe5d1bc40f8abd79f8fc72/acf?theme=monokai –

+0

@JohnWhish私はちょうどあなたのtrycf.comのリンクを使用してみました、それは私に同じを与えたCF10に正常に動作します結果。最後のいくつかのセルが青色の代わりに白いままになっている、数行後のフォーマットが壊れています。どのバージョンのExcelですか?私のExcelは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

関連する問題