Obs130|用Dataviewjs將Dataview表格產生成Markdown格式,並複製到剪貼簿的技巧

Dataview讓我們將筆記當成資料來查詢,但查詢出來的表格卻無法搜尋、無法複製再利用。今天分享一個使用Dataviewjs來產生表格與Copy按鈕的作法:

  1. 以Dataviewjs查詢出表格
  2. 在表格下方產生一個【Copy】按鈕
  3. 點擊【Copy】按鈕後,將Dataview表格轉換成Markdown表格,並複製到系統剪貼簿
  4. 到需要插入Markdown表格的位置按Ctrl+V

1. Dataviewjs

```dataviewjs
let dataArray = dv.pages("")
  .where(page => (dv.date("today") - page.file.mday <= dv.duration("1days")))
  .sort(page =&gt page.file.mday, "desc")
  .map(page => [page.file.link, page.type, page.tags, 
    page.file.cday, page.file.mday]);
dv.table(["File", "Type", "Tags", "Created", "Modified"], dataArray);

const button = dv.el("button", "Copy");
button.onclick = function() {
  new Notice("Dataview content copy to clipboard!");
  let md_text = dv.markdownTable(["File("+dataArray.length+")", "Type", "tags", 
    "Created", "Modified"], dataArray);
  navigator.clipboard.writeText(md_text);
}
```

1.1. 本日建立或修改的筆記

```dataviewjs
let dataArray = dv.pages(&#039;&#039;)
  .where(page => (dv.date("today") - page.file.mday <= dv.duration("12hours")))
  .sort(page => page.file.mday, "desc")
  .map(page => [page.file.link, page.type, page.file.cday, page.file.mday]);
dv.table(["File", "Type", "Created", "Modified"], dataArray);

const button = dv.el("button", "Copy");
button.onclick = function() {
  new Notice("Dataview content copy to clipboard!");
  let md_text = dv.markdownTable(["File("+dataArray.length+")", "Type", 
    "Created", "Modified"], dataArray);
  navigator.clipboard.writeText(md_text);
}
```

2. 簡單點的範例

```dataview
table type, created
from #test
```
  • dv.pages(來源):傳回符合條件的筆記物件陣列
  • page是傳入的一個筆記物件
  • page.type 是取出YAML區的type欄位
  • page.file.link 是筆記物件的file屬性,file代表作業系統的檔案物件
  • dv.table([標題陣列], 資料陣列) 生成Dataview表格
  • dv.el 建立HTML標籤
  • dv.markdownTable([標題陣列], 資料陣列) 生成Markdown格式的Dataview表格
```dataviewjs
let data = dv.pages("#test").map(page => [page.file.link, page.type, page.created]);
dv.table(["Link", "Type", "Created"], data);
let btn = dv.el("button", "Copy table");

btn.onclick = function() {
  new Notice("COPY!")
  let md_text = dv.markdownTable(["File("+data.length+")", "Type", "Created"], data);
  navigator.clipboard.writeText(md_text);
}
```
| File(7)                                               | Type | Created             |
| ----------------------------------------------------- | ---- | ------------------- |
| [[test.md\|test]]                                     | 測試筆記 | 2023-05-03 08:51:26 |
| [[test-columns.md\|test-columns]]                     | 專案筆記 | 2022-05-03 20:57:16 |
| [[test-Admonitions.md\|test-Admonitions]]             | 專案筆記 | 2022-03-31 20:15:33 |
| [[300-R興趣/300-01-筆記方法/康乃爾筆記法 Notes.md\|康乃爾筆記法 Notes]] | 彙總筆記 | 2022-03-26 16:15:11 |
| [[300-R興趣/300-01-筆記方法/PARA 說文解字.md\|PARA 說文解字]]       | 原子筆記 | 2022-03-26 16:18:50 |
| [[042-Chat/Chats/test-chat.md\|test-chat]]            | 專案筆記 | 2023-03-07 10:48:33 |
| [[000-Index/!!! StartHere !!!.md\|!!! StartHere !!!]] | 專案筆記 | 2022-03-26 16:21:32 |

3. 相關鏈接

4. 教學影片

##

您可能也會有興趣的類似文章

您可能也會喜歡…

2 個回應

  1. 匿名訪客表示:

    .sort(page =&gt page.file.mday, “desc”)
    在第一段代码中发现了一个小bug

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *