workbook = openpyxl.load_workbook('5-30删减—送检表.xlsx') for sheet in workbook.sheetnames: # print(sheet) worksheet = workbook[sheet] # print(worksheet) if 'YXD21' not in worksheet: print(worksheet) workbook.remove(worksheet) # exit() workbook.save('sheet.xlsx') print("完成") 报错IndexError: At least one sheet must be visible
时间: 2023-12-25 09:03:58 浏览: 154
你可以通过设置 sheet 的 `sheet_state` 属性来解决这个问题。将 sheet_state 设置为 'hidden' 即可隐藏 sheet 表,而不会导致 `IndexError` 异常。以下是修改后的代码示例:
```python
import openpyxl
# 打开 Excel 文件
workbook = openpyxl.load_workbook('5-30删减—送检表.xlsx')
# 遍历 sheet 表
for sheet_name in workbook.sheetnames:
worksheet = workbook[sheet_name]
if 'YXD21' not in sheet_name:
worksheet.sheet_state = 'hidden' # 隐藏 sheet 表
else:
worksheet.sheet_state = 'visible' # 显示 sheet 表
# 保存 Excel 文件
workbook.save('output.xlsx')
print("完成")
```
在这个示例中,我们先遍历了 Excel 文件中所有的 sheet 表。如果 sheet 表的名称不包含 'YXD21',就将其隐藏;否则将其设置为可见。最后保存 Excel 文件并输出 '完成'。注意,我们使用 `sheet_state` 属性来设置 sheet 的状态,而不是直接删除 sheet 表,这样就不会导致 `IndexError` 异常。
相关问题
workbook = openpyxl.load_workbook('example.xlsx') print(workboo.name)
您的代码有误,应该是 `print(workbook.sheetnames)` 而不是 `print(workboo.name)`,因为 `workbook.sheetnames` 是获取 Excel 文件中所有工作表的名称。所以,正确的代码应该是这样的:
```
import openpyxl
workbook = openpyxl.load_workbook('example.xlsx')
print(workbook.sheetnames)
```
代码增加填充单元格后合并Sheet表:import openpyxl # 读取存贷款数据.xlsx workbook = openpyxl.load_workbook('存贷款数据.xlsx') # 遍历每个Sheet表,并将Sheet表名写入到每行N列的单元格 for sheet_name in workbook.sheetnames: sheet = workbook[sheet_name] max_row = sheet.max_row max_column = sheet.max_column for row in range(3, max_row): for column in range(1, max_column + 1): if column == max_column: sheet.cell(row=row, column=column+1).value = sheet_name else: sheet.cell(row=row, column=column).value = sheet.cell(row=row, column=column).value # 保存新的工作簿 workbook.save('存贷款数据(新).xlsx')
好的,以下是增加填充单元格后合并Sheet表的示例代码:
```python
import pandas as pd
import openpyxl
# 读取Excel文件
workbook = openpyxl.load_workbook('存贷款数据.xlsx')
# 遍历每个Sheet表,并将Sheet表名写入到每行N列的单元格
for sheet_name in workbook.sheetnames:
sheet = workbook[sheet_name]
max_row = sheet.max_row
max_column = sheet.max_column
for row in range(3, max_row):
for column in range(1, max_column + 1):
if column == max_column:
sheet.cell(row=row, column=column+1).value = sheet_name
else:
sheet.cell(row=row, column=column).value = sheet.cell(row=row, column=column).value
# 保存新的工作簿
workbook.save('存贷款数据(新).xlsx')
# 获取所有Sheet表名
file = pd.ExcelFile('存贷款数据(新).xlsx')
sheet_names = file.sheet_names
# 合并所有Sheet表
df_merged = pd.concat([file.parse(sheet) for sheet in sheet_names])
# 将合并后的数据保存到新的Excel文件中
df_merged.to_excel('merged.xlsx', index=False)
```
在上面的示例中,我们增加了使用openpyxl库来填充单元格的代码。首先,我们使用load_workbook函数读取Excel文件,并遍历每个Sheet表。然后,我们使用max_row和max_column属性获取Sheet表的行数和列数,使用cell函数访问和修改单元格的值。注意,我们使用了worksheet.cell()函数而不是worksheet[row][column]来访问单元格,因为后者在openpyxl中已经被弃用。接下来,我们使用concat函数来合并所有Sheet表,并将合并后的数据保存到新的Excel文件中。请确保您已经安装了Pandas和openpyxl库,并且将存贷款数据.xlsx文件放在当前工作目录中。
阅读全文