我正在尝试将Excel宏转换为Google Apps脚本。我想在Google Spreadsheets中的每个非空列的特定工作表上创建一个新行。
我的Inputsheet
如下所示:
ID | Inrellevant Column | Givenmoney | Takenmoney | Othermoney
1 | Data1 | 100 | 200 | 300
2 | Data2 | 400 | | 500
我想在另一个工作表中为每个非空单元格创建一个新行,因此所需的Outputsheet
将是:
ID | Inrellevant Column | Moneycode | Amount
1 | Data1 | Givenmoney | 100
1 | Data1 | Takenmoney | 200
1 | Data1 | Othermoney | 300
2 | Data2 | Givenmoney | 400
2 | Data2 | Othermoney | 500
我尝试了以下内容:
Outputsheet.getRange('A2').offset(0, 0, Inputsheet.length).setValues(Inputsheet);
但是我看不到为每个非空列创建一个循环来创建新行。
答案 0 :(得分:0)
Hoi Fred,假设您希望输出显示在工作表'输出表格中的左上角单元格中,请尝试以下代码:
function myFunction() {
var ss = SpreadsheetApp.getActive(),
source = ss.getSheetByName('Inputsheet'),
target = ss.getSheetByName('Outputsheet'),
arr = [
["ID", "Header 2nd col", "Moneycode", "Amount"]
],
data = source.getDataRange().getValues(),
headers = data[0];
data.splice(1)
.forEach(function (r) {
r.forEach(function (c, i) {
if (!isNaN(parseFloat(c)) && isFinite(c) && i > 1) {
arr.push([r[0], r[1], headers[i], c])
}
})
})
target.getRange(1, 1, arr.length, arr[0].length).setValues(arr);
}
请参阅此example sheet,您可以从菜单'我的菜单' ....
中运行上述脚本。