0

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

我认为通过使用“列名”属性<cfspreadsheet>可以指示 cfspreadsheet 仅从这些列名中读取数据,不幸的是我错了或者我做错了?

CFSpreadsheet 代码的结果

这是我的 cfspreadsheet 代码:

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

映射列表和结果查询

4

1 回答 1

0

user3779216 写道: ... 显然每个机构(其中有 9 个)将有不同的 Excel 布局。我也许可以为用户创建一个 UI,将他们的 excel 中的列名映射到我的表中的列名,例如,从 excel 中下拉列名,从我的表中下拉列名,然后让用户选择excel 中的哪个 col 与我表中的哪个 col 匹配。

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

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

..并选择此列顺序:

  • 邮编,地址1,LName,FName,Email,MName,Address2,城市,州

将该列表输入 cfspreadsheet 会生成一个带有所需列映射的查询,您可以正常使用它。(如果需要,添加代码以检测并跳过第一行中的可选标题名称。)

CFSpreadsheet查询结果

<cfspreadsheet action="read" 
     src="#variables.pathToFile#"
     columnNames="#form.OrderedColumnNames#"
     query="sheetData" />

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

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

于 2017-03-15T14:52:36.667 回答