gpt4 book ai didi

javascript - Unpivot in Google Sheets - 多个标题列和行

转载 作者:行者123 更新时间:2023-11-30 12:03:08 24 4
gpt4 key购买 nike

我有一个包含大约 20 列和最多 100 行的汇总表,但我想将其转换为平面列表以便导入数据库。

This solution在我的情况下不能正常工作,我对 JS 的了解远远低于适当调整它的能力。

Example sheet 中有三个选项卡:

  1. 源数据——我目前拥有的虚拟数据
  2. 期望的结果——我想将源数据转换成什么
  3. What I Get - 使用 the solution 时得到的结果上面提到

工作表是共享的,因此您可以尝试测试脚本(菜单 > 脚本 > 运行)。它会自动创建一个新选项卡。

最佳答案

这是我在学习 JS 和谷歌搜索后得出的结论。如果有人可以建议如何让它更短/更清洁/更简单 - 我洗耳恭听。可能远非完美,但它确实满足了我的需要。

function transpose(){
var source = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('SOURCE DATA');
var ss = SpreadsheetApp.getActiveSpreadsheet();

var numColumns = source.getLastColumn();
var numRows = source.getLastRow();
Logger.log('numColumns = ' +numColumns);
Logger.log('numRows = ' +numRows);


//GET NUMBER OF HEADERS (PRODUCTS)

var products = []; // get product models in the first row
for (var b = 2; b <= numColumns; b++){
if (source.getRange(1, b).getValue() != "") {
products.push([source.getRange(1, b).getValue()]); //store
}
}


// PRODUCTS and SITES INTO COLUMNS

var output = [];

var sites = []; // get sites list
for (var a = 3; a <= numRows; a++){
if (source.getRange(a, 1).getValue() != "") {
sites.push([source.getRange(a, 1).getValue()]); //store
}
}

for(var p in products){
for(var s in sites){
var row = [];
row.push(sites[s]);
row.push(products[p]);
output.push(row);//collect data in separate rows in output array
}
}

var date = Utilities.formatDate(new Date(), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "M/d/yyyy");
Logger.log('Date = ' +date)
ss.insertSheet(date,0).getRange(1,1,output.length,output[0].length).setValues(output);

var newSheet = ss.getSheetByName(date);


// COPY REGIONS

var numProducts = products.length; // number of models
Logger.log('numProducts = ' +numProducts);

var i = 1;
var j = 3 // first column number to copy
do {
var colC = newSheet.getRange("C1:C").getValues();
var copyToCell = colC.filter(String).length+1;
Logger.log('copyTo R = ' +copyToCell);

source.getRange(3,2,numRows-2,1).copyTo(newSheet.getRange(copyToCell,3), {contentsOnly:true});
i++;

source.getRange(3,j,numRows-2,2).copyTo(newSheet.getRange(copyToCell,4), {contentsOnly:true});
j+=2;
}
while (i <= numProducts);
while (j < numColumns);


// SORT BY SITE AND PRODUCT

newSheet.getDataRange().sort([1, 2]);
}

关于javascript - Unpivot in Google Sheets - 多个标题列和行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36112210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com