大家好...我正在使用 win32api。用途是在计算机屏幕上移动鼠标,突出显示某个区域,复制内容,然后将内容发送到 MS Excel 电子表格。
这是代码:
import xlwt
import win32api
import win32con
import win32clipboard
import time
x,y = win32api.GetCursorPos()
win32api.SetCursorPos((36, 311))
# choose the contents, highlight area from 36,311 to 66,400
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
time.sleep(0.05)
win32api.SetCursorPos((66, 400))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
# copy the contents
time.sleep(0.05)
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard
aaa = win32clipboard.SetClipboardData
win32clipboard.CloseClipboard()
# write the contents into speadsheet
book = xlwt.Workbook(encoding='utf-8', style_compression = 0)
sheet = book.add_sheet('SheetOK', cell_overwrite_ok = True)
sheet.write (1, 1, aaa)
book.save("C:\\paste_write.xls")
它不起作用并返回错误“异常:意外的数据类型”。看起来复制粘贴部分不起作用。
你能帮我吗?谢谢。
错误:
Traceback (most recent call last):
File "C:\Python27\simulate mouse click.py", line 27, in <module>
sheet.write (0, 0, aaa)
File "C:\Python27\lib\xlwt\Worksheet.py", line 1030, in write
self.row(r).write(c, label, style)
File "C:\Python27\lib\xlwt\Row.py", line 259, in write
raise Exception("Unexpected data type %r" % type(label))
Exception: Unexpected data type <type 'builtin_function_or_method'>
最佳答案
错误消息向您显示失败的代码行:
Traceback (most recent call last):
File "C:\Python27\simulate mouse click.py", line 27, in <module>
sheet.write (0, 0, aaa)
^^^ THIS YOUR FUNCTION CALL THAT FAILED
File "C:\Python27\lib\xlwt\Worksheet.py", line 1030, in write
self.row(r).write(c, label, style)
File "C:\Python27\lib\xlwt\Row.py", line 259, in write
raise Exception("Unexpected data type %r" % type(label))
^^^ THIS IS WHERE IT ACTUALLY FAILED IN THE LIBRARY
Exception: Unexpected data type <type 'builtin_function_or_method'>
错误消息告诉您某些内容收到了“意外数据类型”,其类型为“builtin_function_or_method”。因此,对 sheet.write
的调用发生了,但它反对您传入的数据。
如果你回顾一下aaa
的值:
aaa = win32clipboard.SetClipboardData
啊 - 你在这里想做的是评估函数,但你省略了括号 (
& )
。所以发生的事情是 aaa
已被分配了函数本身。要调用该函数,请查看此答案以了解详细信息Troubles with clipboard in Python
您还从上面一行的函数中删除了括号。
win32clipboard.EmptyClipboard
请尝试以下操作:
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText("test data")
...
aaa = win32clipboard.GetClipboardText()
<小时/>
这里似乎还有第二个问题,您必须将数据传递给 SetClipbardData
- 它不会触发对当前所选文本的复制操作。您可能需要为此使用不同的 API。
关于Python使用win32api,模拟鼠标移动并复制/粘贴到磁盘文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23902839/