高熾揚,王 健,崔寧寧
(北京賽迪軟件測評工程技術中心有限公司,北京 100000)
電子表格文檔以數據展示直觀、操作使用便捷等特點,多年以來,在各行各業中廣泛的使用。Excel文檔作為當前主流的電子表格文檔,在某些使用場景下,可以作為一個小型的數據庫,來存儲各種業務的原始基礎數據。這些基礎數據如果要以書面正式的方式進行展示,通常需要用Word文檔以特定的組織形式來完成。本文通過對Excel文檔轉換生成Word文檔的需求進行分析,設計實現了一款基于Python的Excel文檔批量轉換生成自定義形式Word文檔的工具(以下簡稱“Excel文檔轉Word文檔工具”),并給出了一些該工具的應用場景,以便于提升相關領域文檔工作的效率。
在軟件測試領域,進行測試需求分析與策劃、測試設計與實現以及測試執行時,使用電子表格軟件編制測試項、測試用例,記錄測試執行結果,最終形成電子表格文檔,目前是一種相對簡單、高效的方式。在測試文檔的生成過程中,Excel文檔和Word文檔是最常用的文檔,在形成測試相關的Excel文檔后,只是完成了基礎數據的匯總的第一步,通常書面正式提交測試文檔成果時,需要將Excel文檔按照相關標準、要求,轉為特定形式Word文檔,以展示相關的數據信息。如圖1所示,例了測試過程中一種Excel文檔轉換生成Word文檔的場景。

圖1 Excel文檔轉換生成Word文檔示例圖
實現Excel文檔轉換生成Word文檔,通常可以使用Microsoft Word的“郵件合并”功能,通過選取包含基礎信息的Excel文檔作為數據源,在定義了合并域的Word模板中,完成Excel文檔到Word文檔的轉換生成。“郵件合并”功能對數據字段簡單、模板固定的Excel和Word文檔轉換生成相對容易完成,但是對于數據字段較多,模板經常變更的Excel和Word文檔,每次轉換生成都需重新選擇數據源和定義模板,比較容易出錯,并且在Excel文檔生成Word文檔之后,往往還需要進行大量的人工格式調整、文檔整合的工作,難以一次性生成所需要的Word文檔,效率不高。
基于Python實現的Excel文檔轉Word文檔工具,無須依賴特定表頭的Excel文檔,只要按照一定的規則在Word模板文檔中引用Excel文檔中表頭的內容,通過工具即可完成Word文檔的批量轉換生成功能,解決了由于Excel文檔數據字段較多,Word文檔模板經常變更等原因,導致的文檔轉換生成效率低下的問題。
Excel文檔轉Word文檔工具基于Python的原生庫tkinter、第三方庫xlrd和python-docx-template實現。其中,tkinter庫用于人機交互界面的制作,xlrd庫用于從Excel文檔讀取數據和格式化的信息。python-docx-template庫用于讀取使用類Jinja2語法標記過的Word模板文檔。工具包括輸入模塊、文檔生成處理模塊和輸出模塊。工具的處理流程,如圖2 所示。

圖2 Excel文檔轉Word文檔工具處理流程示意圖
輸入模塊需要準備Excel數據文檔和Word模板文檔。
(1)Excel數據文檔中,首行作為表頭,其余行作為數據行,表頭可以根據需要自行訂制。如果Excel數據文檔有多個Sheet頁,則需要各Sheet頁有相同的表頭。
(2)Word模板文檔中,固定的內容和格式可以根據需要進行自定義,重復的內容和格式可以使用模板標簽進行填充,模板標簽采用類Jinja2的語法進行定義,包括控制標簽和內容標簽,控制標簽可以進行邏輯和循環的控制,內容標簽以變量的形式獲取Excel文檔中的數據。如:
{%p jinja2_tag%}代表段落的控制標簽;
{%tr jinja2_tag%}代表表格行的控制標簽;
{%tc jinja2_tag%}代表表格列的控制標簽;
{{}}代表變量。
同時,工具定義了固定的標簽變量,包括“break”、“sheets”、“tstype”、“tables”和“allcases”等共5種。“break”代表空字符,在Word文檔中起到分隔的作用;“sheets”代表一個Excel文檔所有sheet頁的數據集合,其包含兩個主要元素:測試類型(“tstype”)和單個sheet頁的行數據集合(“tables”);“allcases”代表一個Excel文檔中包含的所有行,并在每行末尾增加測試類型元素的數據集合,是區別于“sheets”的,儲存Excel文檔中全部數據的另一種形式。“sheets”和“allcases”列表的結構,如圖3所示。
文檔生成處理模塊包括“測試項生成”、“測試用例記錄”功能、“報告其他文檔”和“正向追蹤表”功能。“測試項生成”功能,工具可以根據配置讀取Excel文檔首例值指定列的數據;“測試用例記錄”功能、“報告其他文檔”和“正向追蹤表”功能,工具會讀取Excel文檔有數據的全部列;“正向追蹤表”功能,可以按照軟件需求的順序,生成軟件需求至測試需求的正向追蹤關系表。通過選擇不同的功能,可以自動切換對應的模板。
輸出模塊可以按照規則讀入的Excel數據,將表格中對應輸入填入Word模板中含有內容標簽的相應位置,通過邏輯和循環等控制標簽的作用,進行批量、重復處理,最終完成Word文檔的生成。工具的界面圖,如圖4所示。

