可直接读写剪贴板变量,无需中转;Web 用 navigator.clipboard(需 HTTPS/用户手势),VBA 用 DataObject,.NET 用 Clipboard 类,命令行可用 clip 或 clipboard-rs。

可以直接把变量内容写入系统剪贴板,也能从剪贴板读回变量,不需要中转单元格或临时文件。关键在于选对接口、注意权限和格式限制。
Web 环境:用 navigator.clipboard API
现代浏览器支持原生 Clipboard API,但必须在安全上下文(HTTPS 或 localhost)中运行,且操作需由用户手势(如 click)触发。
-
写入变量值:调用
navigator.clipboard.writeText(strValue),返回 Promise,成功后文本就进剪贴板了 -
读取到变量:用
navigator.clipboard.readText()获取字符串,赋值给 JS 变量,比如let content = await navigator.clipboard.readText() - 不支持直接读写 HTML、图片等富格式;若需多格式,得用
write()配合ClipboardItem,但兼容性略低(Chrome/Edge 较稳,Safari 有限)
VBA 环境:DataObject 是首选
比 WshShell 调用 clip 命令更可靠,不依赖外部工具,也不产生命令行窗口。
- 先引用 Microsoft Forms 2.0 Object Library(Tools → References → 勾选)
- 创建 DataObject 实例:
Dim obj As New DataObject - 写入:
obj.SetText strResult: obj.PutInClipboard - 读取:
obj.GetFromClipboard: strValue = obj.GetText - 注意:不能跨 Excel 实例共享(比如一个 Excel 关闭后,剪贴板内容仍保留,但 DataObject 对象本身已销毁)
.NET(C#)环境:Clipboard 类直接可用
无需额外引用,System.Windows.Forms 已内置 Clipboard 静态类,适合 WinForms/WPF 桌面应用。
- 写入文本:
Clipboard.SetText(myString) - 读取文本:
string s = Clipboard.GetText();(建议先用Clipboard.ContainsText()判断) - 存取自定义对象需序列化:可借助
Clipboard.SetData()+DataFormats.Serializable,或用SetAudio“借道”传输 MemoryStream(兼容老版本 .NET) - 多线程下需确保 UI 线程调用(STA 模式),否则可能抛异常
跨平台/命令行场景:clip 工具或 clipboard-rs
适用于脚本自动化、Rust 工具链或需要 Linux/macOS 兼容的 CLI 应用。
- Windows 自带
clip:echo "hello" | clip即可写入;PowerShell 中用Set-Clipboard更直观 - Rust 项目推荐
clipboard-rs:支持文本、PNG、HTML、文件路径,API 简洁,异步安全,Linux 下自动适配 x11/wayland - 注意:命令行方式无法读取剪贴板(
clip只写不读),读取需换用 PowerShell 的Get-Clipboard或其他库

















