返回

CSV 拆分与多文件合并

数据互转

正在载入

正在加载工具

工具代码会在打开时按需载入,请稍候。

本工具的全部运算都发生在你的浏览器中,输入内容不会发送到任何服务器。

关于这个工具

把一个导出文件按逻辑数据行数或精确列值拆成多个 CSV,也可将多个本地 CSV 依次追加成一张表。引号中的换行仍属于原字段。合并遵循界面显示的文件顺序,保留全部数据行,包括重复行。可选择表头名称与顺序均一致的严格模式、相同列名按首个文件对齐,或按首次出现顺序取列并集。这里执行纵向追加,不是按主键关联。解析、输出规划和 CSV/ZIP 生成均在浏览器本地工作线程完成,不上传输入,也不保存输入历史。

常见用途

  • 把待导入或配送文件按固定数据记录数分批,每一份都保留真实表头。
  • 按部门、账户或分类的原始字符串生成各组文件,同时保留分组顺序、组内顺序、字符串标识符和多行备注。
  • 追加各月同结构导出文件,明确对齐不同列顺序,或在新月份增加列时审阅显式列并集。

使用方法

  1. 1.选择拆分并粘贴一份文本或选择一个本地文件;选择合并时添加 2 至 20 个本地文件。统一指定所有来源是否带表头,显式选择逗号、分号、制表符或竖线。文件编码支持 UTF-8、UTF-16LE、UTF-16BE,合并时可逐文件设置。
  2. 2.拆分时输入正整数数据行数,或先检查输入再选择精确分组列。合并时检查列表顺序,用上移、下移调整文件,再选择严格、对齐或并集策略。无表头文件只能按相同列宽和字段位置追加。
  3. 3.运行后检查统计、逐文件错误、输出名称和分页预览。任何无效来源都会阻止整个合并。修复或主动移除错误文件后重新运行;不会自动跳过文件。修改输入或选项会清除旧结果。 在电子表格中查看时保留公式保护;仅在读过警告后显式选择原始输出。拆分下载使用序号文件名的 ZIP;合并可下载 merged.csv 或包含它的 ZIP。预览截短不会截断成功且未超限的完整导出。

可执行的拆分与合并示例

按 CSV 记录拆分,保留字段内换行

{
  "mode": "split",
  "header": true,
  "safe": true,
  "sources": [
    {
      "text": "id,note\n001,\"first\nsecond\"\n002,\"comma, quote \"\"ok\"\"\"\n003,猫",
      "delimiter": ",",
      "encoding": "utf-8"
    }
  ],
  "splitBy": "rows",
  "rowsPerPart": 2
}
{
  "files": [
    {
      "name": "part-0001.csv",
      "records": [
        [
          "id",
          "note"
        ],
        [
          "001",
          "first\nsecond"
        ],
        [
          "002",
          "comma, quote \"ok\""
        ]
      ]
    },
    {
      "name": "part-0002.csv",
      "records": [
        [
          "id",
          "note"
        ],
        [
          "003",
          "猫"
        ]
      ]
    }
  ]
}

第一份包含两条数据记录,字段内换行不另算一行。每份都重复表头;前导零、逗号、转义引号和 Unicode 均保留。

原样分组按首次出现顺序输出

{
  "mode": "split",
  "header": true,
  "safe": true,
  "sources": [
    {
      "text": "group,id\nA,001\n,002\n ,003\na,004\nA,005\n001,006\n1,007",
      "delimiter": ",",
      "encoding": "utf-8"
    }
  ],
  "splitBy": "value",
  "column": 0
}
{
  "files": [
    {
      "name": "part-0001.csv",
      "records": [
        [
          "group",
          "id"
        ],
        [
          "A",
          "001"
        ],
        [
          "A",
          "005"
        ]
      ]
    },
    {
      "name": "part-0002.csv",
      "records": [
        [
          "group",
          "id"
        ],
        [
          "",
          "002"
        ]
      ]
    },
    {
      "name": "part-0003.csv",
      "records": [
        [
          "group",
          "id"
        ],
        [
          " ",
          "003"
        ]
      ]
    },
    {
      "name": "part-0004.csv",
      "records": [
        [
          "group",
          "id"
        ],
        [
          "a",
          "004"
        ]
      ]
    },
    {
      "name": "part-0005.csv",
      "records": [
        [
          "group",
          "id"
        ],
        [
          "001",
          "006"
        ]
      ]
    },
    {
      "name": "part-0006.csv",
      "records": [
        [
          "group",
          "id"
        ],
        [
          "1",
          "007"
        ]
      ]
    }
  ]
}

