我最近一直在处理Excel文档,并且很难掌握“表格”。我认为一些混乱源于这样一个事实:一些在线资源将工作表中的值数组称为表,而我对处理表对象(Excel 中的“插入表”)感兴趣。
从上一个问题,我感觉到“表”可以被openpyxl识别,它似乎能够读取一个表并像操作csv等一样操作它。然而,我在加载工作表时遇到错误我的脚本中的变量:
VBS_Metrics_Report_dir = "path to .xlsx file"
VBS_Metrics_Report = openpyxl.load_workbook(os.path.join(VBS_Metrics_Report_dir, "VBS_Metrics_Report.xlsx"))
VBS_Membership_ws = VBS_Metrics_Report['Membership']
VBS_Membership_table = VBS_Membership_ws.tables['Membership']
---> 192 VBS_Metrics_Report = openpyxl.load_workbook(os.path.join(VBS_Metrics_Report_dir, "VBS_Metrics_Report.xlsx"))
ValueError: Table with name Membership already exists
首先,我很困惑,因为据说错误所在的行甚至没有尝试访问表或名为“Membership”的工作表,这发生在以下几行中。
其次,这个错误在哪里声明该表已经存在?考虑到即使重新启动 python 内核后也会发生错误,它不可能已经作为我的工作区中的变量存在。即使确实如此,我应该能够覆盖变量否?
如果问题是该表已存在于我尝试访问的工作簿中,那么是的,它当然已经存在,这就是我尝试访问它的原因。为了利用我知道它包含的数据。在这种情况下,我一定是误解了
load_workbook
函数的用法。
我意识到这个问题基本上已经被问到了这里,但它还没有真正得到回答,我想我会添加一些想法。
如果有人可以帮助我解决这个问题,或者对如何处理 Excel“表格”有深入的了解,以便让我更好地理解,请告诉我。我们将不胜感激!
谢谢。
这是有关错误原因的一些附加信息,可能会有所帮助。
ValueError: “名为 Membership 的表已存在” 是在 Openpyxl 工作表文件中的“add_table()” 函数中生成的。
即错误文本仅存在于该函数中,因此只有在调用该函数时才会发生。
当您在代码中将表添加到工作表时,会调用此函数 'add_table()',例如创建表“TABLE1”,然后添加到工作表
VBS_Membership_ws.table_add(TABLE1)
。load_workbook
调用。for each table in the Sheet where table is the name of the table.<br> This is why the error is raised on the code line
VBS_Metrics_Report = openpyxl.load_workbook(os.path.join(VBS_Metrics_Report_dir, "VBS_Metrics_Report.xlsx"))`
当调用 add_table 时,它将运行重复的表名检查,如果返回 True,则会引发 ValueError。
def add_table(self, table):
...
if self.parent._duplicate_name(table.name):
raise ValueError("Table with name {0} already exists".format(table.name))
在 _duplicate_name 函数中,测试很简单;
if name == t.lower():
哪里
'name' 是要检查的表的名称
't' 是现有表的名称
这里没有针对工作表名称(标题)进行检查,因此拥有与工作表同名的表不会返回 true 并引发错误。
t 列表显示为累积的,就像检查每个表名称时将其添加到 t 列表中以对照下一个表进行检查一样。
例如;
如果我在一张名为“Table1”、“Table2”和“Table3”的工作表上有 3 个表格,那么
因此,我只能看到实际上两个表命名相同时发生的错误,而在进行此检查的情况下,这是不可能在 Excel 或 Openpyxl 中创建的。 然而,最终正如前面提到的,如果没有实际的工作簿本身,很难准确确定发生了什么,但您可以自己调试代码以查看这些点发生了什么。