我想将动态自动过滤器添加到电子表格第一行中的所有列。以下是我到目前为止的例子:
SpreadSheetAddAutoFilter(theSheet,"A1:Z1");
这有效,但问题是我的文件中有更少或更多的列。有没有办法在我的文件的第一行中的每一列上设置过滤器?这不应该是硬编码的。如果您有任何关于此问题的示例,请告诉我。谢谢。
答案 0 :(得分:2)
假设您已经有Excel工作表,并且正在尝试将过滤器动态添加到整行,则需要
A1:E1
,并将该字符串传递给SpreadSheetAddAutoFilter()
函数。这是我写的一个工作示例:
<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;
}