一種Excel表格轉txt文件的方法


一、背景

由於自己工作的關系,工作過程中會填寫很多表格,在辦公室使用電腦查看或者打印出來查看還好,一但在沒有電腦的場合——車間、出差路上、外協廠等場所,只能使用手機查看Excel數據,這時的體驗還是比較痛苦的,雖然手機可以橫屏查看,但是相比於表格內容橫屏的體驗也算不上太好。

前段時間在少數派上拜讀了hAppydOg所寫的《利用歐路詞典查詢產品信息》[1]一文,感覺很有啟發。引用文章中的一句話:

表格中的產品信息本質上來說都是一組組詞典,一個代碼對應一條詳細內容。既然是詞典,用詞典類 App 是最好的解決方案。

文章中提到的兩個工具,`ExcelToTxt`和`MdxBuilder`。其中`ExcelToTxt`是一個將Excel表格中的數據轉換成符合`Mdx`字典格式轉換標准的txt文檔的工具,而`MdxBuilder`則是將獲取的txt文檔轉換為`Mdx`字典格式的工具。

最近在學習Python,Python 是一種易於學習又功能強大的編程語言。它提供了高效的高級數據結構,還能簡單有效地面向對象編程[2]

苦於目前沒有合適的機會測試下自己的學習成果,於是想着自己用Python寫一段代碼,用來實現和ExcelToTxt實現相同的功能。

二、准備

工欲善其事必先利其器。

要讀寫Excel文檔,光有Python環境還不行,還需要有合適的庫來支撐文件的讀寫。在Python眾多第三方讀寫Excel文檔庫中,我最終選擇了OpenPyxl這個第三方庫。OpenPyXL是一個用於讀寫Excel2010及以上版本的xlsx/xlsm/xltxxltm文件的第三方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

因為寫代碼的依據是統計自己發表的各類知識產權的統計表:

1

因此也就拿這個表格做了測試。程序運行后生成的txt文檔:

2

通過MdxBuilder生成的詞典數據:

3

最終經過對代碼進行調整和優化,生成的Mdx字典詞條如上圖,已經能達到使用ExcelToTxt轉換文件生成詞典數據類似的效果。

知識共享許可協議
本作品采用 知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。

參考文獻:


  1. 《利用歐路詞典查詢產品信息》https://sspai.com/post/39503 ↩︎

  2. 《Python官方文檔》https://docs.python.org/zh-cn/3/tutorial/index.html ↩︎

  3. 《Openpyxl官方文檔》https://openpyxl.readthedocs.io ↩︎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM