You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel非结构化文本中润滑油名称与用量提取方案咨询

Excel杂乱文本中提取润滑油名称及用量的解决方案

一、公式组合法(无VBA权限时优先用)

1. 基于油名列表提取

先在辅助列(比如B列)整理所有可能的润滑油名称(如15W-40、Diesel Exhaust Fluid),然后用以下公式拼接结果(假设源数据在A1):

=LOOKUP(2^15,SEARCH($B$1:$B$10,A1),$B$1:$B$10)&" @ "&TRIM(MID(A1,SEARCH("[0-9.]",A1),LEN(A1)-SEARCH("[0-9.]",A1)+1))
  • LOOKUP部分:从油名列表中匹配A1里的油名
  • MID部分:提取从第一个数字/小数点开始到文本末尾的内容(包含用量和备注)

2. 无油名列表时的正则思路

用FILTERXML模拟正则提取,适配常见格式:

=TEXTJOIN(" @ ",TRUE,FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s[starts-with(.,'15W') or starts-with(.,'Diesel') or contains(.,'gallons')]"))

需要根据实际油名前缀调整starts-with的条件,确保覆盖所有目标油名。

二、VBA自定义函数(灵活适配复杂格式)

按Alt+F11打开VBA编辑器,插入模块后粘贴以下代码:

Function ExtractLubeInfo(inputText As String, Optional oilList As Range) As String
    Dim regEx As Object, matches As Object
    Dim oilName As String, quantity As String
    
    Set regEx = CreateObject("VBScript.RegExp")
    ' 匹配数字+gallons及后续备注
    regEx.Pattern = "(\d+\.?\d*)\s*gallons.*"
    If regEx.Test(inputText) Then
        Set matches = regEx.Execute(inputText)
        quantity = matches(0).SubMatches(0) & " gallons" & Mid(inputText, matches(0).FirstIndex + matches(0).Length)
    End If
    
    ' 优先从油名列表匹配
    If Not oilList Is Nothing Then
        For Each cell In oilList
            If InStr(inputText, cell.Value) > 0 Then
                oilName = cell.Value: Exit For
            End If
        Next
    Else
        ' 无列表时匹配常见油名格式
        regEx.Pattern = "^([A-Za-z0-9- ]+?)(?=\s+\d)"
        If regEx.Test(inputText) Then oilName = Trim(regEx.Execute(inputText)(0).SubMatches(0))
    End If
    
    ExtractLubeInfo = IIf(oilName <> "" And quantity <> "", oilName & " @ " & quantity, "未匹配有效信息")
End Function

使用示例:

  • 带油名列表:=ExtractLubeInfo(A1,$B$1:$B$10)
  • 无油名列表:=ExtractLubeInfo(A1)

三、Power Query批量处理(适合大数据集)

  1. 选中源数据列,点击【数据】→【从表格/区域】导入Power Query编辑器
  2. 添加自定义列,粘贴以下M语言公式(替换YourColumnName为实际列名):
let
    input = [YourColumnName],
    numPos = Text.PositionOfAny(input, {"0".."9"}),
    quantity = Text.Trim(Text.Middle(input, numPos, Text.Length(input) - numPos)),
    oilName = Text.Trim(Text.BeforeDelimiter(input, Text.Start(quantity, 1))),
    result = oilName & " @ " & quantity
in
    result
  1. 点击【关闭并上载】,即可生成标准化后的数据集。

内容的提问来源于stack exchange,提问作者cswift404

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 22:33:15