Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 需要有关google advance services的帮助:Drive.Files.Update_Google Apps Script_Google Drive Api - Fatal编程技术网

Google apps script 需要有关google advance services的帮助:Drive.Files.Update

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的内容不是静态的(每天都会更改)。所以每天我都想运行一个脚本来更新

我正在将ERP中的xlsx文件放入google驱动器文件夹(通过将它们放入“PC驱动器”应用程序文件夹)。 我希望他们提供一个主谷歌表,使一些图纸和动态表的信息从这些文件。在这个主控表中,我使用函数
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);
  }
}