Google apps script 在谷歌应用程序脚本中,如何在中间循环中进行二次查找
我相信这一定是非常直截了当的,但我不是一个开发人员,已经为此奋斗了一段时间,希望有人能帮助我 基本上,我有一个2D发票数组:Google apps script 在谷歌应用程序脚本中,如何在中间循环中进行二次查找,google-apps-script,google-sheets,google-sheets-formula,Google Apps Script,Google Sheets,Google Sheets Formula,我相信这一定是非常直截了当的,但我不是一个开发人员,已经为此奋斗了一段时间,希望有人能帮助我 基本上,我有一个2D发票数组: Date | Total | Currency 2020-08-17 | 500 | GBP 2020-08-15 | 1000 | USD 我想添加第四列,将总额标准化为一种货币,在本例中为英镑 我有一个第二个汇率表,如下所示(但假设它将来可能有其他汇率): 我使用foreach遍历发票数组,并使用if语句来表示“如果货币为英镑,则总计保持不变”,但我需要表示“如果货
Date | Total | Currency
2020-08-17 | 500 | GBP
2020-08-15 | 1000 | USD
我想添加第四列,将总额标准化为一种货币,在本例中为英镑
我有一个第二个汇率表,如下所示(但假设它将来可能有其他汇率):
我使用foreach遍历发票数组,并使用if语句来表示“如果货币为英镑,则总计保持不变”,但我需要表示“如果货币为美元,则在汇率表中查找与发票日期匹配的日期并获取汇率”
以下是迄今为止的代码:
function GBPTotal() {
var ss = SpreadsheetApp.getActive();
// Getting data from the zapier populated spreadsheet
var receivablesSheet = ss.getSheetByName("zap receivable");
var receivablesLastRow = receivablesSheet.getLastRow();
var receivablesData = receivablesSheet.getRange(2,1,receivablesLastRow-1,4).getValues();
// Getting data from the exchange rates table
var exchangeRateSheet = ss.getSheetByName("Exchange Rates");
var exchangeRateLastRow = exchangeRateSheet.getLastRow();
var exchangeRateData = exchangeRateSheet.getRange(2,1,5,3).getValues();
var totalInGBPArray = [];
receivablesData.forEach(function(receivablesRow){
var total = receivablesRow[2];
var currency = receivablesRow[3];
// Switch to detect the currency and act accordingly
switch (currency) {
case "GBP":
var TotalInGBP = total;
break;
case "USD":
/**** HELP - EXCHANGE RATE LOOKUP IN HERE *****/
break;
}
receivablesRow.push(TotalInGBP);
totalInGBPArray.push([TotalInGBP]);
});
//Logger.log(totalInGBPArray);
receivablesSheet.getRange(2,5,receivablesLastRow-1,1).setValues(totalInGBPArray);
}
我一直在看map,因为它似乎是最有效的解决方案,但我不会真的使用大数据集,所以也许我应该接受最容易理解的东西。我会用一个简单的公式来解决这个问题:
=if(AND(C3<>"GBP",isnumber(match(A3,'Exchange Rates'!$A$2:$A,0))),B3*index('Exchange Rates'!$B$2:$B,match(A3,'Exchange Rates'!$A$2:$A,0)),B3)
=if(和(C3“GBP”、isnumber(匹配(A3,‘汇率’!$A$2:$A,0))、B3*索引(‘汇率’!$B$2:$B、匹配(A3,‘汇率’!$A$2:$A,0))、B3)
结果:
我将使用一个简单的公式来解决这个问题:
=if(AND(C3<>"GBP",isnumber(match(A3,'Exchange Rates'!$A$2:$A,0))),B3*index('Exchange Rates'!$B$2:$B,match(A3,'Exchange Rates'!$A$2:$A,0)),B3)
=if(和(C3“GBP”、isnumber(匹配(A3,‘汇率’!$A$2:$A,0))、B3*索引(‘汇率’!$B$2:$B、匹配(A3,‘汇率’!$A$2:$A,0))、B3)
结果:
用于比较两个日期并检索相应的汇率:
case "USD":
var date = receivablesRow[1];
var exchangeRate = exchangeRateData.find(exchangeRateRow => exchangeRateRow[0].getTime() === date.getTime())[1];
var TotalInGBP = total * exchangeRate;
break;
注意:我假设汇率日期在A列,发票中的日期在B列,用于各自的表格。如果不是这样,请更改索引。用于比较两个日期并检索相应的汇率:
case "USD":
var date = receivablesRow[1];
var exchangeRate = exchangeRateData.find(exchangeRateRow => exchangeRateRow[0].getTime() === date.getTime())[1];
var TotalInGBP = total * exchangeRate;
break;
注意:我假设汇率日期在A列,发票中的日期在B列,用于各自的表格。如果不是这样,请更改索引。这可以通过公式轻松完成?你会接受配方奶粉吗?你不也应该检查日期吗?这可以通过配方奶粉轻松完成吗?你会接受公式解决方案吗?你不也应该检查日期吗?嘿,伙计,谢谢你的建议,但这是更大的自动化部分。Zapier从财务软件包中提取信息并放入表格,然后运行一些应用程序脚本,这样我就不必在开具新发票时继续复制和粘贴公式,然后这些数据将在Google data Studio中报告。我会用vlookup,所以你教了我一些新东西,但不是我想要的:(嘿,伙计,谢谢你的建议,但这是一个更大的自动化项目的一部分。Zapier从财务软件包中提取信息并放入表格,然后运行一些应用程序脚本,这样我就不必在收到新发票时一直复制和粘贴公式,然后这些数据会在Google data Studio中报告。我会使用vloo库普,你教会了我一些新的东西,但不是我想要的:(