Google apps script 需要有关google advance services的帮助:Drive.Files.Update
我正在将ERP中的xlsx文件放入google驱动器文件夹(通过将它们放入“PC驱动器”应用程序文件夹)。 我希望他们提供一个主谷歌表,使一些图纸和动态表的信息从这些文件。在这个主控表中,我使用函数Google apps script 需要有关google advance services的帮助:Drive.Files.Update,google-apps-script,google-drive-api,Google Apps Script,Google Drive Api,我正在将ERP中的xlsx文件放入google驱动器文件夹(通过将它们放入“PC驱动器”应用程序文件夹)。 我希望他们提供一个主谷歌表,使一些图纸和动态表的信息从这些文件。在这个主控表中,我使用函数importrange(key sheet),因此我需要将源xlsx转换为gsheets文件 我发现这帮助我解决了第一个问题,“如何自动转换驱动器文件夹中的文件”: 这里的问题是,我需要更新转换后的Google工作表的内容,因为xlsx的内容不是静态的(每天都会更改)。所以每天我都想运行一个脚本来更新
importrange(key sheet)
,因此我需要将源xlsx转换为gsheets文件
我发现这帮助我解决了第一个问题,“如何自动转换驱动器文件夹中的文件”:
这里的问题是,我需要更新转换后的Google工作表的内容,因为xlsx的内容不是静态的(每天都会更改)。所以每天我都想运行一个脚本来更新以前生成的gsheets内容。我编写此脚本是为了尝试更新它们:
function pbafor() {
xlsx = DriveApp.getFolderById('folder_with_xlsx').getFiles();
gSheet = DriveApp.getFolderById('folder_with_gsheets_to_update').getFiles();
while (xlsx.hasNext()) {
var xBlob = xlsx.next().getBlob();
var archDestino = {
title: xlsx.next().getName(),
}
var idReemplazo = gSheet.next().getId();
nvo = Drive.Files.update(archDestino, idReemplazo, xBlob);
}
}
此脚本的问题在于,它仅使用\u gsheets\u to\u update文件夹更新文件夹的第一个元素
(注意:如果我尝试获取blob,var xBlob=xlsx.next().getBlob()
,如果文件是gsheet,则应用程序脚本将显示服务器错误。如果文件是xslx mimetype,则不存在此服务器错误。)您无法从应用程序脚本中更新非Google电子表格电子表格的内容。您需要将它们转换为谷歌电子表格格式,并使用应用程序脚本操作该表格。假设我得到了你的要求。嗨,谢谢你的回答,通过上面的脚本,我将xlsx文件转换为gsheets驱动器,然后我尝试使用此脚本更新生成文件夹的内容。(我用这个脚本刷新原始答案)如果我试图从谷歌工作表中获取blob数据,应用程序脚本会说服务器上有错误。但是如果我得到了xlsx的blob,脚本就可以正常工作。问题是脚本只更新目标文件夹上的第一个元素。pbafor
循环的一个问题是,在while循环的一次迭代中,通过调用xlsx.next()
两次,在xlsx
集合中加倍前进。另一种情况是,假设集合的顺序是相等的,此时您应该检查gsheets集合,直到找到与当前xslx文件匹配的文件(也许您可以将xlsx id和创建的gsheet id之间的关系存储在电子表格中,并与之进行比较?)。看起来您还有一些全局变量,例如nvo
?如果是这样,则在任何脚本执行之间都不会保留它们。您无法从应用程序脚本中更新非Google电子表格电子表格的内容。您需要将它们转换为谷歌电子表格格式,并使用应用程序脚本操作该表格。假设我得到了你的要求。嗨,谢谢你的回答,通过上面的脚本,我将xlsx文件转换为gsheets驱动器,然后我尝试使用此脚本更新生成文件夹的内容。(我用这个脚本刷新原始答案)如果我试图从谷歌工作表中获取blob数据,应用程序脚本会说服务器上有错误。但是如果我得到了xlsx的blob,脚本就可以正常工作。问题是脚本只更新目标文件夹上的第一个元素。pbafor
循环的一个问题是,在while循环的一次迭代中,通过调用xlsx.next()
两次,在xlsx
集合中加倍前进。另一种情况是,假设集合的顺序是相等的,此时您应该检查gsheets集合,直到找到与当前xslx文件匹配的文件(也许您可以将xlsx id和创建的gsheet id之间的关系存储在电子表格中,并与之进行比较?)。看起来您还有一些全局变量,例如nvo
?如果是这样,则在任何脚本执行之间都不会保留它们。
function pbafor() {
xlsx = DriveApp.getFolderById('folder_with_xlsx').getFiles();
gSheet = DriveApp.getFolderById('folder_with_gsheets_to_update').getFiles();
while (xlsx.hasNext()) {
var xBlob = xlsx.next().getBlob();
var archDestino = {
title: xlsx.next().getName(),
}
var idReemplazo = gSheet.next().getId();
nvo = Drive.Files.update(archDestino, idReemplazo, xBlob);
}
}