python xlwings - 复制和粘贴范围

问题描述 投票:0回答:3

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

我正在使用 xlwings 和 python 2.7。我想将 Sheet1 中“A1:A6”范围内的值复制到 Sheet2 中的单元格“A1:A6”。我的代码如下:

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

但是,当我运行此代码时,它将

my_range
的值放入工作表 2 上的单元格“A1:F1”,而不是工作表 2 中的单元格“A1:A6”。

python excel xlwings
3个回答
19
投票

列(以及行)以简单(“水平”)列表的形式返回,请参阅文档此处。为什么?首先,它模仿 numpy 一维数组的行为。其次,这通常是您想要的,例如您可以直接迭代列或检查值是否存在,而无需先解压嵌套列表。

现在,就您的情况而言,您显然希望保留可以执行的二维形状(再次类似于 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

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

0
投票

正如West的方法所提到的,它还可以使用copy()和paste()语法来复制指定范围内的单元格格式。

import xlwings as xw

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

sht.range('A1:A6').copy()
sht2.range("A1").paste(paste='formats')

wb.app.api.CutCopyMode=False

  
© www.soinside.com 2019 - 2024. All rights reserved.