Dataview怎么解析Markdown表格数据

求助!我每天会填写一个相同的模板,文件名是日期,例如2024.9.3,内容是一个表格,第一列是name,第二列col2(内容是开放的),第三列是col3(内容是开放的)。怎么样用dateview统计某个人在某一个时间段的col2和col3的内容?
比如:

name col2 col3
张三 内容A 内容B
李四 内容C 内容D
TABLE col2 AS "Col2内容", col3 AS "Col3内容"
FROM "统计"
WHERE name = "张三"

这个应该怎么实现呢

个人理解 dataview 没把 “md 表格” 作为默认的可解析对象,
即, 虽然笔记内的 列表 (任务条目), 文档属性, 标签, … 都可以拿 DQL 直接访问到,
但 md table 不行

所以还是得自己读文本内容, 把 table 解析出来再输出,
这事 dql 没戏, 还是写 dataviewjs 吧
可以参考 DataviewJS 的提取与汇总 - 经验分享 尤其可以借鉴 汇总原文 那一节, 比如搜 "汇总代码块、Callout" 那里

个人建议是把 table 转成 json, 比较能抗数据结构的变化, 例 (以下函数把文本形式的 table 解析为 [{name: xx, col1: yy, col2: zz}, {name: x2, col1: y2, col2: z2}, ...])

const parseTable = (content, noteFileName) => {
  const lines = content.trim().split('\n');

  // 查找表头行并确定列名
  const headers = lines[0].slice(1, -1).split('|').map(cell => cell.trim());

  // 查找数据行并提取信息,每一行为一个对象
  let dataRows = lines.slice(2).map(row => {
    const rowData = {};
    const cells = row.slice(1, -1).split('|').map(cell => cell.trim());
    headers.forEach((header, index) => {
      rowData[header] = cells[index];
    });
    rowData['filename'] = noteFileName;
    return rowData;
  });
  return dataRows;
};

如果确定表格结构不会改, 那也可以写简单点, 笔记里直接过滤以 | 起头的行, 对所有这种行, 切分后把固定位置的某几个元素取出, 就是所需数据

我大概明白你意思了,非常感谢!:pray:看来还是需要继续学习

不好解析,一般是用正则,太不优雅了,也不稳定,如果写成这个样子就能好解析

name:: a
col2:: b
col3:: c

name:: e
col2:: d
col3:: f