You need to enable JavaScript to run this app. 如何按ID将CSV指定列数据导入到Google Sheet指定工作表
优惠活动
大模型
产品
解决方案
定价
更多

如何按ID将CSV指定列数据导入到Google Sheet指定工作表

实现方案

完全可以实现,直接用Google Sheet自带的Apps Script即可完成,无需第三方工具。

前置准备

  • 把需要导入的CSV文件上传到你的Google Drive
  • 记录下CSV文件的ID(打开Drive里的CSV,URL中d/和/edit之间的字符串就是文件ID)
  • 提前确认好对应列的映射关系:CSV中要导入的列对应目标Google Sheet的哪一列,以及两边ID列的列名

可用脚本

打开你的目标Google Sheet,点击顶部菜单「扩展程序」>「Apps Script」,替换默认代码为以下内容:

function syncCsvColumnsToSheet() {
  // -------------------------- 以下为需要你修改的配置项 --------------------------
  const CSV_FILE_ID = "替换为你的CSV文件ID";
  const TARGET_SHEET_NAME = "替换为目标工作表名称,比如Sheet1";
  const CSV_ID_COLUMN_NAME = "替换为CSV里ID列的列名,比如user_id";
  const SHEET_ID_COLUMN_NAME = "替换为Google Sheet里ID列的列名,比如用户ID";
  // 列映射:左边填CSV里的列名,右边填要同步到Google Sheet的列名,可加多个
  const COLUMN_MAPPING = {
    "CSV里的列名1": "Sheet里的列名1",
    "CSV里的列名2": "Sheet里的列名2"
  };
  // -------------------------- 配置项修改结束 --------------------------

  // 读取并解析CSV文件
  const csvFile = DriveApp.getFileById(CSV_FILE_ID);
  const csvContent = csvFile.getBlob().getDataAsString();
  const csvRows = Utilities.parseCsv(csvContent);
  const csvHeaders = csvRows[0].map(h => h.trim());
  const csvIdIndex = csvHeaders.indexOf(CSV_ID_COLUMN_NAME);
  const csvColumnIndexes = {};
  Object.keys(COLUMN_MAPPING).forEach(csvCol => {
    csvColumnIndexes[csvCol] = csvHeaders.indexOf(csvCol);
  });

  // 把CSV数据转为ID为键的对象,方便快速匹配
  const csvDataMap = {};
  csvRows.slice(1).forEach(row => {
    const id = row[csvIdIndex]?.trim();
    if (!id) return;
    csvDataMap[id] = row;
  });

  // 读取目标Sheet数据
  const targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(TARGET_SHEET_NAME);
  const sheetData = targetSheet.getDataRange().getValues();
  const sheetHeaders = sheetData[0].map(h => h.trim());
  const sheetIdIndex = sheetHeaders.indexOf(SHEET_ID_COLUMN_NAME);
  const sheetColumnIndexes = {};
  Object.values(COLUMN_MAPPING).forEach(sheetCol => {
    sheetColumnIndexes[sheetCol] = sheetHeaders.indexOf(sheetCol);
  });

  // 匹配ID并填充数据
  const updatedData = sheetData.map((row, rowIndex) => {
    if (rowIndex === 0) return row; // 跳过表头
    const id = row[sheetIdIndex]?.trim();
    if (!id || !csvDataMap[id]) return row;
    Object.entries(COLUMN_MAPPING).forEach(([csvCol, sheetCol]) => {
      const csvVal = csvDataMap[id][csvColumnIndexes[csvCol]];
      row[sheetColumnIndexes[sheetCol]] = csvVal;
    });
    return row;
  });

  // 把更新后的数据写回Sheet
  targetSheet.getRange(1, 1, updatedData.length, updatedData[0].length).setValues(updatedData);
}

使用说明

  • 所有配置项都要按照你实际的文件和表结构修改,列名要完全匹配,大小写、空格都会影响识别
  • 第一次运行时会提示授权,按照提示点击允许即可
  • 如果CSV用的不是逗号分隔,可以在Utilities.parseCsv的第二个参数指定分隔符,比如Utilities.parseCsv(csvContent, '\t')就是用制表符分隔
  • 如果ID列存在重复值,脚本会默认用CSV里最后一个出现的同ID行数据填充

内容的提问来源于stack exchange,提问作者Maksym Katsovets

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 18:39:03