【问题标题】:extract number from cell in openoffice calc从openoffice calc中的单元格中提取数字
【发布时间】:2012-10-29 12:05:34
【问题描述】:

我在这样的开放式办公室有一个专栏:

abc-23

abc-32

abc-1

现在,我只需要使用 calc 中的公式和正则表达式来获得数字 23、32 和 1 的总和。 我该怎么做?

我试过了

=SUMIF(F7:F16,"([:digit:].)$")

但不知何故,这不起作用。

【问题讨论】:

  • 问题反复出现是否值得编写宏?

标签: openoffice.org openoffice-calc libreoffice


【解决方案1】:

从 LibreOffice 6.4 开始,您可以使用新添加的REGEX function 从字符串中通用提取所有数字:

=REGEX(A1;"[^[:digit:]]";"";"g")

4个函数参数的解释:

  1. A1: 要从中提取数字的字符串
  2. "[^[:digit:]]":匹配每一个不是十进制数字的字符。另见list of regular expressions in LibreOffice
    • 外部方括号[] 封装了要搜索的字符列表
    • ^添加了一个NOT,表示搜索列表中包含的每个not字符都匹配
    • [:digit:] 代表任何十进制数字
  3. "":将匹配的字符(每个非数字)替换为空=删除它们
  4. "g":替换所有匹配项(不要在第一个非数字字符后停止)

【讨论】:

    【解决方案2】:

    不幸的是,Libre-Office 仅在查找/替换和搜索中支持正则表达式。 如果这是一次性交易,我会将 A 列复制到 B 列,然后在 B 中使用 [data] [text to columns] 并使用 - 作为分隔符,将 B 列中的所有文本和C列中的数字。

    或者,您可以在 B 列中使用 =Right(A1,find("-",A1,1)+1),然后对 C 列求和。

    【讨论】:

      【解决方案3】:

      我认为这不是你想要的,但也许它可以帮助你或其他人。

      这都是关于substring(在Calc 中调用[MID][1] 函数):

      首先:选择您的单元格(例如“abc-23”内容)。

      其次:输入起始长度(“british”-->start length 4 = tish)。

      之后:要打印所有剩余的文本,您可以使用[LEN][2] 函数(称为长度)和您的单元格(“abc-23”)作为参数。 代码现在看起来像这样:

      D15="abc-23"
      =MID(D15; 5; LEN(D15))
      

      输出为:23

      当您编辑数字时(在本例中为 23),没问题。但是,如果您更改之前的任何内容(文本“abc-”),算法就会崩溃,因为开始长度被定义为“5”。

      【讨论】:

        【解决方案4】:

        将字符串粘贴到单元格中,打开搜索和替换对话框 (ctrl + f) 扩展搜索选项标记正则表达式搜索 ([\s,0-9])([^0-9\s])+ 和用 $1 替换它

        根据您的需要调整正则表达式

        【讨论】:

          【解决方案5】:

          我没有弄清楚如何直接在 OpenOffice/LibreOffice 中执行此操作。在网上搜索和尝试各种公式的挫折之后,我意识到我的工作表是一个简单的 CSV 格式,所以我在 vim 中打开它并使用 vim 内置的类似 sed 的功能在 vim 命令模式下查找/替换文本:

          :%s/abc-//g
          

          这仅对我有用,因为没有其他列具有此匹配文本。如果有其他列具有相同的文本,那么解决方案会有点复杂。

          如果您的工作表不是 CSV,您可以将列复制到文本文件并使用 vim 查找/替换,然后将数据粘贴回电子表格。对我来说,这比试图在 LibreOffice 中解决这个问题更令人沮丧......

          【讨论】:

          • 嗯,你没有读过菲利克斯的回答,是吗?它与 LO 中的算法相同。如果你不尝试,你永远学不会新东西。 ;-)
          • @busybee 有时间我会试试的。目前,除了工作和其他事情之外,外籍人士税即将到期,因此完成工作比摆弄更重要。
          【解决方案6】:

          在不知道是否真的有兴趣的情况下,我不会为解决方案而烦恼,但是,您可以编写一个宏来执行此操作。提取所有数字,然后通过检查文本中包含的数字来实现总和。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多