python xlwings api 可以复制工作表和行、列,那么可以复制单元格内容吗?
用COPY 复制行、表、列,我都会了,但一到复制单元格内容就报错
我想把格式,字体等属性一起复制过来,所以要用COPY,不能用赋值的形式
但一复制就报错,请问何解?谢谢!
import os
import xlwings as xw
app = xw.App(visible = True, add_book = False)
file_name = 'C:\\Users\\Administrator\\Desktop\\测试\\统计表.xlsx'
wb = app.books.open(file_name)
sh = wb.sheets[0]
scope = sh.range('A1').expand()
ad = sh.range(scope.shape[0]+1,1)
# sh.range('E8').current_region.value.api.copy sh.range('A11')
sh.api.Columns('E:E').Copy(sh.api.Columns('F:F'))
sh.api.range('E14').Copy(sh.api.range('E15'))
wb.save()
wb.close
app.quit()
xlwings
模块封装了 win32com
模块,二者功能有所重叠,所以使用 API 时注意主体是什么类型对象。例如
sh
是 xlwings
的工作表对象;而sh.api
是被封装的 win32com
原始工作表对象具体到你这个问题,以下两种修改方式任选其一即可:
使用 win32com
API:大写 range
首字母 -> Range
sh.api.Range('E14').Copy(sh.api.Range('E15'))
使用 xlwings
API:去掉 api
,同时小写 Copy
首字母 -> copy
sh.range('E14').copy(sh.range('E15'))
在不查询API的前提下,怎么区分呢?只需记住一点,直接创建的 xlwings
对象的API基本是首字母小写的,而通过 api
属性获取到的是 win32com
原始对象,其API基本都是大写字母开头的。
感谢大神,第一种方法成功了,但第二种不行,因为不能调用python基本copy功能(这个原始copy功能跟可能我的需求不符)。
D:\Anaconda3\python.exe C:/Users/Administrator/PycharmProjects/untitled/venv/test_copy小测试.py
Traceback (most recent call last):
File "C:/Users/Administrator/PycharmProjects/untitled/venv/test_copy小测试.py", line 11, in <module>
sh.range('E14').copy(sh.range('E15'))
AttributeError: 'Range' object has no attribute 'copy'
Process finished with exit code 1