2014-10-30 3 views
1

У меня проблемы с PasteSpecial в python. Вот пример кода:win32com Excel 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' 

Я знаю, что паста является ключевым словом аргумент из-за MSDN здесь: http://msdn.microsoft.com/en-us/library/office/ff839476(v=office.15).aspx

Любая идея, почему это не позволит мне сделать это? Не может найти много в Интернете.

Edit для решения (ы):

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) 
+3

Я не работаю с python, но попробуйте этот 'Sheet1.Range (« C1 »). PasteSpecial (Paste = constants.xlPasteValues)' –

+0

Это работает. Сделайте ответ и плохо согласитесь с ним. –

+0

Что касается вашего редактирования: вам следует избегать использования '.Select/Selection'. Возможно, вы захотите увидеть [ЭТО] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros/10718179#10718179) Ссылка Excel-VBA –

ответ

1

Я не работаю с питоном, но сделать PasteSpecial в Excel-VBA, вы должны отметить ячейку, в которой вы хотите выполнить pastespecial, так попробовать как

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

Если вы хотите простую пасту, то я думаю, что это должно работать

Sheet1.Paste 
1

Вы можете получить значение xlPasteFormats путем выполнения макроса в VB Excel:

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

Значение xlPasteFormats является -4122

В сценарии Python вы можете использовать

xlSheet.Range("A7:H7").Copy() 
xlSheet.Range("A%s:H%s"%(r,r)).PasteSpecial(Paste=-4122)