我必须制作电子表格。我希望程序查看电子表格 Ind 上的 A 行,看看它是 1 还是 0。如果它是事件工作表“return”上的 1,我希望它从电子表格“Ind”中的 D 行获取日期,并且将其发布到 Spreadhseet“返回”上。我无法弄清楚这一点,我让它在 Excel 中的 VBA 上工作。
任何帮助将不胜感激。
function myFunction() {
X = 5;
Y = 2;
Z = 1;
Count = 4560;
var ss = SpreadsheetApp.getActiveSpreadsheet();
var source_sheet = ss.getSheetByName("Ind");
var target_sheet = ss.getSheetByName("Returns");
while (Z < Count){
if (source_sheet.getRange("A" & X) = 1) {
var buydate = source_sheeet.getRange("D" & X).getValues()
target_sheet.getRange("A" & Y) = buydate
target_sheet.getRange("B" & Y) = "Buy"
Y = Y + 1
} else if (source_sheeet.Range("C" & X) = 2) {
var selldate = source_sheeet.Range("D" & X).getvalues()
target_sheet.getRange("A" & Y) = selldate
target_sheet.getRange("B" & Y) = "Sell"
Y = Y + 1
}
X = X + 1
Z = Z + 1
}}
最佳答案
这一行:
if (source_sheet.getRange("A" & X) = 1) {
使用的是&符号,它应该是一个加号。要在 JavaScript 中连接字符串,请使用加号。
此外,source_sheet.getRange()
将返回一个范围,而不是一个值,因此它永远不会等于 1。您需要使用如下所示的内容:
if (source_sheet.getRange("A" + X.toString()).getValue() === 1) {
并使用三个等号进行相等检查。 JavaScript 不断尝试将变量强制转换为看起来正确的类型。因此,它可能会将变量“X”中的数字转换为字符串,但您也可以使用 toString()
方法。
getValues()
返回一个二维数组。每个内部数组代表一行。内部数组中的每个元素代表一行中的一个单元格。
如果您只想获取一个值,请使用 getValue()
(末尾没有“s”)而不是 getValues()
。
var buydate = source_sheet.getRange("D" + X.toString()).getValue();
您正在尝试使用等号设置该值。那是行不通的。您需要使用 setValue()
或 setValues()
方法。
target_sheet.getRange("A" + Y.toString()).setValue(buydate);
通过在赋值中不使用 var
关键字,变量会自动成为“全局”变量。
X = 5;
Y = 2;
Z = 1;
我认为在这种情况下没有必要将它们设为全局变量。
var X = 5,
Y = 2,
Z = 1;
您可以同时声明多个变量。
关于javascript - 从一张谷歌工作表中获取值,将其输入到另一张带有 4 个循环的工作表上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33028048/