A 与 a、空字符串与一个空格、001 与 1 分别组成六组。A 组内部仍按原始顺序排列。ZIP 仅使用序号文件名,不把分组值写入文件名。

严格追加保留重复行和类似表头的数据

{
  "mode": "merge",
  "header": true,
  "safe": true,
  "sources": [
    {
      "text": "id,value\n001,2\n001,2",
      "delimiter": ",",
      "encoding": "utf-8"
    },
    {
      "text": "id,value\nid,value\n002,3",
      "delimiter": ",",
      "encoding": "utf-8"
    }
  ],
  "schema": "strict"
}
{
  "files": [
    {
      "name": "merged.csv",
      "records": [
        [
          "id",
          "value"
        ],
        [
          "001",
          "2"
        ],
        [
          "001",
          "2"
        ],
        [
          "id",
          "value"
        ],
        [
          "002",
          "3"
        ]
      ]
    }
  ]
}

表头名称和顺序相同,因此可追加。重复数据不去重,第二个文件内的 id,value 记录仍是数据;仅各文件实际的首条表头不作为数据追加。

严格模式拒绝顺序不同的表头

{
  "mode": "merge",
  "header": true,
  "safe": true,
  "sources": [
    {
      "text": "id,city\n001,Paris",
      "delimiter": ",",
      "encoding": "utf-8"
    },
    {
      "text": "city,id\nTokyo,002",
      "delimiter": ",",
      "encoding": "utf-8"
    }
  ],
  "schema": "strict"
}
{
  "error": "schemaStrict"
}

第二个文件的列名相同但顺序不同。严格模式会阻止整个合并;只有确实要按名称重新排列时,才显式选择按名称对齐。

按精确列名对齐到首个文件

{
  "mode": "merge",
  "header": true,
  "safe": true,
  "sources": [
    {
      "text": "id,city\n001,Paris",
      "delimiter": ",",
      "encoding": "utf-8"
    },
    {
      "text": "city,id\nTokyo,002",
      "delimiter": ",",
      "encoding": "utf-8"
    }
  ],
  "schema": "align"
}
{
  "files": [
    {
      "name": "merged.csv",
      "records": [
        [
          "id",
          "city"
        ],
        [
          "001",
          "Paris"
        ],
        [
          "002",
          "Tokyo"
        ]
      ]
    }
  ]
}

按名称对齐要求表头集合完全相同,并把第二份数据调整为 id,city 顺序。它不会去除列名空格、忽略大小写或猜测不同名称是否含义相同。

取并集增加列,但不区分缺列与空值

{
  "mode": "merge",
  "header": true,
  "safe": true,
  "sources": [
    {
      "text": "id,name\n001,Ada\n002,",
      "delimiter": ",",
      "encoding": "utf-8"
    },
    {
      "text": "id,city\n003,Tokyo",
      "delimiter": ",",
      "encoding": "utf-8"
    }
  ],
  "schema": "union"
}
{
  "files": [
    {
      "name": "merged.csv",
      "records": [
        [
          "id",
          "name",
          "city"
        ],
        [
          "001",
          "Ada",
          ""
        ],
        [
          "002",
          "",
          ""
        ],
        [
          "003",
          "",
          "Tokyo"
        ]
      ]
    }
  ]
}

新列 city 添加在 id,name 之后。源文件没有的列填为空字符串,因此 002 原有的空 name 与 003 缺少的 name 在输出中不可区分;需要这种区别时请保留源文件。

无表头文件按位置合并,分隔符可不同

{
  "mode": "merge",
  "header": false,
  "safe": true,
  "sources": [
    {
      "text": "001;Paris\n002;Tokyo",
      "delimiter": ";",
      "encoding": "utf-8"
    },
    {
      "text": "003\tOsaka",
      "delimiter": "\t",
      "encoding": "utf-8"
    }
  ],
  "schema": "strict"
}
{
  "files": [
    {
      "name": "merged.csv",
      "records": [
        [
          "001",
          "Paris"
        ],
        [
          "002",
          "Tokyo"
        ],
        [
          "003",
          "Osaka"
        ]
      ]
    }
  ]
}

