在 Excel 数据处理中,数据分列 是高频刚需操作 --- 把单列里用逗号、空格、竖线等分隔符拼接的文本,拆成多列独立字段。
手动用 Excel 分列效率低,大批量数据还容易出错;用 VBA 又受平台限制。本文用免费 Excel 处理库,通过 Python 实现全自动单列拆分多列,并对比 Excel 自带分列与 VBA 方案,帮你快速选出最合适的处理方式。
文章目录
-
- [一、先看传统方案:Excel 自带分列与 VBA](#一、先看传统方案:Excel 自带分列与 VBA)
-
- [1. Excel "分列" 向导](#1. Excel “分列” 向导)
- [2. VBA 宏代码](#2. VBA 宏代码)
- [二、Python 将 Excel 中的单列数据拆分为多列](#二、Python 将 Excel 中的单列数据拆分为多列)
-
- [1. 安装依赖库](#1. 安装依赖库)
- [2. 基础分列代码](#2. 基础分列代码)
- [3. 代码详解](#3. 代码详解)
- 三、进阶用法:动态分隔符(正则表达式)
- 四、方案选择建议
一、先看传统方案:Excel 自带分列与 VBA
在使用 Python 之前,先简单对比两种 Excel 原生方法,方便你根据场景选择。
1. Excel "分列" 向导
- 操作步骤:选中目标列 →「数据」→「分列」→ 按分隔符或固定宽度拆分。
- ✅ 优点:无需代码,上手简单,直观易用
- ❌ 缺点:纯手动操作,数据更新后必须重复执行,无法自动化批量处理

2. VBA 宏代码
通过 VBA 调用 Split 函数实现自动拆分,示例代码:
vba
Sub SplitColumn()
Dim rng As Range, cell As Range
Dim splitArr() As String
Dim i As Integer
' 指定处理 A 列所有有数据的行
Set rng = Range("A1", Range("A" & Rows.Count).End(xlUp))
For Each cell In rng
' 按逗号分割
splitArr = Split(cell.Value, ",")
' 写入右侧对应列
For i = LBound(splitArr) To UBound(splitArr)
cell.Offset(0, i + 1).Value = Trim(splitArr(i))
Next i
Next cell
' 自动适配列宽
Columns("B:" & Chr(64 + UBound(splitArr) + 2)).AutoFit
End Sub
- ✅ 优点:可自动化执行,处理速度快,与 Excel 高度集成
- ❌ 缺点:依赖 Windows + Excel 环境,跨平台无法使用,有一定学习成本

两种方案更适合临时处理或纯 Excel 环境。如果需要跨平台、无 Excel 依赖、批量自动化,推荐使用下面的 Free Spire.XLS for Python 方案。
二、Python 将 Excel 中的单列数据拆分为多列
1. 安装依赖库
在终端或命令提示符中执行以下命令,安装免费的 Excel 处理库 Free Spire.XLS for Python:
bash
pip install Spire.Xls.Free
该库不依赖 Excel 应用程序,使用时注意查看限制。
2. 基础分列代码
以下代码实现:读取 Excel 文件 → 将第一列按逗号拆分 → 拆分结果写入右侧列 → 保存新文件。
python
from spire.xls import *
# 1. 加载 Excel 文件
workbook = Workbook()
workbook.LoadFromFile("数据.xlsx")
# 2. 获取第一个工作表
sheet = workbook.Worksheets[0]
# 3. 遍历所有有效数据行
for i in range(sheet.LastRow):
# 读取第 1 列内容
cell_text = sheet.Range[i + 1, 1].Text
# 按逗号拆分(可改为空格、分号、竖线等)
split_parts = cell_text.split(',')
# 从第 2 列开始写入拆分后的数据
for j, value in enumerate(split_parts):
sheet.Range[i + 1, j + 2].Text = value.strip()
# 4. 保存结果文件
workbook.SaveToFile("数据分列.xlsx", ExcelVersion.Version2016)
workbook.Dispose()
3. 代码详解
• sheet.LastRow:自动获取最后非空行,无需手动指定范围。
• split(separator):按分隔符拆分字符串。
• strip():去除每个子项的前后空格,保证数据干净。
• sheet.Range[row+1, col+2].Text:从第 2 列(索引 2)开始写入,保留原第 1 列数据。
• Dispose():释放资源,防止内存泄漏。
运行效果 :执行后生成 数据分列.xlsx,原 A 列保留,拆分后的数据依次填入 B、C、D... 列。

三、进阶用法:动态分隔符(正则表达式)
实际数据中可能混杂逗号、分号、空格等多种分隔符(例如 "苹果, 香蕉; 橙子 葡萄")。此时可使用正则表达式统一拆分。
python
import re
from spire.xls import *
workbook = Workbook()
workbook.LoadFromFile("Data.xlsx")
sheet = workbook.Worksheets[0]
for i in range(sheet.LastRow):
original_text = sheet.Range[i + 1, 1].Text
# 按逗号、分号、空格拆分,支持连续分隔符
parts = re.split(r'[,; ]+', original_text.strip())
# 写入拆分结果
for j, val in enumerate(parts):
sheet.Range[i + 1, j + 2].Text = val
sheet.AllocatedRange.AutoFitColumns()
workbook.SaveToFile("MultiSeparatorSplit.xlsx", ExcelVersion.Version2016)
workbook.Dispose()
提示 :可根据需要修改正则表达式,例如添加
\|(竖线)、\t(制表符)等。
四、方案选择建议
- 临时/少量数据:直接用 Excel 自带分列向导,快速完成
- 重复执行、仅 Windows 环境:使用 VBA 宏,与 Excel 无缝配合
- 批量自动化、跨平台、无 Excel 依赖:选用 Free Spire.XLS for Python,代码简洁、样式保留、稳定性强