python识别excel文件格式 ——(专栏:基于python编写简单office阅卷程序②)

本文介绍了如何使用python的Openpyxl库识别.xlsx文件,以及通过将.xlsx转换为.xml来补充识别更多格式。文章详细讲解了Openpyxl库的工作簿、工作表、行列和单元格的读取方法,以及通过解析xml文件识别Excel的边框等格式信息。此外,还讨论了Office文件的默认格式规则和xml文件结构的探索方法。
摘要由CSDN通过智能技术生成

● 研二在读学生,非工科非计算机专业,故代码简陋初级勿喷,本文仅为记录和快乐分享。
○ 感谢肯定,感谢点赞收藏分享,转载请注明本页出处即可。 ____Ⓙ即刻@王昭没有君

在这里插入图片描述

本文仅为笔者摸索总结-欢迎订正补充交流讨论-

❤python识别excel文件格式 ——(专栏:基于python编写简单office阅卷程序②)

————————

一、整体思路:

🍒1. 使用python第三方库Openpyxl识别尽可能多的excel格式;(更简单方便)

  • openpyxl库不支持读取.xls格式文件,支持.xlsx格式文件,请提醒学生上交.xlsx文件
  • 若文件格式为.xls格式考虑改用xlrd库读取,语法与Openpyxl大同小异,请读者自行探索吧~
  • 使用 dir() 查看当级存在的属性或下级对象(不含双下划线__的)
  • 使用 (.属性)试图调用查看属性,或(.对象)进入下级对象

🍒2. 将.xlsx转为.xml格式文件,读取标签,补充识别Openpyxl库无法识别的格式;

  • 解压excel.xlsx文件为xml文件(不止一个,有好几个文件夹)
  • 找到相应的属性在xml文件中的存储标签名和层级
  • 使用(层级.tag)(层级.attrib)(层级.text) 试图取出该属性

🍒3. office有个懒惰且简洁的规则是,很多默认属性和格式,若该文档中作者未修改默认格式或属性,则在xml文件中该属性或格式的标签不存在 ,则在用python抽取该格式或属性时,返回值为None或空,有时还会提示不存在而报错。例如:

  • 默认字体为等线(有的版本是宋体)
  • 默认字号11(也可能因版本不同而不同或.xls和.xlsx差异)
  • 默认无边框等
    而在修改了这些格式后,该属性标签会存储在.xlsx和.xml文件中。又不像是完全的日志文件。

————————

二、使用python库情况

此处均为笔者编写阅卷程序用到的,若只识别excel格式,并不需要以下全部:

import xlrd										# 读取excel文件,主要是获取名单和创建地址用
import openpyxl									# 读取excel试卷,因为相比与xlrd的语法我更喜欢
#想用xlrd读取试卷.xlsx也可以,如果是试卷.xls文件则只能用xlrd库读
import os										# 使用文件路径等
import xml.etree.ElementTree as ET				# 读取xml文件

除此之外,在解压转为xml文件时还用到以下库:

import os										# 因笔者分开写的解压程序,解压也用到os库
import xlrd										# 因笔者分开写的解压程序,解压也用到xlrd库,主要是获取名单和创建地址用
import shutil									# 删除配置文件
import zipfile
# 解压word(.docx)、excel(.xlsx)、ppt(.pptx)文件成为.xml格式文件

————————

三、openpyxl库识别表格文件结构:

  • workbook:

    • worksheets:

      • rows:
        • cells:
      • columns:
        • cells:
      • cells:
  • worksheet可.调用行列也可直接调用单元格,行列也可调用行列内的单元格

  • 图表和文本框游离于行列和单元格

在这里插入图片描述

🍍1.读取工作簿:openpyxl.load_workbook ( ’ 文件地址 ’ )

workbook = openpyxl.load_workbook(r"F:\测试\csdn.xlsx")	  # 默认data_only = True  仅取值
workbook2 = openpyxl.load_workbook(r"F:\测试\csdn.xlsx", data_only = False ) 	# 取公式

(1)data_only参数默认为True,读取时仅读取值,data_only =False时则读取公式。
(2)使用 dir(workbook) 查看当级存在的属性或下级对象(不含双下划线__的);

🍍2.读取工作表:workbook.worksheets[序号]

print(workbook.sheetnames)								# 输出所有sheet表名 (列表形式)
worksheet = workbook.worksheets[0]						# 按照顺序读取工作表,这个最好用,有的学生乱改名
worksheet = workbook['Sheet1']							# 按照工作表名读取工作表
worksheet = workbook.get_sheet_by_name("New Title")  	
# 按照工作表名读取工作表的另一种写法,不如workbook['Sheet1']好用,后续有些属性读不出来或报错提醒
worksheet = workbook.create_sheet("表名")				# 创建新工作表,写在这里但阅卷用不到

(1)使用 dir(worksheet) 查看当级存在的属性或下级对象(不含双下划线__的);
(2)有关工作表的属性基本都在worksheet部分里;很遗憾行高列宽不在;

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值