【发布时间】:2013-04-03 00:12:18
【问题描述】:
我正在尝试在 Google 电子表格中编写“罗马数字到十进制数字”函数的脚本。 到目前为止,我已经设法使用以下代码使其工作:
function rom2num(inputRange) {
inputRange = inputRange.replace(/\bi\b/gi,1); //convert 'I' to '1'
return inputRange;
}
当输入只有一个单元格时,这非常有效。但是,每当我尝试输入一个范围 (A1:B2) 时,我都会收到错误消息:“无法在对象中找到函数替换”。
我想要实现的一些例子:
Column A | Column with function
i, ii, iii | 1, 2, 3
Godfather II | Godfather 2
iv, v, vi | 4, 5, 6
Star Wars V | Star Wars 5
我可以选择在下面的单元格中重复该函数,正如 Crayon 所建议的那样,但是,需要重新格式化的范围可能是 50 行,或者可能是 100 行,我不想再添加 50 个额外的实例如果不使用它们的功能。我希望它尽可能自动化。 :-)
我知道可以检索一个单元格范围内的信息,并在另一个单元格范围内返回该信息,只需使用以下代码:
function copyRange(inputRange) {
return inputRange;
}
所以输入一个范围并输出相同的范围不是问题。问题是试图合并替换功能。我已经设法使用“toString()”函数更改了整个范围内的信息。然后我可以使用 'split(",")' 将输出拆分为几列,但我不希望它跨列传播,而只是跨行。
所以如果我能以某种方式将范围/数组转换为字符串,然后再转换回范围/数组...
是否可以在不使代码过于臃肿的情况下实现这一目标? (我是一个新手脚本编写者,喜欢简短的脚本,就像我上面的示例一样。)
如果我不清楚,我很抱歉。我习惯在这样的论坛上查找答案,但我自己不会问问题!
谢谢!
编辑:终于意识到事情变得有点太复杂了,所以我只是接受了蜡笔的建议并使用了“拖动”方法。为我省了很多麻烦。感谢您的帮助!
【问题讨论】:
-
那么,如果不是字符串,那么
inputRange变量中的 是 是什么?请添加类型(由typeof inputRange报告)和该变量的内容。这根本不是 Google 脚本问题,只是简单的 JavaScript,但如果不知道该变量中的内容,就很难提供帮助。 :-) -
嗨!感谢您及时的回复。我已经编辑了这篇文章,希望能更清楚地说明情况并回答你的问题。谢谢!
-
哇,现在细节太多了。 :-) 真的,你把这弄得太复杂了。让我们重新开始。你有一个功能。它接受输入并转换为输出。究竟是什么输入?它应该从该输入产生什么输出?为两者提供具体的例子,尽可能多的例子来展示你可能遇到的不同情况,但仅此而已。忘记电子表格 API 和其他一切,这一切都只是分散注意力。达到这个特定功能的最低限度的具体要求,然后你就有了容易解决的问题。
-
当然,我在这里可能过于简单化了!查看 Crayon 的答案以获取一些有价值的信息。我真正的意思是把这两个问题分开:1)你如何以你需要的方式与电子表格 API 交互,以及 2)你如何编写一个 JavaScript 函数来完成你需要的转换。如果你能把这两个问题分开,可能更容易分析问题。
-
哈哈感谢您与我交谈并尝试解决我的问题。好吧,在 Google 电子表格文档中,我可以打开一个脚本编辑器。在编辑器中,我可以声明一个函数,它看起来与我上面的第一个代码示例完全一样。然后在电子表格中调用我的函数,我只需键入(在单元格中)=rom2num(输入)。 (输入可以是一些文本或对另一个单元格或另一个单元格范围的引用。
标签: javascript arrays multidimensional-array google-apps-script