How to paste a Numpy array to Excel的主要答案是在剪贴板中复制一个Numpy数组,准备粘贴到Excel中:
import numpy as np
import win32clipboard as clipboard
def toClipboardForExcel(array):
array_string = "\r\n".join("\t".join(line.astype(str)).replace("\n","") for line in array)
clipboard.OpenClipboard()
clipboard.EmptyClipboard()
clipboard.SetClipboardText(array_string)
clipboard.CloseClipboard()
Y = np.arange(64).reshape((8, 8))
toClipboardForExcel(Y)
字符串
是否可以在没有额外的win32
包依赖的情况下做到这一点?(我目前在我的项目中没有使用它,我想避免只为剪贴板添加它,注意:我也不使用pandas
)
我已经尝试过os.system(
echo string | clip)
,但它不适用于多行内容(包含\n
)。
或者OpenClipboard
、SetClipboardText
等可以通过ctypes
访问(我已经在使用了)?
注意:这不是Python script to copy text to clipboard的重复,因为后者是通用的,并且具有额外的依赖性,在我的问题中,我们希望避免新的依赖性。
2条答案
按热度按时间wnrlj8wa1#
下面是一个
ctypes
-only示例,用于在剪贴板上设置任何Pythonstr
类型的文本并将其读回。请注意,文本不应包含null,因为CF_UNICODETEXT
类型预期是以null结尾的文本。字符串
根据
OpenClipboard
文件备注:如果应用程序在hwnd设置为NULL的情况下调用OpenCache,
EmptyClipboard
会将剪贴板所有者设置为NULL;这会导致SetClipboardData
失败。我的经验是使用NULL(Python中的
None
)与OpenClipboard
* 一起使用不会 * 导致SetClipboardData
失败,但不会阻止其他应用程序在打开时使用剪贴板(潜在的竞争条件?)。当使用有效的Window句柄时,其他应用程序将无法打开剪贴板,直到调用CloseClipboard
,所以需要一些重试和错误检查。可能最好使用有效的所有者。我在上面使用了GetForegroundWindow
。p5cysglq2#
我还没有看过所有提供Windows剪贴板功能的库,但它通常不是一个非常简单的事情。Windows需要一些样板,这通常对构建完整的GUI应用程序更有用。剪贴板是一个固有的用户体验的东西,所以它很自然地与GUI相关的功能绑定(比如首先需要一个窗口句柄来打开剪贴板)。
如果您在分销方面遇到挑战,(即:将代码分发到非联网计算机),这使得添加pip依赖项变得困难,我将简单地使用合适的许可证将其复制到您的项目中作为子模块。链接的副本提到
Pyperclip
,其本身不需要外部依赖项用于windows,并有效地做你想做的事(通过ctypes
与windows剪贴板交互)。如果你真的需要自己实现它,我仍然会参考
Pyperclip
来学习这个过程的所有细节:1.创建窗口句柄
1.获取剪贴板控制
1.为字符串分配内存
1.将数据从python字符串复制到分配的内存
1.传递数据到剪贴板
1.清理(不要忘记沿着的错误处理)