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

如何用JavaScript解析含合并单元格的CSV文件并输出指定结构数据

你要的这种针对Excel合并单元格导出CSV后自动填充空值、再按指定字段聚合的场景,没有完全开箱即用的现成解析工具,不过可以结合JS生态最成熟的CSV解析库Papa Parse,加少量自定义逻辑实现,稳定性远高于完全手写CSV解析逻辑。

实现步骤

  1. 首先安装Papa Parse处理基础CSV解析逻辑,它已经覆盖了CSV各种边缘场景的兼容,比如带逗号/引号/换行的单元格、编码兼容等问题:
npm install papaparse

如果是浏览器环境直接下载库的单文件引入即可使用。

  1. 编写解析和聚合逻辑,示例代码如下:
import Papa from 'papaparse'

// 你的CSV内容,也可以通过文件读取传入
const csvContent = `Main ,MainDescription,Secondry,Code
First,First  Description,First Secondry 1,CODE 1
,,First Secondry 2,CODE 2
,,First Secondry 3,CODE 3
,,First Secondry 4,CODE 4
,,First Secondry 5,CODE 5
,,First Secondry 6,CODE 6
,,First Secondry 7,CODE 7
,,First Secondry 8,CODE 8
Second,Second Description,Second Secondry 1,CODE 9
,,Second Secondry 2,CODE 10
,,Second Secondry 3,CODE 11
,,Second Secondry 4,CODE 12
,,Second Secondry 5,CODE 13
,,Second Secondry 6,CODE 14
,,Second Secondry 7,CODE 15
,,Second Secondry 8,CODE 16`

// 第一步:用Papa Parse解析CSV为基础行列数据
const parseResult = Papa.parse(csvContent, { header: false, skipEmptyLines: true })
const rows = parseResult.data
const headers = rows[0].map(item => item.trim()) // 处理表头空格
const dataRows = rows.slice(1)

// 第二步:填充空单元格(继承上一行同列的非空值)
let lastValidRow = {}
const filledRows = dataRows.map(row => {
  const filled = {}
  headers.forEach((header, index) => {
    const val = row[index]?.trim()
    filled[header] = val || lastValidRow[header]
  })
  lastValidRow = { ...filled }
  return filled
})

// 第三步:按Main字段聚合,归集Secondry和Code为数组
const result = Object.values(
  filledRows.reduce((acc, cur) => {
    if (!acc[cur.Main]) {
      acc[cur.Main] = {
        Main: cur.Main,
        MainDescription: cur.MainDescription,
        Secondry: [],
        Code: []
      }
    }
    acc[cur.Main].Secondry.push(cur.Secondry)
    acc[cur.Main].Code.push(cur.Code)
    return acc
  }, {})
)

console.log(JSON.stringify(result, null, 2))

运行上述代码即可得到你要求的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:36:07