给tasks 形成table 的样式

dataview 的table 可以直观的反应文件的元数据,不过不能反应 任务的元数据,请问如何给task 也输出一个table 的样式?大概只能使用 dataviewjs, 那就求个代码吧 :smiling_face_with_three_hearts:

这个主要得看 Task 元数据怎么记录的, 假设文本形式如下 (Tasks 插件的 emoji 风格属性)

- [/] 任务测试1
- [ ] 任务测试2 没完 ➕ 2024-11-01 ⏳ 2024-11-08 
- [x] 任务测试3 乙烷 ➕ 2024-11-02 🛫 2024-11-05 ⏳ 2024-11-09 ✅ 2024-11-07

则大致是用如下方式转表格

// 获取所有包含任务的文件
const files = dv.pages('"存放任务笔记的目录/子目录/"').file;
// 创建一个数组来存储任务数据
let tasks = [];

// 遍历每个文件,提取任务
files.forEach(file => {
    const fileTasks = dv.page(file.path).file.tasks;
    fileTasks.forEach(task => {
	    console.log(task);
        tasks.push(
	        [
		        dv.fileLink(task.path), // 文件名
		        task.text.split(/[➕🛫⏳✅]/)[0],      // 任务内容
		        task.completed ? "已完成" : "未完成", // 状态
		        task.created,   // 创建时间
		        task.completed ? task.completion : "--" // 完成时间
	        ]
        );
    });
});

console.log(tasks);

// 输出任务表格
dv.table(["文件名", "任务内容", "状态", "创建时间", "完成时间"], tasks);
1 个赞

好的,不过我目前是使用dataview 风格的tasks 元数据,就(due:: )或者(scheduled:: ) 这种,请问是改什么地方呢

tasks 元数据选 dataview 那几乎是一样的

// - [ ] 任务测试4  ➕ 2024-11-02
task.created       // 获取创建时间


// - [ ] 任务测试5  (due::2024-11-07) 以及 (scheduled:: 2024-11-10)
task.due              // 获取对应时间
task.scheduled


// - [ ] 任务测试6  ➕ 2024-11-02 (due::2024-11-07 ) 以及 (scheduled:: 2024-11-10)
task.created, task.due, task.scheduled   
// 混合风格时全都可用
// dv 的 inline 属性不管有没有 Tasks 插件, 都一直生效

所以需要啥时间直接改楼上代码里

tasks.push(
	        [
		        dv.fileLink(task.path), // 文件名
		        task.text.split(/[➕🛫⏳✅]/)[0],      // 任务内容
		        task.completed ? "已完成" : "未完成", // 状态
		        task.created,   // 创建时间
		        task.completed ? task.completion : "--" // 完成时间
	        ]

这一段就行

1 个赞