Zep*_*hyr 3 python excel pandas openpyxl
作为 Python 的学习项目,我尝试读取目录中的所有 Excel 文件并提取所有工作表的名称。
我一直在尝试几个可用的 Python 模块来执行此操作(pandas在本示例中),但遇到了其中大多数依赖于openpyxl.
这是我当前的代码:
import os
import pandas
directory_root = 'D:\\testFiles'
# Dict to hold all files, stats
all_files = {}
for _current_path, _dirs_in_path, _files_in_path in os.walk(directory_root):
# Add all files to this `all_files`
for _file in _files_in_path:
# Extract filesystem stats from the file
_stats = os.stat(os.path.join(_current_path, _file))
# Add the full file path and its stats to the `all_files` dict.
all_files[os.path.join(_current_path, _file)] = _stats
# Loop through all found files to extract the sheet names
for _file in all_files:
# Open the workbook
xls = pandas.ExcelFile(_file)
# Loop through all sheets in the workbook
for _sheet in xls.sheet_names():
print(_sheet)
Run Code Online (Sandbox Code Playgroud)
openpyxl这会在调用pandas.ExcelFile():时引发错误ValueError: Max value is 14。
据我在网上找到的信息,这是因为该文件包含 14 以上的字体系列。如何读取 Excel (xlsx) 文件,同时忽略任何现有格式?
我能找到的唯一潜在解决方案建议修改原始文件并删除格式,但这不是一个选项,因为我不想以任何方式修改文件。
有没有另一种方法可以做到这一点,而没有这种格式限制?
问题是您的文件不符合 Open Office 规范。仅允许某些字体系列。一旦openpyxl遇到不符合规范的字体,就会抛出此错误,因为OpenPyxl 只允许符合规范的 excel 文件。
某些 Excel 阅读器可能不会遇到此问题,并且对于不符合 OpenOffice 规范的文件更加灵活,但 openpyxl 仅实现 Apache Open Office 规范。
正在解析的 xml 将包含有关字体的信息,如下所示:
<font>
<b/>
<sz val="11"/>
<color rgb="FF000000"/>
<name val="Century Gothic"/>
<family val="34"/>
</font>
Run Code Online (Sandbox Code Playgroud)
如果 family 值超过 14,openpyxl 会抛出此异常ValueError。Open Office 中有一个底层描述符可以控制这一点。
当其他读者(例如 Microsoft Office 365 Excel)遇到这种情况时,它会在将文件加载到兼容字体(默认字体 Calibri)时更改字体系列。
作为解决方法,如果您不想更改该值(如 Microsoft Excel 所做的那样),您可以对描述符进行猴子修补以允许更大的最大字体系列。
<font>
<b/>
<sz val="11"/>
<color rgb="FF000000"/>
<name val="Century Gothic"/>
<family val="34"/>
</font>
Run Code Online (Sandbox Code Playgroud)
可以使用此 Excel 工作簿重现此内容。在补丁之前,这将无法加载。打完补丁后,加载没有错误。
| 归档时间: |
|
| 查看次数: |
1212 次 |
| 最近记录: |