ColdFusion CFSpreadsheet读取空单元格

我给我的客户端模板,他们应该填充,然后他们上传电子表格,我用cfspreadsheet读取文件,以便将数据复制到数据库表。

挺容易。 该模板只有一列。 客户端不能上载其中有多个列的工作表。 这曾经工作。

所以一个列标题是ING_CAS但是当我用cfspreadsheet读取文件时,我得到COL_2COL_3ING_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”选项支持的其他条目。