1、打开一个工作簿中已经存在的sheet
from openpyxl import load_workbook
wb = load_workbook(filename=路径+文件名称)
ws = wb['sheet名称']
2、新建一个工作簿并且新建一个sheet
from openpyxl import Workbook
wb = Workbook() # 新建一个工作簿
ws = wb.active # 获取当前活动的工作表,默认情况下,活动工作表是Excel文件中的第一个工作表,也可以通
# 过wb.active = index来设置活动工作表的索引。
# 如何知道现在是编辑的那一个sheet呢!
print(ws.title)
new_worksheet = wb.create_sheet() # 新建一个sheet
new_worksheet.title = 'sheetname' # 给新的sheet一个名字
# 或者
new_worksheet = wb.create_sheet( 'sheetname',n) #n表示sheet在工作簿中是位置,默认从0开始
3. 对多个sheet进行排序
3.1 使用的函数 move_sheet、enumerate
排序的方法有两种:
- 第一种:所有的完成之后单独进行排序,此时如果是新建的工作簿比较方便。
- 第二种:在建立sheet的时候规定其位置,此方法可以用在新建的和打开的旧的的工作簿。
函数: move_sheet
- 语法:
move_sheet(title,n)
# title :sheet名称
# n:负数表示向左移动,正数表示向右移动,数字表示移动几个位置
- 实例:新建的工作簿
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = 'sheet1'
new_worksheet_summary = wb.create_sheet('sheet2',2)
# new_worksheet_summary.title = 'summary'
PN = wb.create_sheet('sheet3',1)
Project = wb.create_sheet()
Project.title = 'sheet4'
sort_lst = wb.sheetnames
print(sort_lst)
# output
#['sheet1', 'sheet3', 'sheet2', 'sheet4']
desired_order = ['sheet4','sheet3','sheet2','sheet1'] # 以你期望的顺序列出工作表的名称
# 根据给定的顺序,重新排列工作表
for idx, sheet_name in enumerate(desired_order, 1):
wb.move_sheet(sheet_name, idx)
sort_lst = wb.sheetnames
print(sort_lst)
# output
# ['sheet4', 'sheet3', 'sheet2', 'sheet1']
- 实例二:已经有的excel文件
from openpyxl import Workbook from openpyxl import load_workbook wb = load_workbook(r'.\test.xlsx') sort_lst = wb.sheetnames print(sort_lst) # output #['sheet4', 'sheet3', 'sheet2', 'sheet1'] desired_order = ['sheet2','sheet1','sheet4','sheet3'] # 以你期望的顺序列出工作表的名称 # 根据给定的顺序,重新排列工作表 for idx, sheet_name in enumerate(desired_order, 1): wb.move_sheet(sheet_name, idx) sort_lst = wb.sheetnames print(sort_lst) # output # ['sheet2', 'sheet1', 'sheet4', 'sheet3'] wb.save(r'.\test2.xlsx')
3.2 直接在创建sheet的时候指定sheet的位置
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = 'sheet1'
new_worksheet_summary = wb.create_sheet('sheet2',2)
# new_worksheet_summary.title = 'summary'
PN = wb.create_sheet('sheet3',1)
Project = wb.create_sheet()
Project.title = 'sheet4'
sort_lst = wb.sheetnames
sort_lst
4、 删除sheet
# 方法一:
wb.remove(wb["sheet名称"])
# 方法二:
del wb['删sheet名称']
实例:
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = 'sheet1'
new_worksheet_summary = wb.create_sheet('sheet2',2)
PN = wb.create_sheet('sheet3',1)
Project = wb.create_sheet()
Project.title = 'sheet4'
sort_lst = wb.sheetnames
print(sort_lst)
#output
#['sheet1', 'sheet3', 'sheet2', 'sheet4']
# 删除sheet
del wb['sheet4']
print(wb.sheetnames)
#output
# ['sheet1', 'sheet3', 'sheet2']
wb.remove(wb['sheet3'])
print(wb.sheetnames)
#output
#['sheet1', 'sheet2']
5、复制sheet:
5.1使用iter_rows和循环复制:
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
new_worksheet = wb.create_sheet(title='sheet名称')
for row in ws.iter_rows(values_only=False, max_row=4):
for cell in row:
new_worksheet[cell.coordinate].value = cell.value
优点:
- 灵活性:可以选择性地复制源工作表的一部分内容,而不是整个工作表。
- 可以在复制过程中进行任何必要的处理,例如数据转换或筛选。
缺点:
- 需要编写更多的代码来实现复制过程。
- 可能需要处理单元格的坐标和值,稍微复杂一些。
5.2 使用copy_worksheet方法:
new_worksheet = wb.copy_worksheet(ws)
-
优点:
- 简单:一行代码就可以完成整个工作表的复制。
- 不需要手动处理单元格的坐标和值,可以直接复制格式和数据。
缺点:
- 只能复制整个工作表的内容,无法选择性地复制部分内容。
- 无法在复制过程中进行额外的处理,只能简单地复制内容。
5.3 两种方案的异同点:
相同点:
- 两种方法都可以用于将源工作表的内容复制到新的工作表。
- 复制后的新工作表将包含与源工作表相同的数据和格式。
总的来说,如果你需要灵活地选择性复制部分内容并且需要在复制过程中进行额外的处理,那么使用iter_rows和循环复制的方法可能更适合。但如果你只需要简单地复制整个工作表的内容,而不需要进行额外的处理,那么使用copy_worksheet方法会更加简单和方便。
6、隐藏sheet
ws.sheet_state = None
# None 可以被替换为:
# "hidden":隐藏
# "visible":显示
# "veryHidden":深度隐藏
veryHidden称它为深度隐藏,正常来说我们隐藏一个工作表后,鼠标右击工作表会弹出一个菜单,里面会有一个“取消隐藏”的选项,你可以选中想要取消隐藏的工作表然后点确定,该工作表就会重新出现。但当你设置成veryHidden,该工作表就不会出现在"取消隐藏"的框里。