我正在编写一个脚本来将大型 excel 电子表格导入 SQL Server 2008 数据库。一切正常,除了一个小细节:
如果工作表中的单元格有多个选项(如下<select>
拉菜单),则只有选定的选项会被抓取。我想获取单元格具有的所有可能选项,而不仅仅是正在使用的选项(请参阅我的 SQL 查询了解原因)
我已经在 google 和 S/O 上搜索了答案,但我还没有遇到这种特殊情况的解决方案。这是我正在使用的电子表格函数的链接。
我无法向您展示 Excel 工作表,但可以安全地假设工作表的遍历是正确的(我已经对其进行了测试)。
这是我的代码:
<cfspreadsheet action="read" src="spreadsheet.xlsx" name="sheet">
<cfoutput>
#sheet.rowcount-3#
<cfloop from="2" to="#sheet.rowcount-3#" index="row">
<cfquery datasource="Questions" result="rState">
INSERT INTO States
(
State,
StateAbbr
)
VALUES
(
<cfqueryparam cfsqltype="cf_sql_varchar" value="#SpreadsheetGetCellValue(sheet,row,1)#">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="#SpreadsheetGetCellValue(sheet,row,2)#">
)
</cfquery>
#SpreadsheetGetCellValue(sheet,row,1)#<br />
#SpreadsheetGetCellValue(sheet,row,2)#<br />
<cfloop from="3" to="15" index="col"> <!--- multi row selection (edit based on excel sheet col relationship) --->
<cfif SpreadsheetGetCellValue(sheet,row,col) EQ "">
<cfset SpreadsheetSetCellValue(sheet,"N/A",row,col) />
</cfif>
<cfquery datasource="Questions" result="rResponse">
IF NOT EXISTS
(
SELECT Response
FROM Responses
WHERE Response=<cfqueryparam cfsqltype="cf_sql_nvarchar" value="#SpreadsheetGetCellValue(sheet,row,col)#">
)
INSERT INTO Responses
(
Response
)
VALUES
(
<cfqueryparam cfsqltype="cf_sql_nvarchar" value="#SpreadsheetGetCellValue(sheet,row,col)#">
)
</cfquery>
#row#X#col#<br />
#SpreadsheetGetCellValue(sheet,row,col)#<br />
</cfloop>
</cfloop>
</cfoutput>
编辑:我无法显示我正在使用的 excel 表,但我重新创建了列表,所以你知道我在说什么类型的下拉单元格。注意:我正在使用的工作表,选项列表不是用单元格构建的,创建者在验证子句中使用了静态值!!!