其他:从子图纸到主图纸的不同范围

2024-10-03 19:21:55 发布

您现在位置:Python中文网/ 问答频道 /正文

有一个工作表,需要由超过75个工作表填充,这些工作表具有不同的值。你知道吗

编辑: 情况略有变化。你知道吗

  'AGENTS'
  Agent Name  Sheet ID
1 Tom         Link to Tom's sheet
2 John        Link to John's sheet
3 Mary        Link to Mary's sheet
etc.

链接到:

'MASTER SHEET'
        A                    C                       D
    Agent Name  Value 1 from Agent's Sheet Value 2 from Agent's Sheet
1                           D46                     D53
2                           D46                     D53
3                           D46                     D53

另外,这是基于1个单元格,表示第1周。 因此,如果主机上的单元格F11是'39',它将从该周的代理表中提取数据。你知道吗

我做了一次微弱的尝试来改变代码:

var agentNames = SpreadsheetApp.getActive().getSheetByName('AGENTS').getRange('A2:A35').getValues();//these are the agent names
var agentID = SpreadsheetApp.getActive().getSheetByName('AGENTS').getRange('B2:B35').getValues();//here are their sheets
var agentSheets = SpreadsheetApp.openById(agentSheets[i][0]);
var array1 = [];
var array2 = [];
var array3 = [];
var masterSheet = SpreadsheetApp.getActive().getSheetByName('MASTER');
var sheetName =   SpreadsheetApp.openById('B2') + 'F2' + (masterSheet.getRange('F11').getValue());
var temp;

for (var i = 0; i < numAgents; i++) {
temp = SpreadsheetApp.openById(agentSheets[i][1]).getSheetByName(sheetName).getRange('D46:D53').getValues();
array1.push([agents[i][0]]);
array2.push([temp[0][0]]);
array3.push([temp[7][0]]);
    }

masterSheet.getRange(2, 1, numAgents, 1).setValues(array1);//Agent names
masterSheet.getRange(2, 3, numAgents, 2).setValues(array2);
masterSheet.getRange(2, 4, numAgents, 2).setValues(array3);

 }

JavaScript是解决这个问题的下一个最佳解决方案吗?当脚本运行75页或更多页时,加载时间似乎很长。欢迎就如何进行提出任何建议或意见!你知道吗


Tags: tovarlinktempsheetagentagentsspreadsheetapp
1条回答
网友
1楼 · 发布于 2024-10-03 19:21:55

我的建议很简单,只要有可能,尽量成批地执行get和set,而不是在循环中。因此,通常最好构造一个Javascript数组,并一次性设置它。下面是我对一些代码的猜测:

function consolidate() {
  var agents = [['John', 'sheet_id'],
                ['Mary', 'sheet_id'],
                ['Tom', 'sheet_id']];
  var numAgents = agents.length;
  var array1 = [];
  var array2 = [];
  var array3 = [];
  var array4 = [];
  var masterSheet = SpreadsheetApp.getActive().getSheetByName('MASTER');
  var sheetName = 'WEEK ' + (masterSheet.getRange('A1').getValue());
  var temp;

  for (var i = 0; i < numAgents; i++) {
    temp = SpreadsheetApp.openById(agents[i][1]).getSheetByName(sheetName).getRange('D41:D49').getValues();
    array1.push([agents[i][0]]);
    array2.push([temp[4][0], temp[0][0]]);
    array3.push([temp[7][0], temp[8][0]]);
    array4.push([temp[6][0]]);
  }

  masterSheet.getRange(2, 1, numAgents, 1).setValues(array1);
  masterSheet.getRange(2, 4, numAgents, 2).setValues(array2);
  masterSheet.getRange(2, 9, numAgents, 2).setValues(array3);
  masterSheet.getRange(2, 14, numAgents, 1).setValues(array4);
}

相关问题 更多 >