用win32com&python复制和粘贴隔离

有没有办法使用python和win32com来复制和粘贴,使Python脚本可以在后台运行,而不是搞乱“用户”的复制和粘贴能力?

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 

假定该脚本将在大量数据集上持续运行…

好吧,这个问题要更清楚一些,我需要格式化,所有这一切,所以只要抓取t值当然是简单的,但不完全是需要的。

那么让我把这个问题说成是:为什么在没有select,复制和粘贴例程的情况下,为什么要在python中获取值和它的excel格式呢?

代替:

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

我做了:

 ws.Range("A1:K5").Copy(ws.Range("A7:K11")) 

根据MSDN:Excel对象模型参考

只要将数据读入python,然后写回。

代替:

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

逐个单元地处理数据:

 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 .. 

我不确定将一个二维select粘贴到一个单元格中是怎样的,所以我不能为你做最后一行。 你可能会发现你需要做两个循环; 一个读取数据,然后一个写回数据。

有点晚,但我想我有你的解决scheme,因为我找不到它,它会帮助别人。 这段代码将复制一切(价值,公式,格式化等),而不使用select(因此不会混淆你的用户,这比使用select更快)

首先我打开excel那样:

 xl = client.Dispatch("Excel.Application") wb = xl.Workbooks.Open("c:/somepath/file.xls") xl.Visible = 1 

在保存格式,公式等的同时复制并粘贴在同一张工作表上:

 ws = wb.Sheets("someSheet") #you can put the sheet number instead of it's name ws.Range('a1:k%s' % row).Copy() #copy works on all range objects (ws.Columns(), ws.Cells, etc) ws.Paste(ws.Range('a7')) 

要在保存格式,公式等的同时复制并粘贴其他工作表:

 source_ws = wb.Sheets("SheetContainingData") destination_ws = wb.Sheets("SheetWhereItNeedsToGo") source_ws.Range('a1:k%s' % row).Copy() destination_ws.Paste(destination_ws.Range('a7')) 

区分大小写。