我自己构建了一个相当花哨的财务跟踪电子表格,但遇到了以下问题:
我用两个值跟踪我的费用:金额和货币。
然后,在下一列中,我使用We could be wrong, but this one looks like it might be an issue with
missing quotes. Always quote template expression brackets when they
start a value. For instance:
with_items:
- {{ foo }}
Should be written as:
with_items:
- "{{ foo }}"
将这些值转换为我的本机货币(欧元)。
我的公式如下:
GOOGLEFINANCE()
如果此行的货币(B列)为欧元,则不进行任何转换,只使用A列中的值。
如果B不是欧元,请使用B中的货币并将A中的货币值从该货币转换为欧元。
问题是这是不断更新的。目前这是可以的,但如果我在几年内回到它,一些价值可能会与原来的汇率大不相同。
我想做的是用今天的汇率填写该字段并保留这样的价值(即静态,而非动态)。
有没有人有这方面的经验?我想这也是构建股票价格记录表的常见问题。
答案 0 :(得分:0)
我也有很多财务跟踪表,你是对的,冻结返回值是一个常见的需求。以下脚本设置为运行在单元格B2的编辑上。 (您可以将其更改为B列)。它使用偏移获得单元格C2。它获取公式计算公式结果的显示值,并用值覆盖公式。由于公式消失了,它不会重新计算。
function onEdit(e) {
if(e.range.getA1Notation()=="B2"){
freeze(e.range.getA1Notation());
}}
function freeze(c){
var ss =SpreadsheetApp.getActiveSpreadsheet()
var s=ss.getActiveSheet()
var activeCell =c
var oc =SpreadsheetApp.getActiveRange().offset(0, 1).getA1Notation()
var val=s.getRange(oc).getDisplayValue()
s.getRange(oc).setValue(val);
}
这是一个改进版本,用于检查工作表并处理所有B列,而不仅仅是B2。将B2中的公式更改为此并复制:
=IF(or(B2 = "EUR",B2=""), A2, A2*GOOGLEFINANCE("CURRENCY:" & B2 &"EUR"))
然后将onEdit更改为此。根据需要更改工作表名称:
function onEdit(e){
var sheet = e.source.getActiveSheet().getName()
var c = e.range.getA1Notation()
var col=e.range.getColumn()
var lcval=e.value.toLowerCase()//to lower case to ignore case.
if(lcval==""){return}
if(sheet=="Sheet1" && col==2 && lcval != "eur"){ //Change sheet name as needed.
freeze(c)//call freeze wuth active cell address.
}
}