大規模な Excel スプレッドシートを SQL Server 2008 データベースにインポートするスクリプトを作成しています。1 つの細かい点を除いて、すべてが正常に機能しています。
シート内のセルに複数のオプション (<select>
ドロップダウン メニューなど) がある場合、選択されたオプションのみが取得されます。使用されているオプションだけでなく、セルが持つすべての可能なオプションを取得したい (理由については、SQL クエリを参照してください)
Google と S/O で回答を検索しましたが、この特定の状況に対する解決策は見つかりませんでした。これは、私が使用しているスプレッドシート関数へのリンクです。
エクセル シートをお見せすることはできませんが、シートのトラバースは正しいと考えて間違いありません (テスト済みです)。
これが私のコードです:
<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 シートを表示することはできませんが、リストを再作成したので、どのような種類のドロップダウン セルについて話しているかがわかります。注:私が使用しているシート、オプションリストはセルで構築されていませんでした。作成者は検証句で静的値を使用しました!!!