如何通过Google API与Node.js获取Google表格关联的Apps Script ID或关联已有脚本至新建表格
如何通过Google API与Node.js获取Google表格关联的Apps Script ID或关联已有脚本至新建表格
嘿,我来帮你捋清楚这个问题!之前我做类似需求的时候也踩过坑,Google Sheets API本身确实没法直接拿关联的脚本ID,绑定已有脚本的文档也藏得比较深,下面分两种场景给你具体的实现方法:
一、获取新建Google表格关联的Apps Script ID
刚创建的表格默认是没有绑定Apps Script项目的,如果你想拿到它的脚本ID,得借助Drive API(因为表格和它的绑定脚本本质是Drive中的关联文件)。具体步骤是:
- 先用Sheets API创建新表格;
- 再调用Drive API的
files.get方法,获取表格的appProperties字段,里面的scriptId就是关联的脚本ID(如果已经生成的话)。
下面是Node.js的代码示例(假设你已经完成了Google API的认证,拿到了auth对象):
const { google } = require('googleapis'); // 初始化API客户端 const drive = google.drive({ version: 'v3', auth }); const sheets = google.sheets({ version: 'v4', auth }); async function getNewSheetScriptId() { // 1. 创建新表格 const newSheetResponse = await sheets.spreadsheets.create({ resource: { properties: { title: '我的测试表格' } } }); const sheetId = newSheetResponse.data.spreadsheetId; console.log('新建表格ID:', sheetId); // 2. 通过Drive API获取关联脚本ID const driveFile = await drive.files.get({ fileId: sheetId, fields: 'appProperties' }); const scriptId = driveFile.data.appProperties?.scriptId; if (scriptId) { console.log('表格关联的脚本ID:', scriptId); } else { console.log('注意:刚创建的表格默认没有绑定脚本,此时会返回undefined。你可以手动打开表格的脚本编辑器触发生成,或者直接用下面的方法关联已有脚本'); } } // 执行函数 getNewSheetScriptId().catch(err => console.error('出错了:', err));
二、将已有Apps Script文件关联到新建表格
要把已有的独立脚本绑定到新表格,需要两步操作:
- 修改已有脚本的父文件为新建表格(让脚本成为表格的绑定项目);
- 更新表格的
appProperties,把已有脚本的ID写入其中,完成双向关联。
同样用Drive API实现,代码示例如下:
async function linkExistingScriptToNewSheet(existingScriptId, newSheetId) { try { // 1. 将已有脚本的父目录设置为新建表格 await drive.files.update({ fileId: existingScriptId, addParents: newSheetId, // 如果脚本之前是独立项目,removeParents留空即可;如果之前绑定过其他文件,需要填写旧的父ID removeParents: '', fields: 'id,parents' }); // 2. 更新表格的appProperties,写入脚本ID await drive.files.update({ fileId: newSheetId, resource: { appProperties: { scriptId: existingScriptId } }, fields: 'appProperties' }); console.log('已有脚本成功关联到新建表格!'); } catch (err) { console.error('关联失败:', err); } } // 使用示例:替换成你的已有脚本ID和新建表格ID // linkExistingScriptToNewSheet('你的脚本ID', '你的表格ID').catch(err => console.error(err));
注意:绑定后,这个脚本就变成了表格的专属绑定脚本,无法再绑定到其他表格,且只有打开该表格的脚本编辑器才能看到它。
三、给关联的脚本注入自定义代码
如果需要给脚本注入自定义代码,可以用Apps Script API的projects.updateContent方法,直接上传代码内容。示例如下:
const scriptApi = google.script({ version: 'v1', auth }); async function injectCodeToScript(scriptId) { // 自定义脚本代码 const customCode = `function sayHello() { SpreadsheetApp.getActiveSpreadsheet().toast('Hello from injected code!', '提示'); }`; try { await scriptApi.projects.updateContent({ scriptId: scriptId, resource: { files: [ { name: 'Code', // 脚本的默认文件名,也可以自定义 type: 'SERVER_JS', source: customCode } ] } }); console.log('自定义代码已成功注入脚本!'); } catch (err) { console.error('注入代码失败:', err); } }
备注:内容来源于stack exchange,提问作者Soza
相关产品推荐
相关产品推荐

