google-apps-script - 将 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 | 萝卜 | 二 | 番茄 | 四 |
任何指导/想法将不胜感激。即使它只是指向要阅读的功能/信息的链接,因为我不介意旅程和学习。
解决方案
尝试这个:
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;
}
例子:
在运行脚本之前:
运行脚本后:
参考:
推荐阅读
- python - 根据 PEP8 的 Python 3 格式化列表
- flutter - 等待流未完成
- docker - 从特定端口上的 docker 容器访问主机
- database - 在 Oracle 数据库中具有角色时错误用户没有特权
- java - 通过 Sling 在 AEM 中的路径管理两个相同的 servlet
- mysql - 在服务器上使用哪种编程语言进行数据处理?
- ada - 在 Ada 中使用异常
- c# - 将 WCF 服务引用排除在代码覆盖范围内
- powershell - Invoke-Command Powershell - 错误:无法处理参数,因为参数“路径”的值为 null 并且管道中字符后的表达式
- flutter - 如何:让按钮每 X 秒抖动一次?