我有一系列像这样编写的单元格(示例文本):
Example Number (3502, 456)
如何将数字乘以4而不必删除文本?
我也有[sic under]格式的单元格:
Example Number (3502,456) (4560,250) (2345,223)
等等,每个文本字符串平均有十个括号。
有时,文字也可能只有一个字长,例如
Example (3205, 456)
或
Example (3205,456) (4560,250) (2345,223)
等等。
(以上都是[原文如此])。
作为Excel的一种新手(嗯,真的是Libre Office Calc,但它基本上是相同的),我该怎么做?我不想通过自己手动乘以所有数字。我想要乘以的数字是4.我尝试过运行一个find-and-replace来用,
替换所有)
和*4
,但是我需要这些数字的程序无法计算表达式,它需要单个数字。
我需要更改每个列表上的110多个项目,并且三个列表中的任何一个上只有一个数学错误(!)并且程序将无法正确运行(我正在调整图像大小和点数我绘制的图像没有按比例放大)。我不想冒风险。
答案 0 :(得分:2)
应该可以使用宏来执行此操作,但除非我弄错了,否则LibreOffice宏代码与Excel VBA完全不同。
但是,如果您能够使用电子表格的多个列来计算出值,则可以使用公式来实现。如果单元格A1包含
Example Number (3502,456) (4560,250) (2345,223)
和B1包含
=MID(A1,FIND("(",A1)+1,9999)
然后此公式将3502
作为数字返回:
=NUMBERVALUE(LEFT(B1,FIND(",",B1)-1))
(9999被选择为远大于任何行的可能长度,因此MID
函数将始终返回搜索字符后的整个文本的其余部分。)
您应该能够将MID
和FIND
函数组合在其他单元格中以隔离其他数字,假设这些数字总是按照您的示例以格式(xxx,yyy)找到。然后,您可以使用最终公式从乘法数字重建字符串:
="Example Number (" & 4*C1 & "," & 4*E1 & ")"
等等。
如果您的数据中包含可变数量的数字,则某些FIND
函数可能会返回#VALUE
错误。您可能需要使用IF
函数来排除这些,例如:
=IF(ISERROR(G1),"",G1)
如果包含数据,将返回G1的值,如果包含错误,则返回空白。
答案 1 :(得分:1)
这是一个Python LibreOffice宏,可以满足您的需求。它假定所有值都在A列中,并将结果写入B列。
import re
def do_calculations():
document = XSCRIPTCONTEXT.getDocument()
sheet = document.getSheets().getByIndex(0)
cellrange = sheet.getCellRangeByName("A1:A10000")
row_tuples = cellrange.getDataArray()
row = 1
for row_tuple in row_tuples:
if row_tuple:
row = output_values(row, row_tuple[0], sheet)
def output_values(row, pairs_string, sheet):
"""Multiply pairs of values by 4 and output each pair to B column.
:param row: the row number in the B column
:param pairs_string: a string like "Example Number (123, 456) (789, 1011)"
:param sheet: the current spreadsheet
Returns the next row number in the B column.
"""
pairs = re.findall(r'\([^)]+\)', pairs_string)
for pair in pairs:
match_obj = re.match(r'\((\d+),\s*(\d+)\)', pair)
x, y = match_obj.groups()
result = "(%d,%d)" % (int(x) * 4, int(y) * 4)
cell = sheet.getCellRangeByName("B" + str(row))
cell.setString(result)
row += 1
return row
# Functions that can be called from Tools -> Macros -> Run Macro.
g_exportedScripts = do_calculations,
将代码保存到文本文件,例如calc_multiply_numbers.py
。将其放在Scripts/python
的{{1}}中。在我的Windows系统上,它是C:\Users\JimStandard\AppData\Roaming\LibreOffice\4\user\Scripts\python
。如果python
目录尚不存在,请创建它。
要运行它,请打开电子表格并转到Tools -> Macros -> Run Macro
。在My Macros
下,点击calc_multiply_numbers
,然后按Run
按钮。
修改强>:
我认为您不必担心JRE错误。在我的系统上,我可以在Tools -> Options -> LibreOffice -> Advanced
中取消选中“使用Java运行时环境”,它仍然有效。当我询问是否要立即启用JRE时,我只需单击“否”,然后运行我的python宏。
它没有出现在My Macros
下的原因是因为python无法正确解释文件。要查找错误,请使用以下步骤(假设Windows)使用python进行测试:
cmd
,然后从开始菜单中单击“命令提示符”。cd "C:\Program Files (x86)\LibreOffice 5\program"
我使用普通的Windows文件资源管理器来查找确切的路径。python.exe "C:\Users\JimStandard\AppData\Roaming\LibreOffice\4\user\Scripts\python\calc_multiply_numbers.py"
python解释器将给出有关该问题的错误消息。如果您无法弄清楚该消息,请在下面的评论中写下来,我会帮助您。