将源文件表的每一行转置到每个目标文件表

问题描述 投票:0回答:1

我正在尝试将每一行(如 row2 B2:H2)转置为目标 file1 工作表的列:B2-B9。以下是公开的示例文件:https://docs.google.com/spreadsheets/d/1ptQpnUhW_Bvs637pTfPTV7VMsBaDP-XudEasjo2vCaY/edit?gid=0#gid=0

已经尝试过 =Arrayformula(Transpose(IMPORTRANGE("xxxxxxxxxx", "Sheet!B3:H3"))) 和 Transpose 公式:=transpose(Sheet!B3:H3)。两人都在工作。但是,我想自动化它。

google-sheets google-apps-script
1个回答
0
投票

使用 Apps 脚本将值转换到不同的工作表

如果您尝试将值从一个电子表格传输到不同的电子表格,然后进行转置,恐怕很难使用 Google 表格来自动化此过程。

考虑到我的理解是正确的,您要做的是将源工作表的行数据传输并转置到位于 A 列上的每个目标电子表格。

要实现此目的,您可以将此代码粘贴到连接到您通过帖子共享的 Google 表格源文件的 Google Apps 脚本中。

完整代码:

function updateSheets() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet');
  const data = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getDisplayValues();
  const richTextValues = sheet.getDataRange().getRichTextValues(); 

  data.slice(2).map((row, index) => {
    const titleCell = richTextValues[index + 2][0]; 
    const url = titleCell.getLinkUrl() || row[0]; 

    if (url && url.includes('/d/') && url.includes('gid=')) {
      const fileId = url.split('/d/')[1].split('/')[0];
      const sheetId = url.split('gid=')[1].split('#')[0];

      const targetSheet = SpreadsheetApp.openById(fileId).getSheets().find(s => s.getSheetId() == sheetId);

      const rowData = row.slice(1); 
      const transposedData = rowData.map(value => [value]); 

      if (targetSheet) {
        targetSheet.getRange(2, 2, transposedData.length, 1).setValues(transposedData); 
      }

    } else {
      Logger.log("No valid URL found for row " + (index + 2));
    }
  });
}

示例输出:

enter image description here

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.