我在Python中使用OpenPyXL来操作Excel工作簿.重命名工作表时遇到意外行为.If I change the name of a sheet to a name that only differs in letter case from its previous name, OpenPyXL appends a '1' to the new name.

下面是一个最小的可重现的例子:

import openpyxl
# Create a new workbook
wb = openpyxl.Workbook()
# Get the default sheet
sheet = wb.active
# Rename the sheet to 'Input (Raw)'
sheet.title = 'Input (Raw)'
# Rename the sheet to 'Input (raw)'
sheet.title = 'Input (raw)'
# Print the current title of the sheet
print(sheet.title)

预期输出:

Input (raw)

实际yields :

Input (raw)1

我用的是Python 3.11.1openpyxl 3.1.2.

推荐答案

根据代码中的文档重命名或设置图纸标题

"""
Set a sheet title, ensuring it is valid. 
Limited to 31 characters, no special characters. 
Duplicate titles will be incremented numerically
"""

因此,如果工作表名称为‘abc’,当您在标题重命名过程中将其更改为‘abc’时,代码将确定已经有一个工作表的名称为‘abc’,即使它与将要重命名的工作表相同,并通过添加1来递增新名称.

可以说,这不是一个期望的操作,但这就是代码的编写方式.
我想如果你想改变它或者自己重写代码,你需要和开发人员一起提高它;这个判断是在'child.py'的avoid_duplicate_name函数中进行的.
该函数是一个盲判断,即它只是判断新的工作表名称是否匹配(不区分大小写)任何现有的工作表名称(来自于. textlist),如果匹配,则执行递增.

修改调用"avoid_duplicate_name"的代码将通过删除当前工作表名称(如果它存在于工作表列表中)来修复此问题,以便重复判断不会try 与原始名称进行匹配.
child.py中的现有代码

        if self.title is not None and self.title != value:
            value = avoid_duplicate_name(self.parent.sheetnames, value)

如果工作表已有标题,则在执行重复判断之前将其从工作表列表中删除;

        if self.title is not None and self.title != value:
            sheet_list = self.parent.sheetnames
            if self.title:
                sheet_list.remove(self.title)
            value = avoid_duplicate_name(sheet_list, value)

*不能保证修改Openpyxl代码不会中断其他操作

当然,你也可以使用一个中间名.

Python相关问答推荐

根据不同列的值在收件箱中移动数据

如何比较numPy数组中的两个图像以获取它们不同的像素

沿着数组中的轴计算真实条目

输出中带有南的亚麻神经网络

将输入管道传输到正在运行的Python脚本中

无法通过python-jira访问jira工作日志(log)中的 comments

从numpy数组和参数创建收件箱

如何在python polars中停止otherate(),当使用when()表达式时?

如何在WSL2中更新Python到最新版本(3.12.2)?

导入...从...混乱

未知依赖项pin—1阻止conda安装""

* 动态地 * 修饰Python中的递归函数

ruamel.yaml dump:如何阻止map标量值被移动到一个新的缩进行?

为什么'if x is None:pass'比'x is None'单独使用更快?

Beautifulsoup:遍历一个列表,从a到z,并解析数据,以便将其存储在pdf中.

在电影中向西北方向对齐""

裁剪数字.nd数组引发-ValueError:无法将空图像写入JPEG

修改.pdb文件中的值并另存为新的

组颠倒大Pandas 数据帧

PANDA:如何将多选列转换为索引/列