如何在ColdFusion 2016中动态设置电子表格自动过滤器?

时间:2017-12-21 22:31:20

标签: coldfusion spreadsheet autofilter coldfusion-2016

我想将动态自动过滤器添加到电子表格第一行中的所有列。以下是我到目前为止的例子:

SpreadSheetAddAutoFilter(theSheet,"A1:Z1");

这有效,但问题是我的文件中有更少或更多的列。有没有办法在我的文件的第一行中的每一列上设置过滤器?这不应该是硬编码的。如果您有任何关于此问题的示例,请告诉我。谢谢。

2 个答案:

答案 0 :(得分:2)

假设您已经有Excel工作表,并且正在尝试将过滤器动态添加到整行,则需要

  1. 获取列数
  2. 将列数转换为相应的字母。例如,列E - > 5
  3. 从中创建一个范围,例如A1:E1,并将该字符串传递给SpreadSheetAddAutoFilter()函数。
  4. 这是我写的一个工作示例:

    <cffunction name="columnToLetter" returntype="any">
        <cfargument name="index" type="numeric">
        <cfset letterArray = listToArray('A B C D E F G H I J K L M N O P Q R S T U V W X Y Z', ' ')>
        <cfreturn letterArray[index]>
    </cffunction>
    
    
    <cfspreadsheet action="read" src="fin.xlsx" name="spreadSheetObj" sheetname="Sheet1"> 
    <cfset count = SpreadsheetGetColumnCount(spreadSheetObj, 'Sheet1')>
    
    <cfoutput>
        count: #count# <br>
        <cfset column_label = columnToLetter(count)>
        <cfset column_label = 'A1:' & column_label & '1'>
        label: #column_label#
        <cfset SpreadSheetAddAutoFilter(spreadSheetObj, column_label)>
        <cfspreadsheet action="write" filename="updatedFile.xls" name="spreadSheetObj" sheetname="courses" overwrite=true> 
    </cfoutput>
    

答案 1 :(得分:1)

发布此答案,因为它的结果比已发布的答案更好。 这只是一个简单的循环,除以26并获得角色。

<cfscript>
    // Function to print Excel column name for a given column number
    function printString(n){
        str = '';
        while (n>0){
            // Find remainder
            rem = n%26;
            // If remainder is 0, then a 'Z' must be there in output
            if (rem==0){
                str = 'Z' & str;
                n = (n\26)-1;
            } else {
                str = chr(64 + rem) & str;
                n = n\26;
            }
        }
        return str;
    }
</cfscript>

缩短形式

function printString(n){
    str = '';
    while (n>0){
        rem = n%26;
        str = rem==0 ? 'Z' & str : chr(64 + rem) & str;
        n = rem==0 ? (n\26)-1 : n\26;
    }
    return str;
}

Function in action