Excel中的数字或LibreOffice单元格内容中的数字与文本混合在一起时的常量?
我有这样一个很长的一系列单元格(例如文本):
Example Number (3502, 456)
如何将数字乘以4而不必删除文本?
我也有格式[单元格下面]的单元格:
Example Number (3502,456) (4560,250) (2345,223)
等等,每个文本string平均有十个括号。
偶尔,文本也可能只有一个字,例如
Example (3205, 456)
要么
Example (3205,456) (4560,250) (2345,223)
等等。
(以上都是[原文如此])。
作为Excel的一个新手(好吧,真的是免费的Office Calc,但实质上是一样的),我该怎么做呢? 我不想通过手动把所有的数字自己放大。 我想要乘以的数字是4.我试着运行一个查找和replace来replace所有的和*4
)
的*4
,但我需要这些数字的程序无法评估expression式,它需要单个数字。
每个列表上有110多个项目需要更改,三个列表中的任何一个(!)只有一个math错误,程序将无法正确运行(我正在调整图像大小,以及绘制的点数图像没有放大与它)。 我不想冒这个险。
应该可以用macros来做到这一点,但除非我误解了LibreOfficemacros代码与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
函数将始终返回search字符后面的整个文本的其余部分)。
您应该能够将MID
和FIND
函数结合到其他单元格中,以便隔离其他数字,假定这些数字总是按照您的示例以(xxx,yyy)格式find。 然后,您可以使用最终公式从乘数中重buildstring:
="Example Number (" & 4*C1 & "," & 4*E1 & ")"
等等。
如果您的数据具有可变数量的数字,您的某些FIND
函数可能会返回一个#VALUE
错误。 您可能需要使用IF
function来排除这些,例如:
=IF(ISERROR(G1),"",G1)
如果包含数据,将返回G1的值,但如果包含数据则返回空值。
这是一个Python LibreOfficemacros,它可以做你想做的事情。 它假定所有的值都在列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
。 把它放在你的LibreOffice用户目录的 Scripts/python
中。 在我的Windows系统上,它是C:\Users\JimStandard\AppData\Roaming\LibreOffice\4\user\Scripts\python
。 如果python
目录不存在,创build它。
要运行它,打开电子表格并转至Tools -> Macros -> Run Macro
。 在My Macros
,单击calc_multiply_numbers
,然后按Run
button。
编辑 :
我不认为你需要担心JRE错误。 在我的系统上,我可以在Tools -> Options -> LibreOffice -> Advanced
取消选中“使用Java运行环境”,它仍然可以工作。 当我询问是否要现在启用JRE,然后运行我的pythonmacros时,我只需单击“否”。
它没有显示在My Macros
下的原因是因为python无法正确解释文件。 要find这个错误,使用下面的步骤(假设Windows)用pythontesting它:
- 打开一个命令提示符,例如通过按Win ,input
cmd
,然后从开始菜单中单击“命令提示符”。 - 键入cd“ path-to-libreoffice / program”。 在我的64位系统上,这是
cd "C:\Program Files (x86)\LibreOffice 5\program"
我使用正常的Windows文件资源pipe理器来查找确切的path。 - input“python.exe python-script ”。 在我的系统上是
python.exe "C:\Users\JimStandard\AppData\Roaming\LibreOffice\4\user\Scripts\python\calc_multiply_numbers.py"
python解释器会给出关于这个问题的错误信息。 如果你无法弄清这个信息,请把它写在下面的评论中,我会帮你的。