我去,我又忘记设计当文件没有这个标题时的处理了
```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 个赞
lool
(amjoy)
23
大佬 ,求助 
关于如何利用 dataviewjs 跨文件聚合memos的记录
memos 总是以这样的方式 插入日记文件中

官方定义

这个简单,我也用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'))
}
}
```
lool
(amjoy)
25
大佬! 谢谢 ,代码可用!
是这样的,我把任务列表和memos 都记录在日记里
然后每周我做这样的复盘时, 抽取text ,会把这两个混在一起
所以我就想着把两个分开,大佬见笑了,是我太拙劣了


lool
(amjoy)
26
大佬 我刚发现 memos 里自带检索式这种功能
我真是太拙劣了

想问大佬,有没有办法改dataview里列的列宽啊……我用您的代码来聚合文献笔记,效果非常好,就是表格宽度太窄了导致单元格变得很长,读起来有点困难……
先谢谢大佬!
Taiyee
28
大佬你好,有个小问题想请教一下你:我的日记命名格式是”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)
}
```
1 个赞
Taiyee
30
感谢大佬回复,不过修改套用后出现了查询不到内容的问题,这是我的文件情况,代码仅修改了红框里的内容:
大佬,请问按照您的代码但是报错是什么原因?nengneng’ma’f能麻烦帮看下吗?
这是修改方式,我只改了文件目录,内容和楼主设置是一样的;
你这代码全都混起来不分行的,粘贴要用shift ctrl v 粘贴
可以了大佬;非常感谢;还有二个问题,
1、请问这个标题可以隐藏吗?
2、请问筛选一周内创建的笔记可以不按照创建日期,而按照自动按照本周实际的7天去筛选么?因为有的时候今天补了上周的某个日期,那本周那边补的日记也会被拉出来。
感谢大佬的代码~不过有一个小问题是,复制到我的周记模版之后,不管是那周的周记,显示出来筛选的结果都是同样的,当下这个时间此周的内容,请问怎么修改可以根据不同的周筛选那一周的内容呢?
zj24j
38
第一行多了一个分号修改后为
let files = dv.pages("文件夹"
).filter(p=>moment(Number(p.file.ctime.ts))>moment().subtract(7, ‘days’)).sort(p=>p.file.name)
关于问题三,我用了一个比较笨的方法。
首先,我的日记格式和周记格式如图:
如果在“## 今日记录”下面有内容,则日记会有#DailyNotes/记录
这个标签。
目的是想在周记中的## 本周记录
标题下汇总并完整呈现每日的## 每日记录
内容。
但我对dataviewjs不了解,使用dataview就只能做到对汇总内容的标题链接进行提取。目前的代码如下:
```dataview
table link(join(list(file.name,"##今日记录"),"")) as "每日记录"
FROM #DailyNotes/记录
where week="2024-W24"
SORT file.ctime ASC
核心逻辑是:
- 按照
#DailyNotes/记录
和week
标签筛选出当周内有作记录的日记,
- 将日记文件名提取出来链接上
"##今日记录
字符并转换为link链接
- 但是将这个链接转为embed嵌入呈现时就始终无法实现,所以现在table只能呈现出相应内容的标题
想请论坛内大神帮忙指点一下,如何解决这个嵌入呈现的问题?
1 个赞