如何通过触发器用App Script自动上传Google Sheet至FTP服务器
可以通过App Script+触发器自动将Google Sheet上传至FileZilla FTP服务器
完全可以实现这个需求,以下是具体的操作步骤和代码示例:
1. 确认FTP服务器配置
确保你的FileZilla FTP服务器已经完成以下配置:
- 开启FTP服务(默认端口21),若使用SFTP则开启22端口
- 创建具备读写权限的FTP账号
- 服务器允许外部公网访问(本地服务器需完成端口映射)
2. 打开Google Sheet的App Script编辑器
打开目标Google Sheet,点击顶部菜单「扩展程序」→「Apps Script」,进入脚本编辑界面。
3. 添加FTP操作库并编写上传代码
Google Apps Script没有原生FTP支持,我们可以使用第三方的FTPApp库简化操作:
- 在脚本编辑器中,点击「扩展」→「库」
- 输入库ID
1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw,点击「添加」,选择最新版本,设置标识符为FTPApp
粘贴以下代码,替换为你的FTP信息和导出设置:
function uploadSheetToFTP() { // 导出Google Sheet为Excel文件(可改为CSV格式) const sheet = SpreadsheetApp.getActiveSpreadsheet(); const exportUrl = `https://docs.google.com/spreadsheets/d/${sheet.getId()}/export?format=xlsx`; const fileBlob = UrlFetchApp.fetch(exportUrl, { headers: { 'Authorization': `Bearer ${ScriptApp.getOAuthToken()}` } }).getBlob().setName('Sheet_Backup.xlsx'); // FTP服务器配置 const ftpHost = '你的FTP服务器地址'; const ftpPort = 21; // SFTP请改为22 const ftpUser = 'FTP用户名'; const ftpPass = 'FTP密码'; const ftpTargetPath = '/'; // 上传到FTP根目录,子目录可写'/backup/' try { // 建立FTP连接并上传文件 const ftp = FTPApp.init(ftpHost, ftpPort, ftpUser, ftpPass); ftp.put(fileBlob, ftpTargetPath + fileBlob.getName()); ftp.close(); console.log('文件上传成功'); } catch (err) { console.error('上传失败:', err.message); } }
如果需要导出CSV格式,将exportUrl修改为:
const exportUrl = `https://docs.google.com/spreadsheets/d/${sheet.getId()}/export?format=csv&gid=0`;
其中gid=0对应第一个工作表,可按需修改为目标工作表的ID。
4. 设置自动触发任务
- 在脚本编辑器左侧点击「触发器」图标(时钟样式)
- 点击「添加触发器」,配置参数:
- 选择函数:
uploadSheetToFTP - 事件源:「时间驱动」
- 时间类型:根据需求选择(比如「日计时器」→「每天02:00」)
- 选择函数:
- 保存时按照提示完成授权,遇到“未验证应用”提示时,点击「高级」→「转到脚本(不安全)」即可完成授权
注意事项
- 若FTP服务器在本地,需确保路由器已完成端口映射,且公网IP可正常访问
- 明文FTP传输存在安全风险,建议优先使用SFTP加密传输
- 授权时需确保脚本拥有访问Google Sheet和外部网络的权限
内容的提问来源于stack exchange,提问作者Alejandro Moyano Gonzalez
相关产品推荐
相关产品推荐

