【问题标题】:Updating old formatted spreadsheets using a reformatted spreadsheet that takes the old values and duplicates them使用重新格式化的电子表格更新旧格式化的电子表格,该电子表格采用旧值并复制它们
【发布时间】:2019-04-26 23:35:55
【问题描述】:

代码已完成谢谢@TheMaster ✔

我是 google drive sdk 的绝对新手,对不起。

我正在尝试编写一个脚本,它允许许多与更新相同的工作表。通过源电子表格(使用新格式)。问题是在旧工作表中,值在那里,必须在新工作表“源电子表格”(具有新格式)中。然后一遍又一遍地用一张旧纸重复一遍。

我心中的脚本程序:

  • 转到许多工作表所在的文件夹
  • 打开第一张纸,然后总是下一张
  • 从区域(A1:A2;C1:C2)获取数据
  • 取床单的名字
  • 将它们复制到源电子表格中的数据中的同一位置
  • 复制源电子表格
  • 将源电子表格命名为旧工作表
  • 重命名并放在另一个文件夹中

我会在力所能及的地方提供帮助。

当前代码

function UPDATE() {
  //LEGEND: o=Old, ss=SpreadSheet, sss=SourceSreadSheet, s=Sheet, n=Name//

  //---TAKE ALL OLD SPREADSHEEDS FROM FOLDER ---//
  
  //replace it with Folder ID where the old spreadsheets are in
  var folder=DriveApp.getFolderById('Folder ID')
  //takes all files in the folder and sets the variable file
  var files=folder.getFiles();
    while (files.hasNext()) 
    {
  var file = files.next();

  //---TAKE DATA---//

  //replace with source ID
  var o_ss=SpreadsheetApp.open(file); 
  //replace with source Sheet tab name 1 to as much as you want
  var o_s_n1=o_ss.getSheetByName('tab name1');
  var o_s_n2=o_ss.getSheetByName('tab name2'); //optional
  //assign one ore more ranges you want to copy
  var o_range1=o_s_n1.getRange('A1:A2'); 
  var o_range2=o_s_n1.getRange('C1:C2'); //optional
  //Copy the values
  var o_data1=o_range1.getValues();
  var o_data2=o_range2.getValues(); //optional

  //---COPY DATA---//

  //replace with destination ID
  var sss_ss=SpreadsheetApp.openById('destination ID');
  //replace with destination Sheet tab name
  var sss_s=sss_ss.getSheetByName('tab name1');
  //Area where to copy in the new sheet
    sss_s.getRange('A1:A2').setValues(o_data1); 
    sss_s.getRange('C1:C2').setValues(o_data2); //optional

  //closes the code until here first
  SpreadsheetApp.flush();
          
  //---DUPLIKATE SOURCE SHEET AND RENAME IT AND PUT IT IN THE DESTINATION FOLDER---//
  
  //gets the sheet name from the old sheet
  var o_ss_n=o_ss.getName();
  //replace with destination Folder ID
  var folder=DriveApp.getFolderById('Folder ID')
  
  //Copy the destination sheet and name it like the old sheet
    DriveApp.getFileById('destination ID').makeCopy(o_ss_n,folder);
    }
}

【问题讨论】:

  • 尝试您的梦想,如果遇到特定问题,请提供minimal reproducible example
  • @TheMaster 我已经更新了我的代码,我没有得到重复功能,你还有什么想法吗?在这里使用flush()会不会很好?
  • 您将首先获取文件夹 > 然后在 while 循环内执行您为文件夹中的所有文件编写的此函数。见第一个例子here
  • @TheMaster 现在他将文件夹中的所有文件复制并复制,但他没有从电子表格中获取区域。这里有什么问题?你必须用数组来做吗?
  • @TheMaster 该代码有效,但它不会从旧表中获取范围并将它们复制到新电子表格中。到底哪里出错了?

标签: google-apps-script google-sheets google-drive-api


【解决方案1】:

终于完成了谢谢@TheMaster

function UPDATE() {
  //LEGEND: o=Old, ss=SpreadSheet, sss=SourceSpreadSheet, s=Sheet, n=Name//

  //---TAKE ALL OLD SPREADSHEEDS FROM FOLDER ---//
  
  //replace it with Folder ID where the old spreadsheets are in
  var folder=DriveApp.getFolderById('Folder ID')
  //takes all files in the folder and sets the variable file
  var files=folder.getFiles();
    while (files.hasNext()) 
    {
  var file = files.next();

  //---TAKE DATA---//

  //replace with source ID
  var o_ss=SpreadsheetApp.open(file); 
  //replace with source Sheet tab name 1 to as much as you want
  var o_s_n1=o_ss.getSheetByName('tab name1');
  var o_s_n2=o_ss.getSheetByName('tab name2'); //optional
  //assign one ore more ranges you want to copy
  var o_range1=o_s_n1.getRange('A1:A2'); 
  var o_range2=o_s_n1.getRange('C1:C2'); //optional
  //Copy the values
  var o_data1=o_range1.getValues();
  var o_data2=o_range2.getValues(); //optional

  //---COPY DATA---//

  //replace with destination ID
  var sss_ss=SpreadsheetApp.openById('destination ID');
  //replace with destination Sheet tab name
  var sss_s=sss_ss.getSheetByName('tab name1');
  //Area where to copy in the new sheet
    sss_s.getRange('A1:A2').setValues(o_data1); 
    sss_s.getRange('C1:C2').setValues(o_data2); //optional

  //closes the code until here first
  SpreadsheetApp.flush();
          
  //---DUPLIKATE SOURCE SHEET AND RENAME IT AND PUT IT IN THE DESTINATION FOLDER---//
  
  //gets the sheet name from the old sheet
  var o_ss_n=o_ss.getName();
  //replace with destination Folder ID
  var folder=DriveApp.getFolderById('Folder ID')
  
  //Copy the destination sheet and name it like the old sheet
    DriveApp.getFileById('destination ID').makeCopy(o_ss_n,folder);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    相关资源
    最近更新 更多