Pywin32 Excel question

J

John Henry

I posted the following message to the Pywin32 list but if anybody here
can help, it would be appreciated very much.

============================
Hi list,

I have a need to copy 3 rows of data from the top of my Excel
spreadsheet to another location. I would have throught that this
should be very straightforward since I've done a fair amount of
Excel/Python programming. Unforturnately, I am stuck on this one.

The VB Macro says I need to:

Range("1:1,2:2,3:3").Select
Range("A3").Activate
Selection.Copy
Rows("20:20").Select
ActiveSheet.Paste

So, I figure the Python code would be something like:

<xlApp determined already>
1) xlSheet=xlApp.ActiveWorkbook.ActiveSheet
2) xlSel=xlSheet.Range("1:1,2:2,3:3").Select()
3) #xlSel=xlSheet.Range("A3").Activate()
4) xlSel.Copy()
5) xlSheet.Rows("20:20").Select()
6) xlSheet.Paste()

Unfortunately, this doesn't work. After line 2, xlSel becomes "True" -
not a "Selection" and so the code fails at line 4). I am not sure why
I have to do the "Activate" on line 3 but it didn't matter, the code
still fails at line 4.


What am I doing wrong?

Any help is greatly appreciated.

Regards,
 
M

mensanator

John said:
I posted the following message to the Pywin32 list but if anybody here
can help, it would be appreciated very much.

============================
Hi list,

I have a need to copy 3 rows of data from the top of my Excel
spreadsheet to another location. I would have throught that this
should be very straightforward since I've done a fair amount of
Excel/Python programming. Unforturnately, I am stuck on this one.

The VB Macro says I need to:

Range("1:1,2:2,3:3").Select
Range("A3").Activate
Selection.Copy
Rows("20:20").Select
ActiveSheet.Paste

So, I figure the Python code would be something like:

<xlApp determined already>
1) xlSheet=xlApp.ActiveWorkbook.ActiveSheet
2) xlSel=xlSheet.Range("1:1,2:2,3:3").Select()
3) #xlSel=xlSheet.Range("A3").Activate()
4) xlSel.Copy()
5) xlSheet.Rows("20:20").Select()
6) xlSheet.Paste()

Unfortunately, this doesn't work. After line 2, xlSel becomes "True" -
not a "Selection" and so the code fails at line 4). I am not sure why
I have to do the "Activate" on line 3 but it didn't matter, the code
still fails at line 4.

My first guess is that the True returned in step 2 merely tells you
the requested selection succeeded (the cells on the worksheet
became highlighted). What would happen if you requested 500
columns? Would you get False?

My second guess is that step 4 should be xlSheet.Copy() based
on your using xlSheet.Paste().

For that matter, step 5 doesn't assign the result of the select to a
variable. Perhaps that indicates that the assignment isn't necessary?
Or maybe you should test that the selection succeeded before
attempting to paste?
 
J

John Henry

Somebody on the Pywin32 list helped. The problem is that:

xlSel=xlSheet.Range("1:1,2:2,3:3").Select()

is wrong.

It should be:

xlSel=xlSheet.Range("1:1,2:2,3:3")
xlSel.Select()

Then I can do the rest.

And no, you don't want to do the xlSheet.Copy(). That copies the
entire workbook and you end up with a new workbook.

But you have to do xlSheet.Paste(). Go figure!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,817
Latest member
DicWeils

Latest Threads

Top