【发布时间】:2020-07-22 23:21:50
【问题描述】:
我们有一个相对较大的数据集,在下面的“当前格式”中大约有 26K 行和 24 列。但是,我们正在尝试将其重新格式化为以下所需的格式。我认为我们可能需要 Transpose 和 Query 来实现这一点,但我们对任何实现它的方法持开放态度。
任何关于如何重新格式化的建议将不胜感激。
【问题讨论】:
标签: google-sheets google-sheets-formula array-formulas transpose
我们有一个相对较大的数据集,在下面的“当前格式”中大约有 26K 行和 24 列。但是,我们正在尝试将其重新格式化为以下所需的格式。我认为我们可能需要 Transpose 和 Query 来实现这一点,但我们对任何实现它的方法持开放态度。
任何关于如何重新格式化的建议将不胜感激。
【问题讨论】:
标签: google-sheets google-sheets-formula array-formulas transpose
JAK,需要处理大量数据。并且在不访问实际工作表和数据的情况下尝试编写公式总是很困难。也就是说,SPLIT/JOIN 组合会超出字符数限制。但理论上,以下公式可以工作(假设您的实际数据是您的示例的扩展并且从 A1:Y 运行。
=ArrayFormula({"ID","Value","Qty"; QUERY({VLOOKUP(MOD(SEQUENCE(COUNTA(A:A)*COUNTA(A1:Y1),1)-1,COUNTA(A:A))+2,{ROW(A:A),A:A},2),HLOOKUP(ROUNDUP(SEQUENCE(COUNTA(A:A)*COUNTA(A1:Y1),1)/COUNTA(A:A))+1,{COLUMN(A1:Y1);A1:Y1},2),
VLOOKUP(MOD(SEQUENCE(COUNTA(A:A)*COUNTA(A1:Y1),1,2)-2,COUNTA(A:A))+2,{ROW(A2:A),B2:Y},ROUNDUP(SEQUENCE(COUNTA(A:A)*COUNTA(A1:Y1),1)/COUNTA(A:A))+1)
},"SELECT Col1, Col2, Col3 WHERE Col3 IS NOT NULL ORDER BY Col1 Asc")})
如果您想在单独的工作表中进行设置,则需要编辑整个公式的每个范围,以包含原始数据所在工作表的名称。
更多关于这个公式的基础和解释:https://www.benlcollins.com/spreadsheets/unpivot-in-google-sheets
【讨论】:
【讨论】:
您可以尝试以 .csv 格式下载表格并编写一个程序来读取数据并进行必要的更改,但不确定您是否熟悉编程...有几种语言可以用来实现这一点,我已经在 C 中做过类似的事情。它不是很难。 您可以打开文件、读取数据、处理更改并保存在另一个 .csv 中。请记住,csv 文件只是一个用逗号分隔的 .txt 文件。
int main(int argc, char** argv) {
FILE *file;
FILE *file2;
char Linha[100];
char *result;
int i;
file = fopen("YourSheet.csv", "rt");
file2 = fopen("YourNewSheet.csv", "w");
i = 1;
while (!feof(file))
{
// reads a line
result = fgets(Linha, 100, file);
if (result)
fprintf(file2, "%s", result);
i++;
}
fclose(file);
fclose(file2);
return 0;
}
【讨论】:
原来可以这么简单,我们也可以使用google查询SQL功能:
Excel表格:
A B
1 Qty | 200
2 Stock | QUESS
3 Start | 8/24/2019
4 End | 8/23/2020
5 Today | 8/23/2021
公式:
=query(Transpose(Sheet6!A1:B5),"select *" )
输出:
Qty | Stock | Start | End | Today
200 | QUESS | 8/24/2019 | 8/23/2020 | 8/23/2021
【讨论】: