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

如何编写Google Apps Script自动化导入手动下载的SquareSpace CSV至指定Google Sheets

自动导入SquareSpace CSV到Google Sheets的实现方案

下面提供两种实用的自动化方案,适配你手动下载CSV后的导入需求:


方案一:自动导入Google Drive指定文件夹的CSV

适合批量上传多个CSV到Drive后一键导入,避免逐个操作。

操作步骤

  1. 在Google Drive创建专门存放SquareSpace CSV的文件夹,复制文件夹ID(URL中folders/后的一串字符)
  2. 打开目标Google Sheets,点击「扩展程序」→「Apps Script」进入脚本编辑器
  3. 替换下方代码的配置参数,保存并运行

代码实现

function importSquareSpaceCSVs() {
  // 配置参数,根据你的需求修改
  const FOLDER_ID = "你的Drive文件夹ID";
  const TARGET_SHEET_NAME = "目标工作表名称";
  const CLEAR_EXISTING_DATA = false; // true=清空现有数据,false=追加数据
  const ARCHIVE_FOLDER_ID = ""; // 可选:导入后将文件移至归档文件夹的ID,留空则不归档

  // 获取目标工作表
  const targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(TARGET_SHEET_NAME);
  if (!targetSheet) throw new Error(`未找到工作表:${TARGET_SHEET_NAME}`);

  // 获取CSV文件夹及文件
  const folder = DriveApp.getFolderById(FOLDER_ID);
  const csvFiles = folder.getFilesByType(MimeType.CSV);

  // 遍历处理每个CSV
  while (csvFiles.hasNext()) {
    const file = csvFiles.next();
    const csvContent = file.getBlob().getDataAsString('UTF-8');
    const csvData = Utilities.parseCsv(csvContent);

    // 处理表头:追加模式下跳过重复表头
    let importData = csvData;
    if (!CLEAR_EXISTING_DATA && targetSheet.getLastRow() > 0) {
      importData = csvData.slice(1);
    }

    // 写入数据到目标表
    if (importData.length > 0) {
      if (CLEAR_EXISTING_DATA) {
        targetSheet.clearContents();
        targetSheet.getRange(1, 1, importData.length, importData[0].length).setValues(importData);
        CLEAR_EXISTING_DATA = false; // 仅清空一次
      } else {
        const startRow = targetSheet.getLastRow() + 1;
        targetSheet.getRange(startRow, 1, importData.length, importData[0].length).setValues(importData);
      }
    }

    // 归档文件(可选)
    if (ARCHIVE_FOLDER_ID) {
      const archiveFolder = DriveApp.getFolderById(ARCHIVE_FOLDER_ID);
      file.moveTo(archiveFolder);
    }
  }

  SpreadsheetApp.getUi().alert("所有CSV导入完成!");
}

// 添加自定义菜单,方便日常运行
function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('SquareSpace CSV工具')
    .addItem('批量导入Drive中的CSV', 'importSquareSpaceCSVs')
    .addToUi();
}

方案二:直接上传本地CSV导入

适合下载单个CSV后直接导入,无需中转到Google Drive。

操作步骤

  1. 打开目标Google Sheets,进入「扩展程序」→「Apps Script」
  2. 粘贴下方代码,修改目标工作表名称,保存并运行一次onOpen函数
  3. 刷新Sheets,顶部会出现自定义菜单,点击即可上传本地CSV

代码实现

function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('SquareSpace CSV工具')
    .addItem('上传本地CSV导入', 'showUploadDialog')
    .addToUi();
}

function showUploadDialog() {
  const dialogHtml = HtmlService.createHtmlOutput(`
    <style>
      .container { padding: 20px; font-family: sans-serif; }
      .file-input { margin: 10px 0; padding: 8px; width: 100%; box-sizing: border-box; }
      .upload-btn { padding: 8px 16px; background: #1a73e8; color: white; border: none; border-radius: 4px; cursor: pointer; }
      .upload-btn:hover { background: #1557b0; }
    </style>
    <div class="container">
      <input type="file" class="file-input" id="csvFile" accept=".csv">
      <button class="upload-btn" onclick="handleUpload()">上传并导入</button>
    </div>
    <script>
      function handleUpload() {
        const file = document.getElementById('csvFile').files[0];
        if (!file) {
          alert('请选择一个CSV文件');
          return;
        }
        const reader = new FileReader();
        reader.onload = e => {
          google.script.run
            .withSuccessHandler(() => {
              alert('导入成功!');
              document.getElementById('csvFile').value = '';
            })
            .withFailureHandler(err => alert('导入失败:' + err.message))
            .processLocalCSV(e.target.result);
        };
        reader.readAsText(file, 'UTF-8');
      }
    </script>
  `).setWidth(320).setHeight(140);

  SpreadsheetApp.getUi().showModalDialog(dialogHtml, '上传SquareSpace CSV');
}

function processLocalCSV(csvContent) {
  // 配置参数
  const TARGET_SHEET_NAME = "目标工作表名称";
  const CLEAR_EXISTING_DATA = false;

  const targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(TARGET_SHEET_NAME);
  if (!targetSheet) throw new Error(`未找到工作表:${TARGET_SHEET_NAME}`);

  const csvData = Utilities.parseCsv(csvContent);
  let importData = csvData;

  // 追加模式下跳过表头
  if (!CLEAR_EXISTING_DATA && targetSheet.getLastRow() > 0) {
    importData = csvData.slice(1);
  }

  // 写入数据
  if (importData.length > 0) {
    if (CLEAR_EXISTING_DATA) {
      targetSheet.clearContents();
      targetSheet.getRange(1, 1, importData.length, importData[0].length).setValues(importData);
    } else {
      const startRow = targetSheet.getLastRow() + 1;
      targetSheet.getRange(startRow, 1, importData.length, importData[0].length).setValues(importData);
    }
  }
}

注意事项

  • 首次运行脚本需授权:Google会提示脚本未验证,选择「高级」→「继续访问」即可完成授权
  • 若CSV存在编码问题(如乱码),可在getDataAsString或readAsText中指定编码(如GBK)
  • 若不同CSV表头不一致,需修改代码中的表头处理逻辑,或统一SquareSpace导出的CSV格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 08:43:13