我在github上找到的谷歌脚本有点麻烦。 原始代码:https://github.com/Elijas/auto-youtube-subscription-playlist-2
此脚本的作用:
您将在youtube上订阅的频道ID添加到Google电子表格,并将其引用到您希望添加新视频的播放列表ID:
我的问题是什么:
只要我打开电子表格并执行" updatePlaylists"脚本本身就可以正常工作。手动功能。
但是,只要我添加时间驱动的触发器(或尝试在脚本编辑器中执行该功能),脚本就会一直失败:
TypeError: Cannot call method "toString" of undefined.
但我找到了一个"修复"对于互联网上的特定错误。所以我将此特定代码行更改为:
if (typeof sheet === 'undefined') sheet = SpreadsheetApp.openById('MY_GOOGLE_SHEET_ID').getSheets
但现在我收到以下错误:
"TypeError: Cannot find function getDataRange in object [object Object]. (Row 18, File "Code")"
这将是代码的这一部分:
Cannot find function getDataRange in object [object Object]
由于脚本似乎有效,只要我在电子表格中执行它,我想它必须与“表格”有关。脚本中的变量。但由于我对谷歌的脚本语言并不熟悉,所以我真的希望有人可以帮我解决这个问题。
任何想法都会受到高度赞赏:)
编辑:根据Chris的要求,我将在此处发布部分代码。我只是不想粘贴整个脚本,因为它很大。我希望这就够了。如果没有,您可以从here下载整个脚本。
function updatePlaylists(sheet) {
if (typeof sheet === 'undefined') sheet = SpreadsheetApp.openById('1Jj1Sx0mvfCKfYFcfX4karP9ztPgkyURj3pBvOExsljQ').getSheets()[0]; // Hotfix, Paste the Sheet ID here, it's the long string in the Sheet URL
var data = sheet.getDataRange().getValues();
var reservedTableRows = 3; // Start of the range of the PlaylistID+ChannelID data
var reservedTableColumns = 2; // Start of the range of the ChannelID data
var reservedTimestampCell = "F1";
//if (!sheet.getRange(reservedTimestampCell).getValue()) sheet.getRange(reservedTimestampCell).setValue(ISODateString(new Date()));
if (!sheet.getRange(reservedTimestampCell).getValue()) {
var date = new Date();
date.setHours(date.getHours() - 24); // Subscriptions added starting with the last day
var isodate = date.toISOString();
sheet.getRange(reservedTimestampCell).setValue(isodate);
}
答案 0 :(得分:1)
感谢剧本的原始创作者普罗米修斯的回复,我终于能够解决问题了。 显然,“updatePlaylists”功能已由github上的贡献者编辑。
每个遇到同样问题的人都会这样做:
只需将Code.gs中的“updatePlalists”函数替换为原始版本:
function updatePlaylists() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var data = sheet.getDataRange().getValues();
var reservedTableRows = 3; // Start of the range of the PlaylistID+ChannelID data
var reservedTableColumns = 2; // Start of the range of the ChannelID data
var reservedTimestampCell = "F1";
//if (!sheet.getRange(reservedTimestampCell).getValue()) sheet.getRange(reservedTimestampCell).setValue(ISODateString(new Date()));
if (!sheet.getRange(reservedTimestampCell).getValue()) {
var date = new Date();
date.setHours(date.getHours() - 24); // Subscriptions added starting with the last day
var isodate = date.toISOString();
sheet.getRange(reservedTimestampCell).setValue(isodate);
}