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

如何在Excel中将多行文本数据合并为单行?(700k条目场景)

700k条JOB文本转Excel结构化单行的解决方案

针对你手头700k条分散格式的JOB文本,推荐以下三种高效解决方案:

方法一:Excel原生Power Query(无需编程,适合普通用户)

Power Query处理大体积数据效率高,且是Excel自带工具,步骤如下:

  1. 导入文本文件:打开Excel,点击「数据」选项卡 → 「获取数据」→ 「自文件」→ 「自文本/CSV」,选中你的JOB文本文件,在弹出的导入窗口中选择「加载到」→ 「只有创建连接」,然后在右侧「查询和连接」面板双击该连接进入Power Query编辑器。
  2. 标记分组起始行:在编辑器中,添加自定义列(「添加列」→ 「自定义列」),输入公式:
    =Text.StartsWith([Column1], "JOB") and not Text.Contains([Column1], ":")
    
    这会把JOB1、JOB2这类行标记为true,作为每个JOB的起始行。
  3. 生成分组ID:再次添加自定义列,输入公式:
    =List.Accumulate(PreviousStep[自定义], {}, (state, current) => if current then List.Combine({state, {List.Count(state)+1}}) else List.Combine({state, {List.Last(state)}})){[Index]}
    
    为每个JOB分配唯一的分组ID,确保同JOB的行属于同一ID。
  4. 合并同组行并转结构:点击「转换」→ 「分组依据」,分组列选择刚生成的「自定义.1」,操作选「所有行」,新列名设为「JOB数据」。然后点击新列的扩展按钮,选择「提取值」→ 分隔符选换行符,再用「拆分列」→ 「按分隔符」(选换行符)拆分成多行,接着用「拆分列」→ 「按分隔符」(选冒号)拆分成键和值两列。最后按分组ID透视表,把键作为列、值作为值,即可得到每行一个JOB的结构化数据,点击「关闭并上载」加载到Excel。

方法二:Python脚本(超大数据首选,处理速度快)

如果熟悉Python,用脚本处理700k条数据效率极高,生成的CSV可直接导入Excel:

import csv

# 提前定义所有可能出现的字段,确保覆盖全部数据
ALL_FIELDS = [
    "JOB ID", "JOB Name", "JOB Region", "JOB Time",
    "JOB Type", "JOB Priority", "JOB Security"
]

# 读取原始文本,写入结构化CSV
with open("jobs_raw.txt", "r", encoding="utf-8") as infile, \
     open("jobs_structured.csv", "w", newline="", encoding="utf-8") as outfile:
    writer = csv.DictWriter(outfile, fieldnames=ALL_FIELDS)
    writer.writeheader()
    
    current_job = {}
    for line in infile:
        line_content = line.strip()
        if not line_content:
            # 空行代表一个JOB结束,写入当前JOB并重置
            if current_job:
                writer.writerow(current_job)
                current_job = {}
            continue
        # 识别JOB ID行(如JOB1、JOB2)
        if line_content.startswith("JOB") and ":" not in line_content:
            current_job["JOB ID"] = line_content
        else:
            # 拆分字段名和字段值
            split_pos = line_content.find(":")
            if split_pos != -1:
                field_name = line_content[:split_pos].strip()
                field_value = line_content[split_pos+1:].strip()
                current_job[field_name] = field_value
    # 写入最后一个未处理的JOB
    if current_job:
        writer.writerow(current_job)

运行脚本后,将生成的jobs_structured.csv直接用Excel打开,就是每行对应一个JOB的格式。

方法三:Excel VBA宏(适合熟悉Excel宏的用户)

如果习惯用Excel宏操作,可按以下步骤:

  1. 将原始JOB文本粘贴到Excel的一个空白工作表中。
  2. 按Alt+F11打开VBA编辑器,右键点击当前工作簿 → 插入 → 模块,粘贴以下代码:
Sub ConvertJobsToStructuredFormat()
    Dim wsSource As Worksheet, wsDest As Worksheet
    Dim lastRow As Long, i As Long, destRow As Long
    Dim currentJobID As String
    
    Set wsSource = ActiveSheet ' 假设原始数据在当前激活工作表
    Set wsDest = ThisWorkbook.Sheets.Add ' 创建新工作表存放结果
    destRow = 1
    
    ' 写入表头
    With wsDest
        .Cells(destRow, 1).Value = "JOB ID"
        .Cells(destRow, 2).Value = "JOB Name"
        .Cells(destRow, 3).Value = "JOB Region"
        .Cells(destRow, 4).Value = "JOB Time"
        .Cells(destRow, 5).Value = "JOB Type"
        .Cells(destRow, 6).Value = "JOB Priority"
        .Cells(destRow, 7).Value = "JOB Security"
    End With
    destRow = destRow + 1
    
    lastRow = wsSource.Cells(Rows.Count, 1).End(xlUp).Row
    currentJobID = ""
    
    For i = 1 To lastRow
        Dim cellText As String
        cellText = Trim(wsSource.Cells(i, 1).Value)
        
        If cellText = "" Then
            ' 遇到空行,切换到下一个JOB行
            If currentJobID <> "" Then
                destRow = destRow + 1
                currentJobID = ""
            End If
        ElseIf Left(cellText, 3) = "JOB" And InStr(cellText, ":") = 0 Then
            ' 识别JOB ID行
            currentJobID = cellText
            wsDest.Cells(destRow, 1).Value = currentJobID
        Else
            ' 拆分字段和值并写入对应列
            Dim colonPos As Integer
            colonPos = InStr(cellText, ":")
            If colonPos > 0 Then
                Dim fieldName As String, fieldValue As String
                fieldName = Trim(Left(cellText, colonPos - 1))
                fieldValue = Trim(Mid(cellText, colonPos + 1))
                
                Select Case fieldName
                    Case "JOB Name": wsDest.Cells(destRow, 2).Value = fieldValue
                    Case "JOB Region": wsDest.Cells(destRow, 3).Value = fieldValue
                    Case "JOB Time": wsDest.Cells(destRow, 4).Value = fieldValue
                    Case "JOB Type": wsDest.Cells(destRow, 5).Value = fieldValue
                    Case "JOB Priority": wsDest.Cells(destRow, 6).Value = fieldValue
                    Case "JOB Security": wsDest.Cells(destRow, 7).Value = fieldValue
                End Select
            End If
        End If
    Next i
End Sub
  1. 按F5运行宏,新工作表中会生成结构化的JOB数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:45:11