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字符后面的整个文本的其余部分)。

您应该能够将MIDFIND函数结合到其他单元格中,以便隔离其他数字,假定这些数字总是按照您的示例以(xxx,yyy)格式find。 然后,您可以使用最终公式从乘数中重buildstring:

 ="Example Number (" & 4*C1 & "," & 4*E1 & ")" 

等等。

如果您的数据具有可变数量的数字,您的某些FIND函数可能会返回一个#VALUE错误。 您可能需要使用IFfunction来排除这些,例如:

 =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 ,然后按Runbutton。

编辑

我不认为你需要担心JRE错误。 在我的系统上,我可以在Tools -> Options -> LibreOffice -> Advanced取消选中“使用Java运行环境”,它仍然可以工作。 当我询问是否要现在启用JRE,然后运行我的pythonmacros时,我只需单击“否”。

它没有显示在My Macros下的原因是因为python无法正确解释文件。 要find这个错误,使用下面的步骤(假设Windows)用pythontesting它:

  1. 打开一个命令提示符,例如通过按Win ,inputcmd ,然后从开始菜单中单击“命令提示符”。
  2. 键入cd“ path-to-libreoffice / program”。 在我的64位系统上,这是cd "C:\Program Files (x86)\LibreOffice 5\program"我使用正常的Windows文件资源pipe理器来查找确切的path。
  3. input“python.exe python-script ”。 在我的系统上是python.exe "C:\Users\JimStandard\AppData\Roaming\LibreOffice\4\user\Scripts\python\calc_multiply_numbers.py"

python解释器会给出关于这个问题的错误信息。 如果你无法弄清这个信息,请把它写在下面的评论中,我会帮你的。