圖4 Excel文檔轉Word文檔工具界面圖
Excel文檔轉Word文檔工具采用單機運行的方式,基于Python實現。由于Python的跨平臺特性,工具可以在MacOS、Linux、Windows操作系統上運行使用。Excel文檔轉Word文檔工具通過自定義Excel數據文檔和Word模板的方式,不僅可以用于軟件測試文檔的轉生成,還可以用于其他類型工作文檔的轉換生成。
在軟件測試文檔生成的工作場景中,如圖5所示,為某系統的測試用例Excel文檔,該文檔包括“文檔審查”和“功能測試”兩個Sheet頁,Sheet頁表頭和多行數據。

圖5 測試場景輸入文檔之Excel文檔示意圖
如圖6所示,為測試用例的Word模板,在該模板中有固定的、重復的表格內容和段落格式。通過循環控制標簽的定義,如“{%p for sheet in sheets%}…{%p endfor%}”、“{%tr for row in sheet.tables%}…{%tr endfor%}”等,可以讓相同類型的數據,按照需要的格式進行展示;通過引用Excel文檔表頭的變量“{{row.用例名稱}}”、“{{row.用例描述}}”和“{{row.設計人員}}”等內容標簽可以獲取Excel文檔中對應的數據信息。

圖6 測試場景輸入文檔之Word模板文檔示意圖
工具對“測試用例Excel文檔”和“測試用例Word模板”的處理,最終可以生成所需要的“測試用例Word文檔”,如圖7所示,生成完成后無需對Word文檔的內容和格式進行額外的處理,即可直接打開使用。

圖7 測試場景輸出文檔之Word生成文檔示意圖
在商務文檔生成的工作中,經常會有根據專家名單制作若干專家邀請函的場景。如圖8所示;為專家信息Excel文檔,該文檔有一個Sheet頁,并包含表頭和多行數據。

圖8 商務場景輸入文檔之Excel文檔示意圖
如圖9所示,為專家邀請函的Word模板,在該模板中有固定的、重復的標題、段落內容和格式。通過循環控制標簽的定義,如“{%p for sheet in sheets %}…{%p endfor %}”、“{%p for row in sheet.tables %}…{%p endfor %}”等,可以讓相同類型的數據,按照需要的格式進行展示;通過引用Excel文檔表頭的變量“{{row.專家姓名}}”、“{{row.會議日期}}”和“{{row.通知日期}}”等內容標簽可以獲取Excel文檔中對應的數據信息。

圖9 商務場景輸入文檔之Word模板文檔示意圖
工具對“專家信息Excel文檔”和“專家邀請函Word模板”的處理,最終可以生成所需要的“專家邀請函Word文檔”,如圖10所示,生成完成后無需對Word文檔的內容和格式進行額外的處理。

圖10 商務場景輸出文檔之Word生成文檔示意圖
在進行其他文檔工作時,如測試報告、測試記錄的批量生成,多份表格簡歷轉換生成,名片信息的生成,物品標簽的生成等Excel文檔轉Word文檔的應用場景,亦可通過Excel文檔轉Word文檔工具來實現。
基于Python實現的Excel文檔批量轉換生成自定義形式Word文檔的工具,將復雜的文檔轉換工作簡化,解決了目前軟件測試工作中大量Excel文檔轉換為Word文檔的效率問題,節省了大量測試文檔工作時間。該工具通過對Word模板的自定義編制,還可以應用于商務、行政等領域的Excel文檔轉換生成Word文檔工作,亦可提升相關領域文檔工作的效率。