两个源文件每条记录均有两个字段。输出只有三条数据记录,不添加虚拟表头。每个文件可单独设置读取分隔符;输出统一使用逗号分隔的 UTF-8 CSV。

仅表头输入按行数拆分为一份

{
  "mode": "split",
  "header": true,
  "safe": true,
  "sources": [
    {
      "text": "id,city",
      "delimiter": ",",
      "encoding": "utf-8"
    }
  ],
  "splitBy": "rows",
  "rowsPerPart": 1
}
{
  "files": [
    {
      "name": "part-0001.csv",
      "records": [
        [
          "id",
          "city"
        ]
      ]
    }
  ]
}

数据记录数为零,按行数拆分会生成一份仅表头文件。表头不计入数据行数。

仅表头输入没有分组

{
  "mode": "split",
  "header": true,
  "safe": true,
  "sources": [
    {
      "text": "id,city",
      "delimiter": ",",
      "encoding": "utf-8"
    }
  ],
  "splitBy": "value",
  "column": 1
}
{
  "files": []
}

没有数据记录就没有分组值,因此按列值拆分显示零组,不提供空 ZIP 下载。零字节输入则属于错误。

每份文件都保护可能触发公式的单元格

{
  "mode": "split",
  "header": true,
  "safe": true,
  "sources": [
    {
      "text": "=header,value\n=1+1,-42\n@SUM(A1),plain",
      "delimiter": ",",
      "encoding": "utf-8"
    }
  ],
  "splitBy": "rows",
  "rowsPerPart": 1
}
{
  "files": [
    {
      "name": "part-0001.csv",
      "records": [
        [
          "'=header",
          "value"
        ],
        [
          "'=1+1",
          "'-42"
        ]
      ]
    },
    {
      "name": "part-0002.csv",
      "records": [
        [
          "'=header",
          "value"
        ],
        [
          "'@SUM(A1)",
          "plain"
        ]
      ]
    }
  ]
}

默认保护在风险表头和数据前加单引号,包括全角符号和负数。两份文件的表头都受到保护。这会有意改变导出值;仅 CSV 引号并不能防止公式触发。

原始导出需针对当前输入显式选择

{
  "mode": "split",
  "header": true,
  "safe": false,
  "sources": [
    {
      "text": "=header,value\n=1+1,-42",
      "delimiter": ",",
      "encoding": "utf-8"
    }
  ],
  "splitBy": "rows",
  "rowsPerPart": 1
}
{
  "files": [
    {
      "name": "part-0001.csv",
      "records": [
        [
          "=header",
          "value"
        ],
        [
          "=1+1",
          "-42"
        ]
      ]
    }
  ]
}

关闭保护后保留原始解析字符串。仅在目标可信时使用:电子表格可能执行公式或重解释标识符。修改输入或转换设置会重置保护选项。

一个不等宽文件会阻止整个合并

{
  "mode": "merge",
  "header": true,
  "safe": true,
  "sources": [
    {
      "text": "id,city\n001,Paris",
      "delimiter": ",",
      "encoding": "utf-8"
    },
    {
      "text": "id,city\n002",
      "delimiter": ",",
      "encoding": "utf-8"
    }
  ],
  "schema": "strict"
}
{
  "error": "width"
}

第二份输入的记录缺少 city 字段。所有表头策略都拒绝源记录不等宽;取并集填补的是合法表结构之间的缺列,而非错误记录中的缺字段。不会输出部分合并文件。

拆分与合并常见错误

  • 把带多行备注的 CSV 按物理换行计数,而不是按逻辑记录计数。
  • 缺列或增加列时仍选择按名称对齐;只有并集允许这种表结构差异。
  • 误以为并集导出后还能区分源文件没有的列与原本的空字符串。
  • 在同一个表头选项下混用有表头和无表头文件,或期待短记录被自动补齐。
  • 期望纵向追加会自动删除重复行,或按共同 ID 补充信息。
  • 选错分隔符或编码后依赖自动修复。
  • 在电子表格中打开不可信原始输出,或以为普通 CSV 引号能阻止公式。
  • 分享未加密 ZIP 前没有检查其中的私人数据。

