为每个非空列创建新行

时间:2015-11-20 09:21:11

标签: google-apps-script google-sheets

我正在尝试将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);

但是我看不到为每个非空列创建一个循环来创建新行。

1 个答案:

答案 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,您可以从菜单'我的菜单' ....

中运行上述脚本。