使用win32com和python复制粘贴隔离

2024-10-02 12:28:10 发布

您现在位置: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、copy和paste例程就在python中获取值及其excel格式?


Tags: 方法import脚本clientws粘贴a1range
3条回答

而不是:

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 Object Model Reference

只需将数据读入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 ..

我不知道将二维选择粘贴到单个单元格中有什么作用,所以我无法为您完成最后一行。您可能会发现需要执行两个循环:一个循环读取数据,另一个循环写入数据。

有点晚了,但我想我有你的解决办法, 既然我找不到它不管怎样都能帮到人。 这段代码将复制所有内容(值、公式、格式等) 使用选择(因此不会干扰用户,这比使用选择更快)

首先,我像这样打开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'))

区分大小写。

相关问题 更多 >

    热门问题