ColdFusion CFSpreadsheet读取空单元格
我给我的客户端模板,他们应该填充,然后他们上传电子表格,我用cfspreadsheet
读取文件,以便将数据复制到数据库表。
挺容易。 该模板只有一列。 客户端不能上载其中有多个列的工作表。 这曾经工作。
所以一个列标题是ING_CAS
但是当我用cfspreadsheet
读取文件时,我得到COL_2
, COL_3
, ING_CAS
。 因此,不仅空白单元格正在读取,而且由于此属性的headerrow="1"
它们也被赋予默认名称。
我在这里不知所措 我一直在下载模板,并select无关的空行和列,并删除它们,但我无法控制该文件,一旦客户端得到它。
是否有一些奇怪的设置,我错过了会使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>
cfspreadsheet
只会省略完全空白的单元格:没有值或格式(例如当您select单元格并使用“全部清除”时)。 如果它正在拾取“额外”列,那是因为该列中的一个或多个单元格具有值或自定义单元格格式。 这意味着他们不是真的“空白”。
如果知道列位置,则可以使用columns
属性只读取该列中的值。 例如,阅读C
列:
<cfspreadsheet action="read" src="c:/path/to/file.xls" columns="3" headerrow="1" query="qResult" />
但我不知道我明白为什么这是一个问题。 如果您只需要一列,只需忽略代码中的其他列。 你能否详细说明为什么这会造成问题?
如果你知道你想要阅读哪些行,你可以使用这个:
<cfspreadsheet action="read" src="#path#" query="data" headerrow="1" excludeHeaderRow = "true" columns = "1-5" >
上面的代码读取第1到第5列。您也可以使用Leigh的解决scheme来读取前3列,或者您可以做一些像columns=1,3,6
(如果我记得是正确的)从自定义范围
columns
部分只读取您想要阅读的列而不跳跃。 我用它来读取来自我们客户的文件,通常我会得到几个由于其格式而不是“空白”的列。
您也可以检查cffreadsheet的Cf文档,以查看“column”选项支持的其他条目。