首页 > 解决方案 > 将 Google 表格中的所有数字替换为罗马数字

问题描述

技能水平:无——边走边找,试图弄清楚。

我目前有一个谷歌表,我正在尝试将所有数字(1、2、3 ...)自动转换为罗马数字(I、II、III 等)。

在测试了录制小宏并将它们全部粘贴在一起之后,我确实有一个非常漫长的工作。请参见下面的示例:spreadsheet.getRangeList(['E1:E2']).setFormula('=IFERROR(ROMAN(D1;0);"")'); 这会在带有数字的单元格旁边设置罗马值。谷歌表格在向下移动单元格时会自动更新,这样就可以了。然后我让它剪切并粘贴原始单元格中的值。对包含数字的工作表上的每个范围重复冲洗。

这对我来说感觉非常笨拙,必须是更好的方法。通过删除剪切/粘贴部分并将值存储为函数的一部分,或者简单地检查工作表中的每一个,如果是数字,则应用函数,如果不是,继续...或任何其他可以正常工作的方法。

为澄清起见,有没有数据的空点/区域。

例子:

一个 C D F G H
1 苹果 3 土豆 5
2 1
3 芹菜 0
4 萝卜 2 番茄 4

期望的输出

一个 C D F G H
1 苹果 土豆
2
3 芹菜 0
4 萝卜 番茄

任何指导/想法将不胜感激。即使它只是指向要阅读的功能/信息的链接,因为我不介意旅程和学习。

标签: google-apps-scriptgoogle-sheets

解决方案


尝试这个:

function convertToRomanNumeral() {
  //this will get the range of the data. Example: A1:G4
  var range = SpreadsheetApp.getActiveSheet().getDataRange();
  //this will return 2 dimensional arrays of values
  var data = range.getValues();
  for( var i = 0; i < data.length; i++ ){
    for( var j = 0; j < data[0].length; j++ ){
      //convert number to roman numeral
      var val = romanize(data[i][j]);
      if(val){
        //change the value of array element if the value if val is not empty. 
        data[i][j] = val;
      }
    }
  }
  //write the changes to sheet
  range.setValues(data);
}


function romanize (num) {
    if (isNaN(num))
      return '';
    else if (parseInt(num) == 0)
      return 0;
    var digits = String(+num).split(""),
        key = ["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM",
               "","X","XX","XXX","XL","L","LX","LXX","LXXX","XC",
               "","I","II","III","IV","V","VI","VII","VIII","IX"],
        roman = "",
        i = 3;
    while (i--)
        roman = (key[+digits.pop() + (i * 10)] || "") + roman;
    return Array(+digits.join("") + 1).join("M") + roman;
}

例子:

在运行脚本之前:

在此处输入图像描述

运行脚本后:

在此处输入图像描述

参考:


推荐阅读