我给我的客户一个他们应该填充的模板,然后他们上传电子表格,我读取文件cfspreadsheet
以便将数据复制到数据库表中。
挺容易。模板中只有一列。客户不能上传包含多于一列的工作表。这曾经奏效。
所以一列标题是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>