python xlwings - 复制和粘贴范围

时间:2015-06-19 15:03:03

标签: python excel xlwings

我在这个网站上的第一个问题。

我正在使用xlwings和python 2.7。我想复制范围内的值:A1:A6'从Sheet1到cell' A1:A6'在Sheet2中。我的代码如下:

> my_range = Range('Sheet1','A1:A6').value
> 
> Range('Sheet2','A1:A6').value = my_range

但是,当我运行此代码时,它会将my_range的值放入单元格' A1:F1'在Sheet 2而不是cell' A1:A6'在表2中。

2 个答案:

答案 0 :(得分:11)

列(以及行)以简单("水平")列表的形式返回,请参阅文档here。为什么?首先,它模仿numpy 1d数组的行为。其次,它通常是您想要的,例如:您可以直接遍历列或检查是否存在值,而无需先解压缩嵌套列表。

现在,在您的情况下,您显然希望保留您可以执行的2d形状(再次类似于numpy),如下所示:

my_values = Range('Sheet1','A1:A6', atleast_2d=True).value 
Range('Sheet2','A1:A6').value = my_values

另请注意,您调用my_range的内容应该称为my_values,因为它包含列表,而不是xlwings Range对象。

<强>更新

自v0.9.0起,语法更改为:

import xlwings as xw
wb = xw.Book('mybook.xlxs')
my_values = wb.sheets['Sheet1'].range('A1:A6').options(ndim=2).value 
wb.sheets['Sheet2'].range('A1:A6').value = my_values

答案 1 :(得分:0)

对于有兴趣进行包含源格式的复制粘贴的任何人,您都可以使用api,如下所示:

import xlwings as xw

wb = xw.Book('mybook.xlxs')
sht = wb.sheets['Sheet1']
sht2 = wb.sheets['Sheet2']

sht.range('A1:A6').api.copy
sht2.range("A1").api.select
sht2.api.paste

wb.app.api.CutCopyMode=False