如何编写Google Apps Script自动化导入手动下载的SquareSpace CSV至指定Google Sheets
自动导入SquareSpace CSV到Google Sheets的实现方案
下面提供两种实用的自动化方案,适配你手动下载CSV后的导入需求:
方案一:自动导入Google Drive指定文件夹的CSV
适合批量上传多个CSV到Drive后一键导入,避免逐个操作。
操作步骤
- 在Google Drive创建专门存放SquareSpace CSV的文件夹,复制文件夹ID(URL中
folders/后的一串字符) - 打开目标Google Sheets,点击「扩展程序」→「Apps Script」进入脚本编辑器
- 替换下方代码的配置参数,保存并运行
代码实现
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。
操作步骤
- 打开目标Google Sheets,进入「扩展程序」→「Apps Script」
- 粘贴下方代码,修改目标工作表名称,保存并运行一次
onOpen函数 - 刷新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
相关产品推荐
相关产品推荐

