Coldfusion 如何仅使用CFSpreadsheet读取填充的列

Coldfusion 如何仅使用CFSpreadsheet读取填充的列,coldfusion,coldfusion-10,cfspreadsheet,Coldfusion,Coldfusion 10,Cfspreadsheet,我正在尝试使用从电子表格中读取数据,并将该数据插入到数据库表中。假设我的表有10个可能的列:FName、LName、MName、Address1、Address2、Address3、city、state、zip和email。用户可以使用Excel提交数据,但不必提交所有10列的数据。他们可以只提交FName,Email或FName,LName,City,Email的数据。我的电子表格代码应该只能读取在Excel文件中提交的列,而不是读取所有空白列。 我想通过使用的“columnnames”属性,

我正在尝试使用
从电子表格中读取数据,并将该数据插入到数据库表中。假设我的表有10个可能的列:
FName、LName、MName、Address1、Address2、Address3、city、state、zip和email
。用户可以使用Excel提交数据,但不必提交所有10列的数据。他们可以只提交
FName,Email
FName,LName,City,Email
的数据。我的电子表格代码应该只能读取在Excel文件中提交的列,而不是读取所有空白列。

我想通过使用
的“columnnames”属性,我可以指示cfspreadsheet从这些列名中读取数据,不幸的是,我错了,还是我做错了

以下是我的CFC电子表格代码:

 <cfspreadsheet action="read" 
     src="#Trim(PathToExcelFile)#" 
     columnnames="#Trim(Form.UserColumnList)#" 
     excludeheaderrow="true" 
     query="FindData">
 </cfspreadsheet>

用户3779216写道:。。。显然,每个机构(共有9个)都有不同的excel布局。我可以为用户创建一个UI,以将excel中的列名称映射到我的表中的列名称,例如,excel中的列名称下拉列表和我的表中的列名称下拉列表,并让用户选择excel中的哪个列与我的表中的哪个列相匹配

事实上,这会让事情变得非常简单。只需按照最初的方式将列的有序列表输入cfspreadsheet,查询列名就会自动正确映射

例如,如果用户上传了以下布局:

。。并选择此列顺序:

  • 邮政编码,地址1,LName,FName,电子邮件,MNName,地址2,城市,州
将该列表输入cfspreadsheet将生成一个具有所需列映射的查询,您可以正常使用这些映射。(如果需要,添加代码以检测和跳过第一行中的可选标题名称。)



NB:显然,真正的代码应该包括输入列表的验证。确保它包含所有必需的列,并且未被篡改以包含无效字符,等等

能否提供form.userColumnList中存储的内容的示例?在调用please之前对其执行a/操作。嗨,Scott,user.ColumnList是用户excel文件中可用列的列表。cfdump显示:LName、FName、MName、HomeAddr1。不同的用户可以提交具有不同列的excel,例如LName、FName、MNName、HomeAddr1、HomeAddr2、HomeAddr3、HomeCity。HomeState、HomeZip(编辑)“columnNames”不确定电子表格读取的列。它将“FindData”中的查询列重命名为比“col_1、col_2等”更有意义的内容。也许您正在考虑
columns
属性?在搜索columns和columnnames属性后,我仍然不太明白它们对查询FindData的作用。为什么不将电子表格读取到变量而不是查询,然后读取第一行以查看提交了什么?噢,columnnames属性就是这样的吗对于让我来做一下,看看。谢谢你,李!利,我差点就搞定了。一个问题是,我必须使这个应用程序尽可能灵活。假设我的表格有20列,但用户只允许上传6列的excel,例如:FN(col_1)和LN(col_2)、MN(col_3)、addr1(col_4)、addr2(col_5)、addr3(col_6)。映射之后,我得到了一个列名称列表,如下所示:FN,LN,MN,Addr1,Addr2,Addr3。当我在columnNames属性中使用它时,只有FN、LN和MN头位于正确的位置,而不是地址1、2、3。有没有办法让你知道我做了什么?此注释框限制我这样做。(编辑)只要数据列是连续的并且从电子表格列A开始,它就应该正常工作。为了确保我理解正确,您能否编辑您的问题,以包括1)实际电子表格的屏幕截图(仅第一行)和2)应用上述映射后生成的查询对象?Leigh,我一次只能添加一张图像?我用excel替换了我的第一张图片。我无法添加更多图像我又添加了一个图像。这是图像,但我不允许添加两个以上的图像。
<cfspreadsheet action="read" 
     src="#variables.pathToFile#"
     columnNames="#form.OrderedColumnNames#"
     query="sheetData" />

<cfdump var="#variables.sheetData#">