首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据从一个谷歌工作表复制到另一个工作簿

将数据从一个谷歌工作表复制到另一个工作簿
EN

Stack Overflow用户
提问于 2022-01-26 14:36:56
回答 2查看 1.6K关注 0票数 0

因此,非常多的拼凑和学习google脚本和第一个挑战是做以下工作:几个子表由代理完成,他们将使用脚本将尚未在主表上的任何子表整理到主表上。

脚本需要:检查子表中的数据是否已经复制到主表(查看0或1的单元格)。如果0将其复制到母版工作表的最后一行。我使用了一个计数公式来填充每个子表上的0或1。

我已经成功地构建了脚本,以便在同一个工作簿中从一个工作表到另一个工作表执行此操作,但是在尝试在不同的工作簿中这样做时会得到一个错误消息。还找到一个克隆脚本,该脚本确实会将数据(整个页面)复制到主服务器,但会覆盖而不是覆盖最后一行,同时也会忽略0和1规则。

在网上浏览了许多类似的问题,很难看到有同样的需求和解决办法的人?

代码:将所有新数据从最后一行复制到同一工作簿中的另一个工作表: /**

  • 检索活动电子表格中包含Yes

的所有行

包含列中的

  • ,并将它们复制到报表中。*/

函数copyRows2() {

var sSheet = SpreadsheetApp.getActiveSpreadsheet();

变量srcSheet = sSheet.getSheetByName("Import2");

var tarSheet = sSheet.getSheetByName("Report");

var lastRow = srcSheet.getLastRow();

(var i= 2;i <= lastRow;i++) { var cell = srcSheet.getRange("C“+ i);var val = cell.getValue();if (val == "0") {

变量srcRange = srcSheet.getRange("A“+I+ ":D”+ i);

var tarRow = tarSheet.getLastRow();var tarRange = tarSheet.getRange("A“+ (tarRow+1) + ":D”+ (tarRow+1));

srcRange.setValues(tarRange);} };`

从工作簿A克隆整个工作表到工作簿B:

代码语言:javascript
复制
function cloneGoogleSheet(ssA, ssB) {



 // source doc
  var sss = SpreadsheetApp.openById('Source Workbook ID');



// source sheet
  var ss = sss.getSheetByName('Import');

  // Get full range of data
  var SRange = ss.getDataRange();

  // get A1 notation identifying the range
  var A1Range = SRange.getA1Notation();

  // get the data values in range
  var SData = SRange.getValues();

  // target spreadsheet
  var tss = SpreadsheetApp.openById('Target WorkbookID');

  // target sheet
  var ts = tss.getSheetByName('Master2');

  
  // set the target range to the values of the source data
  ts.getRange(A1Range).setValues(SData);

};

更新:现在有一个工作代码:

代码语言:javascript
复制
/**
 * Retrieves all the rows in the active spreadsheet that contain Yes
 * in the Include column and copies them to the Report sheet.
 */

function MasterTracker() {
  var sSheet = SpreadsheetApp.getActiveSpreadsheet();
  var srcSheet = sSheet.getSheetByName("DARS");
  var tSheet = SpreadsheetApp.openById('DOC ID');
  var tarSheet = tSheet.getSheetByName("TrackerPilot");
  var lastRow = srcSheet.getLastRow();
  
  for (var i = 2; i <= lastRow; i++) {
    var cell = srcSheet.getRange("A" + i);
    var val = cell.getValue();
    if (val == "0") {
      
      var srcRange = srcSheet.getRange("E" + i + ":U" + i);
      
      var tarRow = tarSheet.getLastRow();
            var tarRange = tarSheet.getRange("A" + (tarRow+1) + ":Q" + (tarRow+1));
      
      var sourceValues = srcRange.getValues();
      tarRange.setValues(sourceValues);
    }
  }
};

但是一个新的问题。在源表中,有一些单元格具有数据验证的下拉列表--即使在空白时,这些单元格在运行时也会延迟代码。如果查找单元格是空的(不是0或1),那么忽略这些行有一种简单的方法吗?

EN

回答 2

Stack Overflow用户

发布于 2022-01-28 16:10:02

我还没能测试它,但我很确定它会成功的。

代码语言:javascript
复制
/**
 * Retrieves all the rows in the active spreadsheet that contain Yes
 * in the Include column and copies them to the Report sheet.
 */

function MasterTracker() {
  var sSheet = SpreadsheetApp.getActiveSpreadsheet();
  var srcSheet = sSheet.getSheetByName("DARS");
  var tSheet = SpreadsheetApp.openById('DOC ID');
  var tarSheet = tSheet.getSheetByName("TrackerPilot");
  var srcData = srcSheet.getDataRange().getValues();  // get all values
  var sourceValues = [];

  for (var i=1; i<=srcSheet.getLastRow(); i++) {
    // i+1 is row number i is index in data array
    // A is column 1 so index is 0 in data array 
    if ( srcData[i][0] === 0 ) {  // assuming the value is a number?
      sourceValues.push(srcData[i].slice(4,21)); // Column E is index 4 and V (Not included) is index 21
    }
  }
  tarSheet.getRange(tarSheet.getLastRow()+1,1,sourceValues.length,sourceValues[0].length).setValues(sourceValues);  
};
票数 1
EN

Stack Overflow用户

发布于 2022-01-26 16:36:24

代码语言:javascript
复制
function cloneGoogleSheet(ssA, ssB) {

 // source doc
  var sss = SpreadsheetApp.openById('Source Workbook ID');

// source sheet
  var ss = sss.getSheetByName('Import');

  // Get full range of data
  var SRange = ss.getDataRange();

  // get the data values in range
  var SData = SRange.getValues();

  var i = 0;
  var TData = [];
  for( i=0; i<SData.length; i++ ) {
    if( SData[i][2] === 0 ) { // Column C = 0
      TData.push(SData[i]);
    }
  }

  // target spreadsheet
  var tss = SpreadsheetApp.openById('Target WorkbookID');

  // target sheet
  var ts = tss.getSheetByName('Master2');

  
  // set the target range to the values of the source data
  ts.getRange(1,1,TData.length,TData[0].length).setValues(TData);  // Over write
  // Append ts.getRange(ts.getLastRow()+1,1,TData.length,TData[0].length).setValues(TData);

};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70865189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档