You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动将源文件工作表的每行转置到目标文件工作表?

实现Google Sheets横向数据自动转置为纵向列的方案

同一文件内自动转置(无需手动下拉公式)

如果源数据和目标区域在同一个表格里,用数组公式可以一次性处理所有行,新增数据也会自动更新:

  • 若要把源表Sheet1中B3:H的所有横向行,统一转置成目标表的纵向单列(从B3开始),用公式:

    =ArrayFormula(FLATTEN(TRANSPOSE(Sheet1!B3:H)))
    

    TRANSPOSE先把整个源区域转置,FLATTEN将转置后的二维数组拆成连续的纵向列,自动覆盖所有行的转置结果。

  • 若要让源表每行的转置结果对应到目标表的固定纵向块(比如源第3行转B3-B9,源第4行转B10-B16),用公式:

    =ArrayFormula(IFERROR(VLOOKUP(ROW(B3:B), {SEQUENCE(ROWS(Sheet1!B3:H),1,3)*7-18, FLATTEN(TRANSPOSE(Sheet1!B3:H))},2,FALSE)))
    

    这里通过SEQUENCE计算每行转置后的起始行号,配合VLOOKUP让目标行号匹配对应转置数据。

跨文件自动转置(结合IMPORTRANGE)

如果源数据在另一个文件,先确保已授权IMPORTRANGE访问源文件,再用数组公式批量拉取并转置:

=ArrayFormula(FLATTEN(TRANSPOSE(IMPORTRANGE("你的源文件ID", "Sheet1!B3:H"))))

源文件新增行后,目标文件会自动同步并转置成纵向列,无需手动调整公式。

用Google Apps Script实现全自动化(适合复杂逻辑)

如果需要定时同步或自定义转置规则,写个脚本就能完全自动化:

function autoTranspose() {
  // 替换成你的源文件和目标文件ID
  const sourceFileId = "xxxxxxxxx";
  const targetFileId = "yyyyyyyyy";
  
  const sourceSheet = SpreadsheetApp.openById(sourceFileId).getSheetByName("Sheet1");
  const targetSheet = SpreadsheetApp.openById(targetFileId).getSheetByName("Sheet1");
  
  // 获取源表B3到最后一行的H列数据
  const sourceData = sourceSheet.getRange("B3:H" + sourceSheet.getLastRow()).getValues();
  
  let targetStartRow = 3; // 从目标表B3开始写入
  sourceData.forEach(row => {
    // 转置当前行并写入目标列
    const transposed = row.map(cell => [cell]);
    targetSheet.getRange(targetStartRow, 2, transposed.length, 1).setValues(transposed);
    targetStartRow += row.length; // 下一行转置结果接在当前块后面
  });
}

写完脚本后,设置触发器(比如每天定时运行,或源文件编辑时触发),就能实现无人值守的自动转置。

内容的提问来源于stack exchange,提问作者Just Fair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 04:57:18