使用Python调用win32复制Excel工作表中sheet到其他工作簿

Is That WeeMan-avatar

Is That WeeMan

2021-05-15T05:49:46+00:00

功能是实现了,但是不知道.copy后面的None干啥的,也不知道为啥能成功。
代码如下:

# -*- coding:utf-8 -*-
import openpyxl as vb
from win32com.client import Dispatch
path1 = r'E:\python学习\课件表格\成绩表.xlsx'
path2 =r'E:\\python学习\\课件表格\\工资表.xlsx'

xl = Dispatch("Excel.Application")
xl.Visible = False # You can remove this line if you don't want the Excel application to be visible

wb1 = xl.Workbooks.Open(path1)
wb2 = xl.Workbooks.Open(path2)

ws1 = wb1.Worksheets(1)
ws1.Name = 'Built with Python'
print(wb2.sheets.count)

ws1.Copy(None,wb2.Worksheets(wb2.sheets.count))
#
wb1.Close(SaveChanges=True)
wb2.Close(SaveChanges=True)

xl.Quit()
[img]https://img.nga.178.com/attachments/mon_202105/21/-7Q2o-d2peK1wT3cSo8-g5.jpg.medium.jpg[/img]
总感觉让鸟头转圈飞起来了[s:ac:喷][s:ac:喷]
Is That WeeMan-avatar

Is That WeeMan

老哥们救我啊
kako-avatar

kako

感觉用openpyxl容易一些
OblivionZ-avatar

OblivionZ

倒是觉得用pandas更方便吧,直接生成新sheet,win32开excel万一文档较大,会报错。
basashi-avatar

basashi

看手册啊...
Jobbercrate-avatar

Jobbercrate

搜了一下。copy的参数有两个,before和after,用来确定worksheet 的插入位置,你这里在after传了sheet的个数,也就是把sheet复制到最后的位置,None 就是传给before 的,如果不想写None,直接写成copy(after=…)就行了
aienonymous-avatar

aienonymous

[s:ac:哭笑]就是传个参数,具体得看源码
Is That WeeMan-avatar

Is That WeeMan

[quote][pid=517820513,26848318,1]Reply[/pid] Post by [uid=61851072]Roadroller-Jesse[/uid] (2021-05-21 14:36):

搜了一下。copy的参数有两个,before和after,用来确定worksheet 的插入位置,你这里在after传了sheet的个数,也就是把sheet复制到最后的位置,None 就是传给before 的,如果不想写None,直接写成copy(after=…)就行了[/quote]写成after它就会打开一个新的工作簿[s:ac:囧][s:ac:囧]
Is That WeeMan-avatar

Is That WeeMan

[quote][pid=517817412,26848318,1]Reply[/pid] Post by [uid=506438]xiaot_bag[/uid] (2021-05-21 14:24):

感觉用openpyxl容易一些[/quote]openpyxl不能复制整个sheet表,只能一个一个单元格复制。这样有些合并的空格不会被复制格式[s:ac:哭笑]