簡體   English   中英

R-Markdown 中的動態頁眉/頁腳 knit to word?

[英]Dynamic header/footer in R-Markdown knit to word?

我正在使用 RMarkdown 腳本生成大量報告。 我想使用參數(例如 client_name)向 word 文檔 output 添加自定義頁眉/頁腳。 當我從一個單獨的腳本渲染 RMarkdown 時,它循環遍歷客戶端列表並更改數據。 我也希望 header 也能更新。

我已經嘗試了這個問題的答案,但沒有成功,並且使用了word參考文檔來設置header。但是根據參考文檔,我只能設置參數更改時不會更新的static header。

Header 應顯示:

史蒂夫
2021 年 8 月 6 日
第 X 頁,共 3 頁

隨着“史蒂夫”在循環時更新為不同的名字。
這是我的 YAML 中的內容:

---
title: "test doc"
author: 
- Author 1
- Author 2
date: "`r format(Sys.time(), '%B %d, %Y')`"
output: 
  word_document:
    reference_docx: test1.docx
params: 
  client: "Steve"
header-includes:
   - \usepackage{fancyhdr}
   - \usepackage{lipsum}
   - \pagestyle{fancy}
   - \fancyhead[LE,L0]{"params$client <br> `r format(Sys.time(), '%B %d, %Y')` <br> Page \thepage of 3"}
  
always_allow_html: true
---

我已經分兩步實現了:

  1. 使用包含虛擬 header(例如,“mydummyheader”)的 Word 模板(如 reference_docx)。
  2. 要渲染 .rmd 文件,您可以使用 R 程序(在 R Studio 中不是交互式的)。
  3. 在同一個 R 程序中,在用您的內容創建 Word 文檔后,您使用{officer}庫將您的虛擬 header 替換為您想要的那個。 示例代碼(也替換了一個虛擬頁腳):
    library(magrittr)
    library(officer)
    rmarkdown::render("mytest.Rmd", output_format = "word_document",
                       output_file = "mytest.docx")
    read_docx("mytest.docx") %>%              
    headers_replace_all_text("mydummyheader", "myrealheader") %>%               
    footers_replace_all_text("mydummyfooter", "myrealfooter") %>%
    print(target = "mytest_updated.docx")

使用名為ClientName自定義文檔屬性 在文檔的 Header 中,有一個字段{ DocProperty ClientName}

使用您的代碼更改文檔屬性。

請參閱 Word MVP Astrid Zeeland如何使用單個 VBA 過程來讀取或寫入自定義和內置文檔屬性 這給了 vba 來處理這個問題。

抱歉,我對 R-Markdown 一無所知,但希望您需要 vba 來更改 Word 文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM