win32com Excel PasteSpecial

时间:2014-10-30 23:39:42

标签: python excel excel-vba win32com vba

我在python中遇到了一些PasteSpecial问题。这是示例代码:

import win32com.client as win32com
from win32com.client import constants

xl = win32com.gencache.EnsureDispatch('Excel.Application')
xl.Visible = True
wb = xl.Workbooks.Add ()
Sheet1 = wb.Sheets("Sheet1")

# Fill in some summy formulas
for i in range(10):
    Sheet1.Cells(i+1,1).Value = "=10*"+str(i+1)

Sheet1.Range("A1:A16").Copy()
Sheet1.Range("C1").Select()
Sheet1.PasteSpecial(Paste=constants.xlPasteValues)

我收到以下错误:

TypeError: Paste() got an unexpected keyword argument 'Paste'

我知道paste是一个关键字参数,因为这里有MSDN: http://msdn.microsoft.com/en-us/library/office/ff839476(v=office.15).aspx

知道它为什么不让我这样做?在网上真的找不到多少。

编辑解决方案:

import win32com.client as win32com
from win32com.client import constants

xl = win32com.gencache.EnsureDispatch('Excel.Application')
xl.Visible = True
wb = xl.Workbooks.Add ()
Sheet1 = wb.Sheets("Sheet1")

# Fill in some summy formulas
for i in range(10):
    Sheet1.Cells(i+1,1).Value = "=10*"+str(i+1)

Sheet1.Range("A1:A16").Copy()
Sheet1.Range("C1").PasteSpecial(Paste=constants.xlPasteValues)
# OR this I just found right after I posted this works as well:
xl.Selection.PasteSpecial(Paste=constants.xlPasteValues)

2 个答案:

答案 0 :(得分:2)

您可以通过Excel vb中的执行宏获取xlPasteFormats的值:

> data

xlPasteFormats的值是-4122

在Python脚本中,您可以使用

Sub Macro2()
    Range("A7").Select
    ActiveCell.FormulaR1C1 = xlPasteFormats
End Sub

答案 1 :(得分:1)

我不使用python但是要在Excel-VBA中执行PasteSpecial,你必须提到你想要执行pastespecial的单元格,所以试试

Sheet1.Range("C1").PasteSpecial(Paste=constants.xlPasteValues)

如果你想要一个简单的粘贴,那么我想这应该可行

Sheet1.Paste