将 JSON 制成表格
Tabulate JSON into Sheets
我一直在尝试从 URL.
中获取 JSON 文件的可读数据库
我在 Github、https://github.com/fastfedora/google-docs/blob/master/scripts/ImportJSON/Code.gs 上使用 fastfedora 的脚本将 JSON 从 URL 导入表格。我正在使用基本的:
=TRANSPOSE(ImportJSON("https://rsbuddy.com/exchange/summary.json"))
我使用了转置,因为它更容易处理两个长列而不是两个长行。
然而,导入的数据非常混乱:https://docs.google.com/spreadsheets/d/1mKnRQmshbi1YFG9HHg7-mKlZZzpgDME6-eGjDJKzbRY/edit?usp=sharing。它基本上是一长列描述性数据(名称、ID、价格等)和另一列变量(商品的实际名称及其价格的数字)。
是否可以操纵生成的表格页面,使第一列中的公因子可以与两个初始列旁边的伪 table 对齐?例如。对于第一项,ID 为“2”,名称为 'Cannonball',Sp 为“5”等
提前致谢。请原谅我的无知
如果数据是结构化的并且每个对象将始终具有相同的结构,您可以使用简单的偏移量来执行此操作:
=OFFSET($B,
(ROW($B2) - 2) * 7 +
COLUMN(D) - 4,
0)
将其放入 D2 并向右向下拖动。
可以以这种方式立即 return 数据,但为此您需要干预脚本。
简单公式
我认为,获取 IDs 的更快方法:
=QUERY(QUERY(A2:B,"select B where A <> '' offset 4"),"skipping 7")
如果你想要 姓名:
=QUERY(QUERY(A2:B,"select B where A <> '' offset 1"),"skipping 7")
当您将偏移量从 0 更改为 6 时,您会得到不同的列
输出。
7
是数据中的列数。
结果是带有数据的自动完成列。
硬公式
也可以用一个公式得到全部结果:
- 在单元格
E2
中粘贴 =COUNTA(A:A)
- 在
E3
中粘贴7
,这是Data 中的列数
=E2/E3
在 E4
然后在单元格 G2
或右边的某处粘贴公式:
=ArrayFormula(vlookup(if(COLUMN(OFFSET(A1,,,1,E3)),
(row(OFFSET(A1,,,E4))-1)*E3+COLUMN(OFFSET(A1,,,1,E3))),
{row(OFFSET(A1,,,E2)),OFFSET(B2,,,E2)},2,0))
它运行缓慢,但给出了整个table。
或脚本?
我也尝试过使用脚本 UDF 函数。这是测试公式:
=ConvertTo2D(TRANSPOSE(R3:R16),7)
其中 R3:R16 是一个小范围,它被分成 table 7 列。脚本很短:
function ConvertTo2D(Arr, index) {
var newArr = [];
while(Arr[0].length) newArr.push(Arr[0].splice(0,index));
return newArr;
}
听起来不错。但!它非常慢。所以此解决方案仅适用于快速测试。
我一直在尝试从 URL.
中获取 JSON 文件的可读数据库我在 Github、https://github.com/fastfedora/google-docs/blob/master/scripts/ImportJSON/Code.gs 上使用 fastfedora 的脚本将 JSON 从 URL 导入表格。我正在使用基本的:
=TRANSPOSE(ImportJSON("https://rsbuddy.com/exchange/summary.json"))
我使用了转置,因为它更容易处理两个长列而不是两个长行。
然而,导入的数据非常混乱:https://docs.google.com/spreadsheets/d/1mKnRQmshbi1YFG9HHg7-mKlZZzpgDME6-eGjDJKzbRY/edit?usp=sharing。它基本上是一长列描述性数据(名称、ID、价格等)和另一列变量(商品的实际名称及其价格的数字)。
是否可以操纵生成的表格页面,使第一列中的公因子可以与两个初始列旁边的伪 table 对齐?例如。对于第一项,ID 为“2”,名称为 'Cannonball',Sp 为“5”等
提前致谢。请原谅我的无知
如果数据是结构化的并且每个对象将始终具有相同的结构,您可以使用简单的偏移量来执行此操作:
=OFFSET($B,
(ROW($B2) - 2) * 7 +
COLUMN(D) - 4,
0)
将其放入 D2 并向右向下拖动。 可以以这种方式立即 return 数据,但为此您需要干预脚本。
简单公式
我认为,获取 IDs 的更快方法:
=QUERY(QUERY(A2:B,"select B where A <> '' offset 4"),"skipping 7")
如果你想要 姓名:
=QUERY(QUERY(A2:B,"select B where A <> '' offset 1"),"skipping 7")
当您将偏移量从 0 更改为 6 时,您会得到不同的列 输出。
7
是数据中的列数。
结果是带有数据的自动完成列。
硬公式
也可以用一个公式得到全部结果:
- 在单元格
E2
中粘贴 - 在
E3
中粘贴7
,这是Data 中的列数
=E2/E3
在E4
=COUNTA(A:A)
然后在单元格 G2
或右边的某处粘贴公式:
=ArrayFormula(vlookup(if(COLUMN(OFFSET(A1,,,1,E3)),
(row(OFFSET(A1,,,E4))-1)*E3+COLUMN(OFFSET(A1,,,1,E3))),
{row(OFFSET(A1,,,E2)),OFFSET(B2,,,E2)},2,0))
它运行缓慢,但给出了整个table。
或脚本?
我也尝试过使用脚本 UDF 函数。这是测试公式:
=ConvertTo2D(TRANSPOSE(R3:R16),7)
其中 R3:R16 是一个小范围,它被分成 table 7 列。脚本很短:
function ConvertTo2D(Arr, index) {
var newArr = [];
while(Arr[0].length) newArr.push(Arr[0].splice(0,index));
return newArr;
}
听起来不错。但!它非常慢。所以此解决方案仅适用于快速测试。