一、背景
由於自己工作的關系,工作過程中會填寫很多表格,在辦公室使用電腦查看或者打印出來查看還好,一但在沒有電腦的場合——車間、出差路上、外協廠等場所,只能使用手機查看Excel數據,這時的體驗還是比較痛苦的,雖然手機可以橫屏查看,但是相比於表格內容橫屏的體驗也算不上太好。前段時間在少數派上拜讀了hAppydOg所寫的《利用歐路詞典查詢產品信息》[1]一文,感覺很有啟發。引用文章中的一句話:
文章中提到的兩個工具,`ExcelToTxt`和`MdxBuilder`。其中`ExcelToTxt`是一個將Excel表格中的數據轉換成符合`Mdx`字典格式轉換標准的txt文檔的工具,而`MdxBuilder`則是將獲取的txt文檔轉換為`Mdx`字典格式的工具。表格中的產品信息本質上來說都是一組組詞典,一個代碼對應一條詳細內容。既然是詞典,用詞典類 App 是最好的解決方案。
”
最近在學習Python,Python 是一種易於學習又功能強大的編程語言。它提供了高效的高級數據結構,還能簡單有效地面向對象編程[2]。
苦於目前沒有合適的機會測試下自己的學習成果,於是想着自己用Python寫一段代碼,用來實現和ExcelToTxt
實現相同的功能。
二、准備
工欲善其事必先利其器。
要讀寫Excel文檔,光有Python環境還不行,還需要有合適的庫來支撐文件的讀寫。在Python眾多第三方讀寫Excel文檔庫中,我最終選擇了OpenPyxl
這個第三方庫。OpenPyXL
是一個用於讀寫Excel2010及以上版本的xlsx/xlsm/xltx
及xltm
文件的第三方Python庫[3]。通過OpenPyXL
庫可以完成Excel的大多數操作。
三、思路
因為最終我只需要每個單元格中的值即可,在OpenPyxl
中,我們可以通過cell.value
屬性,通過迭代單元格獲取每個單元格的值:
for row in rows:
for cell in row:
cellvalue = cell.value
通過這樣的方法,可以分別獲取Excel表格中的標題部分和正文部分的內容,然后再通過迭代將他們一一關聯起來。
獲取了標題和正文對應的數據,還需要將他們保存起來以便后續調用:基於List
是有序的,可更改的且允許重復成員,我選擇使用List
來存儲最終獲得的數據。
最終將所需的數據依次寫入txt文檔。
四、實現步驟
1. 讀取Excel表格數據-
讀取標題
在實現這部分功能時,考慮到后續會使用到標題行故將標題行單元格的值放到了
TotalTitleName
這個List
中:
TotalTitleName = []
for row in ws['A1':'I1']:
for cell in row:
TotalTitleName.append(cell.value)
-
遍歷表格數據
要獲取表格數據,和前文獲取標題行數據類似,也是遍歷所有單元格,只是這次遍歷的是標題行外的行。
遍歷過程中首先將各行數據寫入
List_CellValue
中,遍歷完一行再將其值寫入List_AllCell_Value
中,其中List_AllCell_Value
是一個包含所有行數據的二維List
:
# 遍歷單元格
List_AllCell_Value = []
for row in ws['A2':'I9']:
if row[0].value != None:
List_CellValue = []
for cell in row:
List_CellValue.append(cell.value)
List_AllCell_Value.append(List_CellValue)
-
將標題與每行對應數據關聯
將獲取到的標題和單元格內容進行關聯,並將關聯后的文件寫入新的
List
中:
Info_Row_Value = []
for x in range(0:8):
Info_All_Row_Value = []
for y in range(0:9):
NewCatlog = Titlename[y] +':'+ Textvalue[x][y]
Info_All_Row_Value.append(NewCatlog)
Info_All_Row_Value[y] =Info_All_Row_Value[y] + '<p>'
Info_Row_Value.append(Info_All_Row_Value)
如此便完成了寫入txt文件中讀取Excel表格部分的工作,接下來就是要將獲得的`List`中的數據寫入txt文檔即可。
- 寫入txt文件
這里采用直接將數據寫入txt文件的方式:
# 寫入數據
with open(fname,"w") as f:
for x in range(0:8):
for y in range(0:9):
f.writelines(InputListInfo[x][y])
# 關閉txt文檔
f.close
因為寫代碼的依據是統計自己發表的各類知識產權的統計表:
因此也就拿這個表格做了測試。程序運行后生成的txt文檔:
通過MdxBuilder
生成的詞典數據:
最終經過對代碼進行調整和優化,生成的Mdx
字典詞條如上圖,已經能達到使用ExcelToTxt
轉換文件生成詞典數據類似的效果。

本作品采用 知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。
參考文獻:
《利用歐路詞典查詢產品信息》https://sspai.com/post/39503 ↩︎
《Python官方文檔》https://docs.python.org/zh-cn/3/tutorial/index.html ↩︎
《Openpyxl官方文檔》https://openpyxl.readthedocs.io ↩︎