关于日记自定义日期文件名、代办任务排序、内容聚合等问题

我去,我又忘记设计当文件没有这个标题时的处理了

```dataviewjs
let files = dv.pages(`"600-日常/日记"`)
HeaderAggregation(files,['日程安排','日常记录'])

async function HeaderAggregation(files,headers) {
    let d = await Promise.all(files.map(async function(file) {
        let contents = []
        for(let i in headers) {
            let content = await app.vault.readRaw(file.file.path)
            let header = content.match(/^#+ .*$/mg)
            if(!header) return
            header = header.map(p=>[p.split(' ')[0].length,p.slice(p.split(' ')[0].length+1)])
            content = content.split(/^#+ /m)
            let index = header.indexOf(header.find(p=>p[1]==headers[i]))
            if(index==-1) continue
            let num = []
            for(let j =index+1;header[j]&&header[j][0]>header[index][0];j++) num.push(header[j]);
            let c = content.find(p=>p.startsWith(headers[i]))
            for(let j=0;header[index+1+j] && j<num.length;j++)
	            c+='#'.repeat(header[index+1+j][0])+' '+content.find(p=>p.startsWith(header[index+1+j][1]))
            contents.push(c?.slice(headers[i].length)??'')
        }
        if(contents.every(p=>p.replace(/\s+/,'')=='')) return
        return [file.file.link,...contents]
    }))
    d=d.filter(p=>p)
    dv.table(['name',...headers],d)
}
```

1 个赞

完美!谢谢
:grinning: :grinning: :grinning:

大佬 ,求助 :sob:
关于如何利用 dataviewjs 跨文件聚合memos的记录

memos 总是以这样的方式 插入日记文件中
image

官方定义

image

这个简单,我也用memos,只是不明白为什么要这样搞,memos里不是已经聚合了吗

```dataviewjs
let files = dv.pages(`"600-日常/日记"`) // 填入日记的文件夹或是标签
for(let file of files) {
	let content = await app.vault.readRaw(file.file.path)
	content = content.split('\n').filter(p=>/^- \d\d:\d\d /.exec(p.trim()))
	if(content.length!=0) {
		dv.header(2,file.file.link)
		dv.paragraph(content.join('\n'))
	}
}
```

大佬! 谢谢 ,代码可用!

是这样的,我把任务列表和memos 都记录在日记里
然后每周我做这样的复盘时, 抽取text ,会把这两个混在一起
所以我就想着把两个分开,大佬见笑了,是我太拙劣了 :rofl: :rofl:
image

大佬 我刚发现 memos 里自带检索式这种功能
我真是太拙劣了 :joy: :joy:

想问大佬,有没有办法改dataview里列的列宽啊……我用您的代码来聚合文献笔记,效果非常好,就是表格宽度太窄了导致单元格变得很长,读起来有点困难……
先谢谢大佬!

大佬你好,有个小问题想请教一下你:我的日记命名格式是”YYYY-MM-DD_dddd“,Calendar中周记的命名格式是”yyyy-[第]ww[周]“。因为有的日记的任务会被提前指派,所以日记不一定是当天创建的。所以想问一下这样的话如何在周记中根据日记的名称汇总当周7天的日记文件内指定标题下的内容呢?

这样试试

```dataviewjs
const weekDates = [];
const currentDate = moment();
const currentWeek = currentDate.week();
const currentYear = currentDate.year();

for (let i = 0; i < 7; i++) {
  const date = moment().year(currentYear).week(currentWeek).weekday(i);
  weekDates.push(date.format('YYYY-MM-DD_dddd'));
}

let files = dv.pages(`"600-日常/日记"`).filter(p=>weekDates.includes(p.file.name))
HeaderAggregation(files,['日程安排','日常记录'])

async function HeaderAggregation(files,headers) {
    let d = await Promise.all(files.map(async function(file) {
        let contents = []
        for(let i in headers) {
            let content = await app.vault.readRaw(file.file.path)
            let header = content.match(/^#+ .*$/mg)
            if(!header) return
            header = header.map(p=>[p.split(' ')[0].length,p.slice(p.split(' ')[0].length+1)])
            content = content.split(/^#+ /m)
            let index = header.indexOf(header.find(p=>p[1]==headers[i]))
            if(index==-1) continue
            let num = []
            for(let j =index+1;header[j]&&header[j][0]>header[index][0];j++) num.push(header[j]);
            let c = content.find(p=>p.startsWith(headers[i]))
            for(let j=0;header[index+1+j] && j<num.length;j++)
	            c+='#'.repeat(header[index+1+j][0])+' '+content.find(p=>p.startsWith(header[index+1+j][1]))
            contents.push(c?.slice(headers[i].length)??'')
        }
        if(contents.every(p=>p.replace(/\s+/,'')=='')) return
        return [file.file.link,...contents]
    }))
    d=d.filter(p=>p)
    dv.table(['name',...headers],d)
}
```

感谢大佬回复,不过修改套用后出现了查询不到内容的问题,这是我的文件情况,代码仅修改了红框里的内容:

大佬,请问按照您的代码但是报错是什么原因?nengneng’ma’f能麻烦帮看下吗?


这是修改方式,我只改了文件目录,内容和楼主设置是一样的;

你这代码全都混起来不分行的,粘贴要用shift ctrl v 粘贴

可以了大佬;非常感谢;还有二个问题,
1、请问这个标题可以隐藏吗?


2、请问筛选一周内创建的笔记可以不按照创建日期,而按照自动按照本周实际的7天去筛选么?因为有的时候今天补了上周的某个日期,那本周那边补的日记也会被拉出来。

感谢大佬的代码~不过有一个小问题是,复制到我的周记模版之后,不管是那周的周记,显示出来筛选的结果都是同样的,当下这个时间此周的内容,请问怎么修改可以根据不同的周筛选那一周的内容呢?