如何在 google 工作表中动态设置货币格式

How to dynamically format currency in google sheets

如何在 google 工作表中动态设置货币格式?

当前数据

Platform Currency Budget Amount Spend
TikTok USD 866.98 690.62
TikTok IDR 6317.89 6317.89
DV360 THB 3739.66 3438.48

期望输出

Platform Currency Budget Amount Spend
TikTok USD USD 866.98 USD 690.62
TikTok IDR IDR 6317.89 IDR 6317.89
DV360 THB THB 3739.66 THB 3438.48

我没有使用 google 应用程序脚本和手动格式化(因为我有 1000 行具有多种货币的数据),而是在 google 工作表中寻找单元格公式方法。

通过引用“货币”中的单元格,“预算”和“支出金额”中的值将相应地设置格式。

如果您使用的是 Excel,那么直接的答案就是使用条件格式。但是,您可能知道,Google 工作表不允许将条件格式应用于 Number Format。这使您的选择有限。您的 post 没有包括的一件关键事情是您可能希望在 Bugdet 和支出列中保留 values。这使得不可能用公式来完成(如果有人知道我不知道的事情,很高兴被证明是不正确的......)。

让数据按您显示的方式显示的唯一方法是使用公式连接或连接单元格。 See sample sheet with JoinValues tab.

更好的数据结构

并不重要,但您面临的真正问题是您的数据未处于最佳结构中。您的报告要求很正常,您只需要对数据进行反透视。这意味着您将有一个包含 values/amoun 的列,但您会为 ACTUAL 或 BUDGET 添加一列(对于显示 BPC 等此类信息的工具,此字段通常称为 versioncategory , Essbase, Tagetik)。这基本上会使数字或行数加倍,但会为您提供许多旋转选项和计算方法。 See same spreadsheet 未透视数据的外观。

Google 脚本

虽然问题确实明确说明没有 Google 脚本,但这似乎是按行完成动态数字格式化的唯一方法。对于发现此问题并愿意编写脚本的任何人,下面的此过程将完成所需的任务 in this sample sheet

/** @OnlyCurrentDoc*/

function fixFormat() {
  const currencyRange = "b2:b";// column b
  const valueRange = "c2:d"; //number columns
  const sheetName = "JoinValues";

  const dataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);

  var valueFormats = dataSheet.getRange(valueRange).getNumberFormats();
  var allCurrencies = dataSheet.getRange(currencyRange).getValues();

  for (var i = 0; i < allCurrencies.length; i++) {
    var currencyID = allCurrencies[i][0];
    if (currencyID != '') {
      for (var c = 0; c < valueFormats[i].length; c++) {
        valueFormats[i][c] = '"' + currencyID + '  "' + valueFormats[i][c]
      }
    } else {
      break;
    }
  }
  dataSheet.getRange(valueRange).setNumberFormats(valueFormats);
}

如果您正在寻找更简单的方法,不妨试试这个解决方法:

  1. 创建一个 'store' sheet columns formatted for all possible currencies。请注意,headers 列是稍后的 'keys'。

  2. 在您的主要 sheet 中,use the 'FILTER' function 根据 'Currency' 单元格作为键获取正确的金额。

  3. 函数将相应地过滤相应的单元格。试试吧!

您也可以对该值进行操作。只是指出这一点,因为这似乎就是为什么您更喜欢 'format' 而不是 'CONCAT' 的货币和数字。

此外,如果您希望采用您所描述的格式,即 'USD xxx' 而不是“$ xxx”,您可以在 'Custom Currency' 下进行更改。只需用 'USD'、'IDR' 等替换那里的任何符号即可