很简单。模板中只有一列。客户端无法上载包含多个列的工作表。这曾经很管用。
所以只有一列的标题是ING_CAS,但是当我用cfspreadsheet读入文件时,我得到了COL_2,COL_3,ING_CAS。因此,不仅空白单元格被读取,而且由于这个属性headerrow="1",它们也被赋予了默认名称。
我现在有点不知所措。我一直在下载模板,选择无关紧要的空白行和列,然后删除它们,但一旦客户端获得文件,我就无法控制它。
有没有什么奇怪的设置会让cfspreadsheet忽略空白单元格?
<cfspreadsheet action="read" src="#theFile#" query="SpreadSheetData" headerrow="1">
<cfdump var="#SpreadSheetData#" />我最终编写了一个帮助器函数,它去掉了COL_(n)列。
<cffunction name="CleanExcelQuery" access="public" returntype="query" output="false" hint="Strips out blank column headers picked up on read.">
<cfargument name="SpreadSheetQuery" type="query" required="true" />
<cfset var theColumnHeaders = SpreadSheetQuery.columnList>
<cfset var theNewColumnHeaders = "">
<cfloop list="#theColumnHeaders#" index="h">
<cfif uCase(left(h, 4)) IS NOT "COL_">
<cfset theNewColumnHeaders = ListAppend( theNewColumnHeaders, h )>
</cfif>
</cfloop>
<cfquery name="newSpreadSheetQuery" dbtype="query">
Select #theNewColumnHeaders#
From SpreadSheetQuery
</cfquery>
<cfreturn newSpreadSheetQuery />
</cffunction>发布于 2013-05-02 23:41:50
cfspreadsheet仅忽略完全空白的单元格:没有值或格式(例如,当您选择一个单元格并使用“全部清除”时)。如果它选择了“额外”列,这是因为该列中的一个或多个单元格具有值或自定义单元格格式。这意味着它们并不是真正的“空白”。
如果知道列的位置,则可以使用columns属性仅读取该列中的值。例如,要读取列C
<cfspreadsheet action="read"
src="c:/path/to/file.xls"
columns="3"
headerrow="1"
query="qResult" />但我不确定我是否理解为什么这是一个问题。如果只需要一列,只需忽略代码中的其他列。您能详细说明为什么这会导致问题吗?
发布于 2013-05-04 05:23:13
如果您知道要始终读取哪些行,则可以使用以下命令:
<cfspreadsheet action="read" src="#path#" query="data" headerrow="1" excludeHeaderRow = "true" columns = "1-5" >上面的代码读取第1列到第5列。您也可以使用利的解决方案来读取前3列,或者可以执行类似columns=1,3,6的操作(如果我没记错的话)来从自定义范围读取
columns部件只读取您希望它读取的列,而不跳转。我用它来读取来自我们客户的文件,通常我会得到一些列,由于它们的格式,它们不是“空白”的。
您也可以查看cfspreadsheet的Cf文档,看看'column‘选项还支持哪些其他条目。
https://stackoverflow.com/questions/16341853
复制相似问题