Google Spreadsheets将Matrix数据转换为关系行

时间:2014-10-22 14:12:38

标签: google-apps-script google-sheets

我的Google电子表格数据采用矩阵形式,带有“漏洞”。见https://docs.google.com/spreadsheet/ccc?key=0Ati5T34RP9mEdGJfcUFzVDV4elZIbExkTGM4aktQT2c&usp=drive_web#gid=0

我想从上面的数据创建另一张表格,看起来就像我在https://docs.google.com/spreadsheet/ccc?key=0Ati5T34RP9mEdGJfcUFzVDV4elZIbExkTGM4aktQT2c&usp=drive_web#gid=3中手动完成的那样

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这应该适用于Sheets的最新版本:

=ArrayFormula(QUERY(VLOOKUP(HLOOKUP('Table Chart'!A2,'Table Chart'!A2:A,INT((ROW('Table Chart'!A2:A)-ROW('Table Chart'!A2))/COLUMNS('Table Chart'!B1:G1))+1,0),{'Table Chart'!A2:G,IF(ROW('Table Chart'!A2:A),'Table Chart'!B1:G1)},{SIGN(ROW('Table Chart'!A2:A)),MOD(ROW('Table Chart'!A2:A)-ROW('Table Chart'!A2),COLUMNS('Table Chart'!B1:G1))+{2,2+COLUMNS('Table Chart'!B1:G1)}},0),"select Col1, Col3, Col2 where Col2 is not null",0))


为了完整起见,这将适用于以前的版本,但日期将转换为文本字符串;它们可以转换成数值,但公式会变得更长:

=ArrayFormula(REGEXREPLACE(TRANSPOSE(SPLIT(CONCATENATE(REPT('Table Chart'!A2:A&CHAR(9)&'Table Chart'!B1:G1&CHAR(9)&TEXT('Table Chart'!B2:G,"d-MMM-yyyy")&CHAR(10),LEN('Table Chart'!B2:G)>0)),CHAR(10))),"^(.+?)\t(.+?)\t(.+)$",{"$1","$2","$3"}))


Google Apps脚本会为您提供一次"运行一次"虽然可以调用上述公式然后只转换为值,但是比一直重新计算的公式更好(IMO)的解决方案。但是,您可能需要它们动态更新。

如果您需要GAS解决方案,可以添加google-apps-script标记以邀请其他答案。

答案 1 :(得分:0)

删除范围 A2:C 并将此公式粘贴到 A2 单元格中:

=ARRAYFORMULA(SORT(SPLIT(TRANSPOSE(SPLIT(TRIM(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
 IF('Basic Matrix'!B2:H<>"", "♀"&
 SUBSTITUTE('Basic Matrix'!A2:A, "Indian Randonneurs", "IR")&"♂"&
 SUBSTITUTE('Basic Matrix'!B1:H1, "IR-", )&"♂"&'Basic Matrix'!B2:H, ))
 ,,999^99)),,999^99)), "♀")), "♂"), 3, 1))

0

注意:根据需要通过 123 按钮内部设置B:C格式)