SpreadsheetFormatRow 突然停止工作

SpreadsheetFormatRow abruptly stops working

我已经看到 this post,但看起来确实有解决方案。无论如何,我正在使用 ColdFusion 10 生成 Excel spreadsheet。但是,当我使用 SpreadsheetFormatRow() 并传入要格式化的行时,它只执行大约 3 次然后突然停止。这是一个例子...

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 sheet

为什么格式化在 X 行和单元格后停止? 如果我切换到使用 XML 格式和

excelSheet = SpreadsheetNew("ReportName",true);

它工作正常。但是我为我的颜色使用了自定义调色板,所以我认为切换到 XLSX 格式对我来说不起作用。当我尝试然后调用

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

我收到一条错误消息,指出 getCustomPalette() 方法未定义。

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

谁能帮我解决这个问题?谢谢!!!

甚至更好,因为它适用于 XML 格式,任何人都可以展示如何使用 XLSX(xml 格式)

的自定义调色板的示例

这是我在处理来自 CF 的 xls 文件时经常遇到的问题;他们似乎在一定数量的单元格后停止应用样式。我已经能够通过输出到 xlsx 来解决它。 (通过这样做,我能够复制并 "fix" 你的问题。)

excelSheet = SpreadsheetNew("ReportName",true); 

...

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

由于您要对所有行应用完全相同的格式,因此仅一次,而不是每一行。在循环后使用 SpreadsheetFormatCellRange 应该可以解决问题:

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

怀疑 这个问题在某种程度上与 Excel's maximum style limits. Since CF is a black box, it is difficult to know how many styles it actually creates or exactly how they are applied. However, in my experience it is very easy to exceed the style limits without even knowing it. Especially when using the older .xls file format, whose limits are much lower. That is why I suggested using the newer .xlsx format instead 有关。

getCustomPalette() method is undefined.

正确。它在 XSSF 中不存在。是否有某种原因需要自定义调色板而不是其他线程中提到的