如何将Salesforce数据导出并按日堆叠存储到Google Sheet不覆盖旧数据
Salesforce数据每日自动追加同步Google Sheet解决方案
方案一:无代码适配方案(无需修改现有插件配置)
- 拆分工作表结构:新建2个独立工作表,分别命名为
每日临时导出表、历史累计数据表 - 保持原有Data connector for Salesforce插件的配置不变,设置导出目标为
每日临时导出表,允许插件每次刷新覆盖该表内容 - 提前在
历史累计数据表第一行粘贴和导出数据完全一致的表头,后续固定不动 - 使用Google Sheet宏录制功能录制「复制临时表非表头数据→粘贴到累计表最后一行下方」的操作,之后设置宏每日自动运行,运行时间晚于插件每日导出时间15分钟即可
方案二:低代码快速配置方案(复制即可用,无需编程基础)
该方案稳定性更高,配置一次可长期使用:
- 打开目标Google Sheet,点击顶部菜单栏「扩展程序」→「Apps 脚本」,打开脚本编辑器后删除默认生成的所有代码
- 复制下方现成代码粘贴到编辑器中,仅需要修改前3行的参数适配你自己的表格即可:
function appendSalesforceData() { // 仅修改下方3个参数即可,无需改动其他代码 const TEMP_SHEET_NAME = "每日临时导出表"; // 替换为你Salesforce插件导出的目标表名 const HISTORY_SHEET_NAME = "历史累计数据表"; // 替换为你存储历史数据的表名 const HEADER_ROW_COUNT = 1; // 如果导出数据的表头占N行就填N,常规场景为1 const ss = SpreadsheetApp.getActiveSpreadsheet(); const sourceSheet = ss.getSheetByName(TEMP_SHEET_NAME); const targetSheet = ss.getSheetByName(HISTORY_SHEET_NAME); // 提取临时表中除表头外的所有新数据 const sourceData = sourceSheet.getDataRange().getValues().slice(HEADER_ROW_COUNT); if(sourceData.length === 0) return; // 将新数据追加到历史表最后一行的下方 targetSheet.getRange(targetSheet.getLastRow() + 1, 1, sourceData.length, sourceData[0].length).setValues(sourceData); }
- 点击编辑器顶部的保存按钮,任意输入项目名(如「Salesforce数据同步」)
- 配置自动运行触发器:点击编辑器左侧的闹钟样式「触发器」按钮→右下角「添加触发器」,按如下规则配置:
- 选择要运行的函数:
appendSalesforceData - 选择事件来源:
时间驱动 - 选择时间类型:
日计时器 - 选择运行时间:设置为Salesforce插件每日自动导出时间的15分钟之后,确保插件先完成数据刷新再执行追加操作
保存时按提示完成Google账号授权即可,所有权限均为Google官方的表格读写权限,无安全风险
- 选择要运行的函数:
注意事项
- 两个工作表的表头字段、顺序必须完全一致,不要随意修改Salesforce导出的字段顺序,避免数据追加错位
- 如果需要给每日数据打日期标识,可以在临时导出表的最后一列数据行(非表头行)填入公式
=TODAY(),该字段会同步追加到历史表中,方便后续筛选不同日期的数据 - 首次配置前的历史数据可以手动粘贴到历史累计表的底部,不会影响后续自动追加逻辑
- 第一次授权触发器时如果弹出「Google未验证此应用」的提示,点击「高级」→「继续访问(你的项目名)」即可,这是个人开发脚本的正常提示
内容的提问来源于stack exchange,提问作者Vience Caiña
相关产品推荐
相关产品推荐

