【问题标题】:Renaming sheets in Excel using Python; referencing cell value for sheet name使用 Python 在 Excel 中重命名工作表;引用工作表名称的单元格值
【发布时间】:2019-01-24 01:48:35
【问题描述】:

我一直在使用 Python 构建一个程序来简化在 Microsoft Excel 中进行的更改的项目。我正在尝试遍历工作簿以重命名所有工作表。我的问题与我所读内容的主要区别在于,我使用以下代码根据单元格中的值重命名工作表:

"""Loop through each worksheet and rename the sheet using a value from the sheet."""
for i in wb:
    ws = wb.active
    c = ws['A1']
    ws.title = c + (i + 1)
    print(sheet.title)

如果有人能澄清问题所在,我将非常感谢您的帮助。我收到以下错误报告:

Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
  File "C:\Users\Que\AppData\Local\Programs\Python\Python37-32\lib\site-packages\openpyxl\workbook\child.py", line 93, in title
    m = INVALID_TITLE_REGEX.search(value)
TypeError: expected string or bytes-like object

我正在使用 Powershell 交互模式来测试每段代码。请理解我正在尝试访问单元格中的值,并已多次尝试更改代码以反映我的目标。感谢您的洞察力和观察。

【问题讨论】:

  • 不应该用c(c.value)的值代替cell本身吗?
  • 你好,神圣的牧师!你在做某事!我根据您的建议更改了代码,并收到以下信息:for i in wb: ws = wb.active c = ws['A1'] ws.title = c.value print(ws.title) Marque Marque
  • 你在循环看床单,为什么你总是得到活跃的?
  • 你有我的名字!代码在第一张纸上迭代。我们可以讨论一下为什么程序跳过了第一张纸吗?
  • 下面我的回答能解决你的问题吗?如果要更改所有工作表的名称,则不应始终获取活动工作表,而是从迭代中获得的工作表。

标签: python excel-2010


【解决方案1】:

也许下面的代码可以解决问题:

for sheet in wb:
    sheet_name = sheet.title
    first_cell_value = str(sheet['A1'].value)
    sheet.title = first_cell_value + sheet_name + "1"
    print(sheet.title)

你是这样的:

  • 循环浏览工作簿上的所有工作表;
  • 得到他们的名字;
  • 将第一个单元格 (A1) 的值作为字符串获取;
  • 将他们的名字改为first_cell_value + sheet_name + "1"
  • 打印他们的新名字

您收到的错误报告是因为您尝试使用单元格本身 (c) 而不是其中的值 (c.value) 来重命名您的工作表,并且单元格本身不是字符串/字节类对象。

【讨论】:

  • 对于 wb 中的工作表: ... sheet_name = sheet.title ... first_cell_value = str(sheet['A1'].value) ... ws.title = first_cell_value + sheet_name ... print(sheet_name) ... 测试 125Test
  • 我收到了上面的结果:Test 125Test。代码似乎没有正确地遍历工作表。
  • 你已经为我澄清了一些事情。我很感激!
  • 我尝试了代码,它按预期工作。遍历所有工作表并使用规则first_cell_value + sheet_name + "1" 重命名它们。尝试命令wb.sheetnames 以查看是否所有工作表都显示出来。这些是您将通过迭代过程获得的工作表。
  • 感谢您的支持!经过我的辛勤工作,在您的支持下,我提出了一个解决方案。我对循环在这种环境中的工作方式有了更好的理解: Marque [10:31 PM] for sheet in wb: ... first_cell_value = str(sheet['A1'].value) ... sheet.title = first_cell_value 。 .. 打印(sheet.title)
猜你喜欢
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多