【发布时间】:2016-11-13 02:13:07
【问题描述】:
已经创建了一个 Gtk “计算器”,它具有类似电子表格的元素(类似于并部分基于 GtkSheet/GtkExtra)。除其他外,它能够使用通常的 Ctrl-X/C 和 Ctrl-V 在其内部剪切/复制/粘贴数据/字符串,也可以跨到其他应用程序,例如 Excel/OpenOffice 等(即在两者中方向)使用GtkClipboard 元素。
例如,它还可以执行 this SO posting 中讨论的范围的剪切/复制/过去(尽管通过不同的路线,这在 Python 中没有)。
但是,当 Excel、OpenOffice 等单元格包含公式时(并显示公式的值...例如单元格中的公式 =1+2,显示 3),通过 @ 将单元格复制到专有的 Gtk-Spreadsheet 987654325@ 仅粘贴/包含“显示值”(不是公式)。
如何让GtkClipboard 改为传递公式?这是否需要一些GDKAtom 规范,是否有必要使用gtk_clipboard_request_text() 与_request_content() 等并通过“(Gtk)目标”工作,或者???
附:例如,将 Excel 单元格(带有公式)复制到 OpenOffice 单元格中可以正常工作,在该 OO 中将包含公式并显示结果(尽管我们无法确定该公式是否包含在操作系统的剪贴板中,或者是否 OO等人正在做一些额外的事情)。想象GtkClipboard 也应该能够做到这一点是不是很冒昧……?
更新:自原始帖子 (OP) 以来,我们已经进行了一些测试以进一步评估我们的“直觉”,即 GtkClipboard 或 Windows 剪贴板或其中的某些组合可能无法直接通过剪切/复制/粘贴 (CCP) 传递电子表格公式(或“完整”单元格内容)。以下是一些结果:
1) 我们试图查看 OO、POI 等源代码以了解他们是如何做到的,但它太大了。我们试图查看 GNumerics 源代码,但从我们的角度来看,它使用的编码风格太难(至少对我们来说)难以遵循。
2) 所以,我们进行了一些额外的测试,看看我们是否至少可以确定依赖 OS/GtkClipboard 的可能性。在这些测试中,我们还通过 clipbrd.exe(Windows 剪贴板查看器 (WCV))“密切关注”了 Windows 剪贴板:
a) 和以前一样,当 CCP 从 Excel 到 OO(并且两个应用程序同时运行)时,一切都通过了。
虽然,WCV 只显示显示值,而不是公式或单元格的任何其他属性(例如颜色等)[注意:如果使用图像格式,WCV 可以传递一些颜色等,但不能通过显式单元格“内容/公式/属性”等]。这对 Gtk 来说有点令人担忧,因为这意味着公式等的传递实际上并不是通过(基本操作系统)剪贴板。
b) 当 CCP 反向时,从 OO 到 Excel(两个应用程序都在运行),它不起作用,只传递显示值(没有公式、属性等)。
再次,对于(wrt)GtkClipboard 的可能性有点担心。
c) 当从 Excel 执行复制,但在启动 OO 之前,然后关闭 Excel,启动 OO 后粘贴时,它不适用于公式等,仅适用于显示值。
再一次,有点担心GtkClipboard 的可能性。
d) 跳过一些细节以避免淡化这一点,我们的感觉是(唯一的)“成功的”CCP(从 Excel 到 OO,同时两者都在运行)以某种方式通过 OO 访问 OfficeClipoard 的某种组合执行(参见Win 剪贴板,Gtk 可以访问)和/或使用一些 ODBC/OLE 或任何与 Excel 的直接内部连接来影响完整单元格内容的传递。 CCP 不能反向工作(即 OO -> Excel),或仅当两者都运行时,也支持这种争用。
虽然这些测试/结果本身并不能决定性地证明 OS/GtkClipboard 实际上不能用于“完整”单元格/范围内容的 CCP,但它们高度暗示了这一点。但是,据我们所知,可能有一些 GtkClipboard (GdkAtom 等) 设置可能允许访问其他(例如 Office)剪贴板,但我们找不到任何相关信息。
同样,了解是否有人在使用 Gtk 的 Unix/Linux 环境中成功通过 CCP 处理这类事情会很有用(我们正在 Win 上通过几个不同的 MingW 设置进行测试,但 Win 和 Office 剪贴板在 Gtk 下和 Linux 下似乎有一些不同)。
...因此,我们将感谢任何对该主题有实际了解的人至少确认 Win/GtkClipboard 策略是否浪费时间,如果不是,任何实施提示都会不胜感激。
【问题讨论】:
标签: gtk