【已解决】如何使用 dataview 插件过滤出某个二级标题下的内容

@柠夏2022 const pages = dv.pages(‘!“00数据管理”’) 改成 const pages = dv.pages(‘“目标文件夹相对路径或者留空” and #标签名’)

@chenlee_ob 建议不要用office处理代码
代码.txt,下载后直接复制到Ob
https://www.aliyundrive.com/s/5SDBB3btQvH
提取码: 75pb

首先还是感谢。还是觉得好复杂,现在按照你的方式一替换就出错,不改就不出错。晕。
觉得应该把文件位置、标签等都在前面定义留出接口,好比let filetags =“指定标签”。我们小白在前面改改就行了。上代码里改也没学过正则等,看着头晕眼花的。现在出错也不知道是语法,还是其它。
还请大神把代码改得清晰易读,多加些注释,谢谢啦

谢谢大佬 大佬牛逼

请教一下,我想过滤一下,

  1. 链接到 滴答清单 的所有笔记
  2. 按照字段:编码 排序
  3. 展示的时候隐藏标题

最终搞定, 感谢大牛:

//输入目标小标题(含#),例如:#### 项目进度条
const header = '### 正文'

// 按【路径或文件夹、文件名、标签】筛选并按修改时间降序排列
const pages = dv.pages('[[<% tp.file.title %>]]').filter(p => p.file.name.includes("") && p.file.path.includes("fn")).filter(p => p.file.name.includes("") || p.file.name.includes("")).sort(p=>p.编码,"asc");

// This regex will return text from the Summary header, until it reaches
// the next header, a horizontal line, or the end of the file
const regex = new RegExp(`\n${header}\r?\n(.*?)(\n#+ |\n---|$)`, 's')

for (const page of pages) {
    const file = app.vault.getAbstractFileByPath(page.file.path)
    // Read the file contents
    const contents = await app.vault.read(file)
    // Extract the summary via regex
    const summary = contents.match(regex)
    //显示全部包括空结果if (summary) {
    //不显示空结果if (summary && summary[1].trim()) {
    if (summary && summary[1].trim()) {
        // Output the header and summary
        dv.header(4, '[['+ file.basename + '|'+page.编码+' '+page.需求+']]')
        //或者dv.header(2, '[[' + file.basename + ']]')
        dv.paragraph(summary[1].trim())
    }
}
1 个赞

你好大佬,怎么指定只查最近5天内的数据

在pages上加sort和filter函数进行过滤。

参考:

.sort(p=>moment(p.stat.mtime),'desc').filter(p=>(moment().diff(moment(p.stat.mtime),'days')<=10))

您好!我参考了您的代码,将整个代码改成了如下的形式,但报错了,请问是什么原因呢?(我的需求是从每天的日记中抽出## 今日待办这个2级标题,然后需要筛选出2023年最后一周的日记)

//输入目标小标题(含#),例如:#### 项目进度条
const header = '## 今日待办'

// 按【路径或文件夹、文件名、标签】筛选并按修改时间降序排列
const pages = dv.pages('"300生活/320日程+日记" or ""').filter(p=>(moment().diff(moment(p.stat.mtime),'days')<=10)) && !p.file.path.includes("template")).filter(p => p.file.name.includes("") || p.file.name.includes("")).sort(p=>p.file.mtime,"desc");

// This regex will return text from the Summary header, until it reaches
// the next header, a horizontal line, or the end of the file
const regex = new RegExp(`\n${header}\r?\n(.*?)(\n#+ |\n---|$)`, 's')

for (const page of pages) {
    const file = app.vault.getAbstractFileByPath(page.file.path)
    // Read the file contents
    const contents = await app.vault.read(file)
    // Extract the summary via regex
    const summary = contents.match(regex)
    //显示全部包括空结果if (summary) {
    //不显示空结果if (summary && summary[1].trim()) {
    if (summary && summary[1].trim()) {
        // Output the header and summary
        dv.header(2, page.file.link)
        //或者dv.header(2, '[[' + file.basename + ']]')
        dv.paragraph(summary[1].trim())
    }
}

p.stat.mtime是用obsidian的app.vault.getFiles()获取的文件列表才能用的,文件属性是从TFile和TAbstractFile提供的属性中来获取;而用dv.pages()获取的文件属性是经过dataview插件封装过的,文件修改时间应该是p.file.mtime

参考 Metadata on Pages - Dataview (blacksmithgu.github.io)

收到!谢谢你哇!