tags:

views:

495

answers:

1

Is there a way of using python and win32com to copy and paste such that python scripts can run in the background and not mess up the "users" copy and paste ability?

from win32com.client import Dispatch
import win32com.client

xlApp = Dispatch("Excel.Application")
xlWb = xlApp.Workbooks.Open(filename_xls)
ws = xlWb.Worksheets(1)
xlApp.Visible=False

ws.Range('a1:k%s' % row).select
ws.Range('a1:k%s' % row).cut
ws.Range('a7').select
ws.paste

assume that the script will be running continuously on a large collection of datasets...

Ok, some more clarity to the question, I need the formating, all of it, so just grabbing t values is of course simple, but not exactly what is needed.

So then let me phrase the question as: What is there a why to grab both the value and its excel formating in python without the select, copy, and paste routine?

+1  A: 

Just read the data out into python, and then write it back.

Instead of:

ws.Range('a1:k%s' % row).select
ws.Range('a1:k%s' % row).cut
ws.Range('a7').select
ws.paste

Process the data cell-by-cell:

for r in range(1, row+1):    # I think Excel COM indexes from 1
    for c in range (1, 12):  # a--k
        val = ws.Cells(r, c).Value
        ws.Cells(r, c).Value = ''    # Blank this cell; equivalent to cut
        ws.Cells(?, ?).Value = val   # Write it somewhere ..

I'm not sure what pasting a two-dimensional selection into a single cell does, so I can't do the last line for you. You may find that you need to do two loops; one to read in the data, and then a second to write it back out.

John Fouhy
Thanks for the answer John, this of course works for values, which is simple... I have clarified the question above, ie. How to get all the formating as well.
Thorvaldur