在R中,data.table库dcast()可以将数据集从宽变换为长形,我如何在googlespreadsheet中执行此操作?
工作表Sheet1
Name Type YTD JAN FEB MAR
Product 1 A 8 1 3 4
Product 2 B 519 41 23 455
Product 3 C 32 2 25 5
NA D 3 NA 2 1
Sheet2 A B C D E F 1名称类型YTD JAN FEB MAR 2 =过滤器(Sheet1!A2:F5,不是(isblank(Sheet1!A2:A5)))
从A1中显示Sheet3中的重新整形数据
[
**不一定需要YTD的C列。
由我调整的剧本不起作用:来自Tanaike
function myFunction() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
var values = sheet.getRange(1,1,sheet.getLastRow(),sheet.getLastColumn()).getValues(); // Retrieve values
var Result_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
var result = [];
for (var i = 1; i < values.length; i++) {
for (var j = 1; j < values[i].length; j++) {
result.push([values[0][i], values[j][0], values[j][i]]);
}
}
Result_sheet.getRange().setValues(result); // Put result
}
我太新了java脚本,无法分辨原因。
好的,所以根据我的理解,您想要获取第一个表,删除空白产品,然后解压缩。
tnaike的脚本不适合你的原因是你有两个领导者专栏(产品和类型),而不仅仅是一个。这似乎可以正确调整一切。
function myFunction() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
var values = sheet.getDataRange().getValues(); // Retrieve values
var Result_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
var result = [];
result.push(["Name","Type","Month","QTY"]);
for (var i = 1; i < values.length; i++) {
for (var j = 1; j < values[i].length; j++) {
if (values[j][0].length < 1) continue;
if (values[0][i].length < 1) continue;
result.push([ values[j][0],values[j][1], values[0][i], values[j][i]]);
}
}
Result_sheet.getRange(1,1,result.length, result[0].length).setValues(result); // Put result
Result_sheet.sort(1);
}
这导致:
Name/Type/Month/QTY
P1 A Ja 1
P1 A Fe 3
P1 A Ma 4
P2 B Ja 41
P2 B Fe 23
P2 B Ma 455
P3 C Ja 2
P3 C Fe 25
P3 C Ma 5