一种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