Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复印及;使用win32com粘贴隔离&;python_Python_Excel - Fatal编程技术网

复印及;使用win32com粘贴隔离&;python

复印及;使用win32com粘贴隔离&;python,python,excel,Python,Excel,有没有一种方法可以使用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=

有没有一种方法可以使用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格式?

只需将数据读出到python中,然后将其写回即可

而不是:

ws.Range('a1:k%s' % row).select
ws.Range('a1:k%s' % row).cut
ws.Range('a7').select
ws.paste
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 ..
我不确定将二维选择粘贴到单个单元格中做什么,所以我无法为您完成最后一行。你可能会发现你需要做两个循环;一个用于读取数据,然后第二个用于写回数据。

而不是:

ws.Range('a1:k%s' % row).select
ws.Range('a1:k%s' % row).cut
ws.Range('a7').select
ws.paste
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"))

根据

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

首先,我像这样打开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'))
要在保存格式、公式等的同时复制并粘贴到其他工作表上,请执行以下操作:

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'))

区分大小写。

您不能直接访问数据并将其从一个单元格移动到另一个单元格,而不是使用复制和粘贴吗?实际上,我想剪切和粘贴的原因是捕获单元格的所有格式化属性,我正在复制一组具有格式化的文件,这些格式化需要花费大量时间来编写格式。或者,你如何在不复制的情况下复制所有值和格式。我不知道Excel模型的详细信息,但我敢打赌格式信息是公开的。您可能想看看文档。谢谢您的回答John,这当然适用于值,这很简单。。。我已经澄清了上面的问题,也就是说,如何获得所有的格式化。我意识到这是6年前的事了——但这是我能找到的唯一一个能够真正粘贴的解决方案。