python - 无法通过 Python 读取 excel 文件 - 解决方法?
问题描述
使用各种 python 库——Pandas、xlrd、openpyxl——是不可能的。我遇到与此处相同的错误:Openpyxl: 'ValueError: Max value is 14' when using load_workbook。
我用过pandas.read_excel
(引擎=openpyxl)。
我试过的示例代码:
import pandas as pd
import os
from openpyxl import Workbook,load_workbook
download_folder = "path"
excel='sample.xlsx'
xls = pd.read_excel(download_folder+excel, sheet_name='Sheet1',header=1,skiprows=list(range(5)))
#wb = load_workbook(filename = download_folder+excel)
总是返回相同的错误:
raise ValueError('Max value is {0}'.format(self.max))
ValueError: Max value is 14
解决方案
我提出这个作为一个巨大警告的答案。我能够在 macOS 上为我完成这项工作。我不能保证它会在其他地方或任何其他人的特定 Excel 文件中工作。
该问题与字体系列值有关。我不知道为什么 14 这个神奇的数字会起作用,但它就是这样。此外,我不知道在 Excel 中会做什么以导致出现 14 以上的值。所以这就是我所做的......
我创建了一个非常基本的 Excel 电子表格。Excel 文件只是 zip 风格的档案,所以我解压缩了我的 .xlsx 文件。作为该摘录的一部分,我们看到 xl/styles.xml 并且在其中我们看到了这个摘录:-
<fonts count="1" x14ac:knownFonts="1">
<font>
<sz val="12" />
<color theme="1" />
<name val="Calibri" />
<family val="2" />
<scheme val="minor" />
</font>
</fonts>
当大于 14 时,family元素的val属性会导致问题。
然后我修改了 xl/styles.xml 以包含:-
<family val="22" />
现在,如果我重新打包提取的数据(即重新构建 Excel 文件),然后尝试使用openpyxl在 Python 中打开它,我会得到@NewGirl 观察到的异常
但我们可以修复它。该过程涉及提取(解压缩)电子表格、解析 xl/styles.xml 并在家庭元素中查找不适当的值。然后我们重新编写 XML 文件并重新打包电子表格。
警告:如果这对您不起作用,它很可能会损坏您的电子表格,因此请务必复制一份!
这是代码: -
import tempfile
from openpyxl import load_workbook
import os
import shutil
from lxml import etree
EXCELFILE = '~/Book1.xlsx'
STYLES = 'xl/styles.xml'
FORMAT = 'zip'
with tempfile.TemporaryDirectory() as tdir:
os.chdir(tdir)
shutil.unpack_archive(filename=EXCELFILE, format=FORMAT)
with open(STYLES, 'r') as styles:
tree = etree.parse(styles)
for family in tree.xpath('//*[local-name()="fonts"]//*[local-name()="font"]//*[local-name()="family"]'):
try:
if int(family.attrib['val']) > 14:
family.set('val', '2')
except Exception:
pass
with open(STYLES, 'wb') as styles:
tree.write(styles)
shutil.make_archive(base_name=EXCELFILE, format=FORMAT)
shutil.move(f'{EXCELFILE}.{FORMAT}', EXCELFILE)
load_workbook(EXCELFILE)
调用 load_workbook() 只是为了检查修改后的电子表格的有效性
推荐阅读
- c# - 将 URL 数据与 ServiceStack 中的 HTTP POST 请求正文结合起来
- android - 将图像从 ios/c++ 代码传递到 JNI Android
- .htaccess - 如何重写 url 以通过“点”拆分最后一个路径并通过拆分项重定向到查询字符串?
- chromium - 是否允许在 Chromium 中使用 H.264?
- c# - 如何使用连接层在 C# 应用程序中获取存储过程错误
- android - 为什么 Android 8.1 及以上版本的 Android 收不到 UDP 消息
- java - JAVA中的spring应用程序集合中的自定义对象列表(列表,数组,地图等......)
- python-3.x - 如何在 RHEL 上安装 python3 virtualenv 和 mod_wsgi?
- reactjs - React Drag and Drop - 如果在 onDragOver 中调用 setState,则不会调用 onDrop
- java - resttemplate 的默认 httpclient,具有读取超时的绝对值