限制与说明

  • 每个来源最多 2 MiB 原始文件字节和 2 MiB 解码后的 UTF-8 文本、10,000 条数据记录、128 列、200,000 个数据单元格。合并接受 2–20 个文件,批次合计最多 8 MiB 原始字节、8 MiB 解码 UTF-8、40,000 条数据记录和 500,000 个输入单元格。输出最多 40,000 行、128 列、500,000 个数据单元格;拆分最多 100 份或 100 组。超限会阻止操作,不会静默截断。
  • 序列化后的 CSV 合计最多 12 MiB,ZIP 最多 13 MiB。重复表头、引号转义、UTF-8 字符和公式保护前缀都计入输出大小。ZIP 条目不压缩,因此这里只保证打包,不保证文件变小。每次工作线程操作有 10 秒截止时间并支持取消;分配预算不能保证浏览器堆内存固定在某个大小。
  • 拆分计算逻辑数据记录,不按物理文本行切割。仅表头输入在按行数模式生成一份仅表头文件,在按列值模式产生零组且不提供 ZIP;零字节输入会报错。空字符串、空格、大小写、不同 Unicode 形式以及 001 与 1 都保持不同分组。分组按首次出现顺序,组内保留原顺序。分组值和原文件名不作为压缩包条目名;输出只使用平面的 part-0001.csv 序号名称或 merged.csv。
  • 严格模式要求表头名称与顺序完全一致;对齐要求精确列名集合相同,并采用首个文件的顺序;并集按文件和表头中首次出现的顺序追加新列,缺列填为空字符串,从而丢失缺少整列与原有空单元格的区别。任何策略都要求每个来源表头非空且不重复、每条记录列宽一致。无表头合并仅按相同列宽的位置追加,不输出虚拟表头。重复行和与表头内容相同的数据行都会保留。
  • 必须显式选择编码;无效字节、冲突 BOM 和 UTF-32 均拒绝,不自动猜测旧编码或分隔符。输出统一为 UTF-8、逗号分隔、CRLF 记录分隔符,字段内部原有换行不变。原始导出保留解析后的字符串,不保留源字节、引号风格或记录分隔符。默认公式保护会在风险表头和数据前加单引号,因此改变导出值;它不是通用电子表格安全保证,表格软件仍可能自动转换标识符和日期。原始 CSV 可能触发公式,修改输入或转换选项会恢复保护。 预览每页最多 25 行、12 列,长单元格和标签仅在界面截短;下载保留上限内的完整成功结果。取消、重置、新输入、文件重排和离开页面会丢弃待完成结果与导出。此工具不上传或持久化输入,但下载文件包含处理后的数据,可能暴露隐私值,清空页面也不会删除已下载文件。

常见问题

每 1,000 行拆分是否等于每 1,000 个换行符切割?

不是。一个带引号的 CSV 字段可以含多个换行,仍只属于一条数据记录。工具先解析记录,计算时排除真实表头,再为每份按行数拆分的文件重复表头。无表头输入不会额外加表头。

应该选择哪种合并策略,无效文件会被跳过吗?

列名和顺序应完全相同时选严格;仅列顺序不同时选对齐,且要求精确列名集合相同;确实要合并新增或缺失列时才选并集。并集会追加新列并用空字符串填补缺列,丢失缺列与空值的区别。任何策略都不会修复格式错误的数据记录。 工具显示有界的逐文件诊断,并阻止整个合并及其下载。请修复该来源,或主动从列表移除后重新运行;不会静默生成部分成功的 CSV 或 ZIP。

合并会自动去重或按 ID 匹配吗?

不会。它按列表顺序追加所有数据记录,不去重、排序、去空白、自动转换值或匹配主键。需要按键补充信息时使用 CSV 关联合并;需要去重时请先明确清洗一份单独副本。

如何选择公式保护,并安全分享输出文件?

公式保护默认启用,会修改可能触发表格公式的单元格,包括特定前导空白、控制字符和支持的全角符号。每份文件重复的表头也适用。显式原始导出可保留解析字符串,但在电子表格打开时可能执行公式。两种选项都不能阻止所有表格软件的类型转换。 拆分采用 part-0001.csv 等确定的平面序号名,合并使用 merged.csv。分组值仍可见于本地清单和 CSV 内容,但不会成为压缩包条目名。ZIP 不加密,请在分享前检查文件内容。

相关工具