问题描述
而且我想以某种方式将此工作表更改/转换为每列一个数据项集项目的平面格式,因此...
malloc(3)
老实说,我不知道如何最好地完成此操作,因为最终我想要 json 格式的数据,但与此同时,我很乐意使用上述格式的数据。
有人可以建议如何最好地完成这项工作吗?
解决方法
您可以从 Python 或 VBA 或其他语言执行 SQL 语句,如下所示:
SELECT *
FROM (
SELECT Question AS Item
FROM [Sheet1$]
UNION ALL SELECT 'Answer' + Answer
FROM [Sheet1$]
UNION ALL SELECT Answers
FROM [Sheet1$]
) AS t1
WHERE Item IS NOT NULL
(虽然我不太清楚您想对 Correct Answer
列做什么。)
此外,检查结果是否按顺序返回可能很重要。
从 VBA(并假设是 Excel 主机),您可以使用如下代码来执行 SQL 语句,并将数据粘贴到新工作表中:
Const filepath As String = "C:\path\to\excel\file.xlsx"
Const sheetname As String = "Sheet1"
Dim connectionString As String
connectionString = _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=""" & filepath & """;" & _
"Extended Properties=""Excel 12.0;HDR=No"""
' If your data is in a macro-enabled file (.xlsm),the previous line should
' look like this:
' "Extended Properties=""Excel 12.0 Macro;HDR=No"""
Dim sql As String
sql = _
"SELECT * " & _
"FROM (" & _
"SELECT Question AS Item " & _
"FROM [Sheet1$] " & _
"UNION ALL SELECT 'Answer' + Answer " & _
"FROM [Sheet1$] " & _
"UNION ALL SELECT Answers " & _
"FROM [Sheet1$] " & _
") AS t1 " & _
"WHERE Item IS NOT NULL"
Dim rs As New ADODB.Recordset
rs.Open sql,connectionString
Workbooks.Open(filepath).Worksheets.Add.Range("A1").CopyFromRecordset(rs)
你当然可以在 Python 中做类似的事情。
就 JSON 而言,VBA 没有原生 JSON 支持,但您可以从 VBA-JSON 导入模块。然后您可以按如下方式生成 JSON:
Dim json As String
json = JsonConverter.ConvertToJson(rs.GetRows)