,所以我在Google表中被困在此。
表"价格计算器"的数量在A中购买和出售的物品,分为2个名为ranges trade_qty和buy_qty。
。同一列表出现在"主tally"的表格中,以及以前的交易的数量,也出现在A。
中已经翻过多个代码示例的窗口,似乎没有一个能够提供任何有效的东西。
function TEST() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
//Gets number of rows of each range
var Rows1 = ss.getRange(''PRICE CALCULATOR'!TRADE_QTY').getNumRows()
var Rows2 = ss.getRange(''PRICE CALCULATOR'!BUY_QTY').getNumRows()
//Gets Starting rows of each range
var Row1 = ss.getRange(''PRICE CALCULATOR'!TRADE_QTY').getRow()
var Row2 = ss.getRange(''PRICE CALCULATOR'!BUY_QTY').getRow()
for (r=Row1; r<Rows1; r++) {
ss.setActiveSheet(ss.getSheetByName('PRICE CALCULATOR'), true);
var ADD = ss.getRange(r,1).getValue()
if (cell.isBlank()) {
next r
}
else {
ss.setActiveSheet(ss.getSheetByName('Master Tally'), true);
var EXIST = ss.getRange(r,1).getValue()
var TOT = ADD+EXIST
ss.getRange(r,1).setValue(TOT)
}
}
}
基本上,我尝试开发一个宏观/脚本,该宏/脚本将"价格计算器"中的新交易QTY添加到" Master Tally"
中的现有QTY中i" M stump陷入困境,因为它不断扔我'找不到方法getrange(数字,编号(',现在我不再深处!
链接到文档;https://docs.google.com/spreadsheets/d/1gijcqv5kt41wyujs1hs1hs1x8ypputpy_kgotuilzxlkso/edit?usp = sharing
此代码遭受基本缺陷:行数和列之间的混淆(在0-Zero中启动(与从脚本命令(例如 getValue
(衍生的代码(在1始于1开始( - 一个(。
例如:
-
for (r=Row1; r<Rows1; r++) {
在这种情况下,ROW1的值由getRow
确定,因此返回实际行号。但是循环值将生成零以零的数组的行和列号。因此,这条线应读取for (r=0; r<Rows1; r++) {
-
var EXIST = ss.getRange(r,1).getValue()
该行的目的是返回" Master Tally'中的现有QTY",并且该范围将在A列中查看该值。但是,这些值实际上是在B列中。因此,此行将永远不会返回"现有QTY"的准确值。
还有其他一些事情要注意:
- 现有代码在每个循环中进行两个
getValue
调用;这些是耗时的。答案通过仅在循环之前获得相应的范围值来提高性能。 - 售出数量的更新(
setValue(TOT)
(在循环内部。同样,这是一个廉价的命令。答案更新循环中的数组值,然后在循环后一次更新表。 -
BUY Qty
值是无关的
function so56017521() {
var ss = SpreadsheetApp.getActive();
//Gets number of rows of each range
var Rows1 = ss.getRange(''PRICE CALCULATOR'!TRADE_QTY').getNumRows()
//Logger.log("DEBUG: Number of Rows: Trade Qty="+Rows1);
//Gets Starting rows of each range
var Row1 = ss.getRange(''PRICE CALCULATOR'!TRADE_QTY').getRow()
//Logger.log("DEBUG: Start Row: Trade Qty="+Row1);
// setup sheets
var calcsheet = "PRICE CALCULATOR";
var mastersheet = "Master Tally";
var calc = ss.getSheetByName(calcsheet);
var master = ss.getSheetByName(mastersheet);
var masterrows = master.getLastRow();
//Logger.log("DEBUG: Master Last Row = "+masterrows);
// get data for each sheet
var calcrange = calc.getRange(Row1, 1, Rows1);
var calcdata = calcrange.getValues();
var masterrange = master.getRange(3, 2, masterrows - 2);
var masterdata = masterrange.getValues();
//Logger.log("DEBUG: Calc data range = "+calcrange.getA1Notation()+", Master Data Range"+masterrange.getA1Notation());
for (r = 0; r < Rows1; r++) {
Logger.log("r=" + r);
var ADD = calcdata[r][0]; //Trade qty
//Logger.log("DEBUG: r="+r+", ADD value = "+ADD+", ADD.length = "+ADD.toString().length);
if (ADD.toString().length != 0) { // if Trade qty has value
// keep going
//Logger.log("DEBUG: keep going");
var EXIST = masterdata[r][0]; // existing quantity qty sold
Logger.log("DEBUG: r=" + r + ", EXIST = " + EXIST);
var TOT = ADD + EXIST; // sum of trade-in qty plus existing qty
Logger.log("DEBUG: ADD+EXIST = " + TOT);
// update masterdata array
masterdata[r][0] = TOT;
} else {
// nothing to see here
//Logger.log("DEBUG: next r please");
}
}
//update the spreadsheet with the adjusted array values
masterrange.setValues(masterdata);
}