【问题标题】:Google Sheets Programmatically Apply Custom Currency Symbols Number FormatGoogle 表格以编程方式应用自定义货币符号数字格式
【发布时间】:2017-11-16 09:08:24
【问题描述】:

我想以编程方式应用自定义数字格式,以便我可以在我的单元格中使用自定义货币符号(例如加密货币)并将它们保留为数字,以便我可以对它们进行数学运算或绘制数值图表。

我已经看过以下选项:

  • 如果我使用电子表格函数“CONCATENATE”,我会得到一个字符串,并且无法使用最终值进行数学运算或图表。

  • 电子表格函数 TEXT() 可以获取数字格式以显示我想要的方式,但并非所有自定义货币符号都“有效” - 例如,以下将值转换为文本字符串,我无法使用数学/图表它。

例如:=TEXT(SUM(C5:C7),"Ƀ#,##0.00000000")

TEXT() 参考:https://support.google.com/docs/answer/3094139?hl=en

  • 如果我创建一个自定义函数,比如format(cell),并使用 JS 将任何文本字符串添加到值中,它就不再是数字类型了。

例如:function GBP(amt) { return '£' + parseFloat(amt).toFixed(2)); }

这也不起作用,因为结果字符串不是数字:

function BTC(amt) { return parseFloat('Ƀ' + parseFloat(amt).toFixed(2)); }

  • setNumberFormat(format) 不能用于通过电子表格公式调用的自定义函数。

  • 复制其他单元格格式?我也认为这是一种解决方法,但如果我必须为每个想要正确格式的单元格复制和粘贴格式,它看起来真的效率不高:Applying "Automatic" number formatting

  • 将值复制到另一列仅用于条件格式,原始数字仅用于数学/图表的范围。这更像是一种解决方法,而不是一个干净的解决方案。

简而言之,我只想将自定义货币符号添加到我的数字中,并且仍然能够使用它们进行数学计算和图表。有谁知道通过 Google Apps 脚本或电子表格功能/菜单直接有效的方法?

【问题讨论】:

  • 为什么不只是格式>数字>更多格式>自定义数字格式并提供[$Ƀ]#,##0.00000000
  • query 可以进行自定义格式设置,而无需将其设为文本。您可以尝试在工作表 API 中使用查询而不是 text()
  • @RobinGertenbach 我不能这样做的原因是因为单元格值是动态的 - 这些值由数据验证下拉菜单确定。所以不同的值需要不同的格式。您的方法将为该单元格提供适用于所有条件的格式。

标签: javascript google-apps-script google-sheets custom-function


【解决方案1】:

要以编程方式将货币格式应用于单个数字并将其保留为数字以便对其进行算术运算,请使用setNumberFormat(string)

注意事项:

  • 自定义函数不能用于应用数字格式,因为自定义函数无法修改单元格格式。
  • 条件格式不应用数字格式
  • Google 文档不包含货币格式。它们可以从 Google 表格 UI 获得。首先点击格式 > 更多格式 > 更多货币,然后点击格式 > 更多格式 > 自定义数字格式...,然后从文本框中复制格式,为单元格设置所需的货币格式。

例子:

setNumberFormat 是部分实现的 Google Apps 脚本函数,当前应用英镑货币格式 ([$£-809]#,##0.00) 或默认格式 (#,##0.00)。测试函数用于调用它,将“英镑”分配给格式参数。

function test(){
  setNumberFormat('Pound sterling');
}

function setNumberFormat(format) {
  var range = SpreadsheetApp.getActiveRange();
  var numberFormat = '';
  try {
    switch (format){
      case 'Pound sterling':
        numberFormat = '[$£-809]#,##0.00';
        break;
      default:
        numberFormat = '#,##0.00';
        break;
    }
    range.setNumberFormat(numberFormat);
  } catch (e){
    throw new Error('There was an error: ' + e);
  }
}

相关问答

参考文献

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    相关资源
    最近更新 更多