我们需要做一些类似的事情(事实上,电子表格功能更完整,还有其他一些复杂性)。我们研究了各种策略,并发现:
1) OpenOffice 和 GNumerics(使用 Gtk3 构建)等开源软件包实现了这些功能。他们要么不明确使用 Gtk,要么似乎使用“原始 Gtk”而不是提供明确的“工作表小部件”。我们放弃了这种策略,因为成本太高,而且在 GNumerics 的情况下,我们发现它们的编码风格对于我们微薄的大脑来说过于复杂/困难。
2) andlabs 走在正确的轨道上,基于我们最终构建的内容。我们在很大程度上依赖于 GtkExtra。它当然可以提供(开箱即用)您需要的大部分功能。给你一个想法的许多可能的评论中的一些包括:
a) GtkExtra 有一个名为 GtkSheet 的小部件,它是一个基本的“网格/电子表格”,但也带有“testgtksheet.c/.exe”,这是您想要“开箱即用”的大部分内容。
b)您需要为“范围”的剪切/复制/粘贴(CCP)编写自己的代码,因为“开箱即用”GtkExtra 代码只能跨应用程序(即通过GtkClipboard
)对单个单元格的字符串内容进行 CCP ,如下图所示,显示了从 Excel 到我们的应用程序的范围 CCP(“较短的弹出窗口”是“开箱即用”的 CCP,而另一个是我们的自定义版本)。
此外,到目前为止,我们还无法弄清楚如何跨应用程序(例如在 GtkExtra 和 Excel 或 OpenOffice 等之间)对“完整单元格内容”(即公式、颜色等)进行 CCP,另请参阅 SO 发布Gtk剪贴板电子表格值与公式(Windows))。但是,字符串/值是相当直接的。
更新:随后我们证明了一种对“完整单元格/范围”对象(即公式、属性等)进行 CCP 的方法,如此处所讨论的(Gtk 剪贴板电子表格值与公式(Windows))
当然,在我们的案例中,这种“应用程序内”的 CCP 非常简单,因为整个应用程序是基于数组而不是对象(数组基础更适合我们复杂的计算问题),并且不需要剪贴板“内部”,但我们让用户选择是否映射到剪贴板或使用其他方式。
您没有说明您的操作系统,GtkClipboard
Windows 与 Linux 等存在一些差异。
c) GtkExtra“开箱即用”元素中可能有许多“默认”设置,您可能喜欢也可能不喜欢。在我们的案例中,我们必须重新编写大量代码以使单元格/范围等选择/导航以更符合我们的需求和“标准电子表格协议”的方式执行。
d)我们还为“模块”重新编写了很多代码,例如“弹出菜单”等,因为我们的需求再次超出了 GtkExtra 默认/“开箱即用”等元素,尽管您的要求可能不需要太多这样的。
e) 如果您的电子表格还需要能够处理公式,您将需要获取或编写解析器/计算器。根据您的需要,这可以从非常容易到极其复杂。在我们的案例中,我们使用复杂的数学进行大量计算分析,因此我们不得不走“昂贵”的路线,尽管您的要求可能不需要这样。
f) 如果希望添加功能/“模块”(例如绘图等),则适用类似的注释,尽管 GtkExtra 确实提供了各种额外的小部件来为其中一些提供“体面的位”,尽管您的要求可能不需要这样。
但是,要以传统的电子表格方式连接(任何)绘图/图形,或者就此而言,如果您只需要“多区域”范围 CCP,那么您将需要进行一些重要的编码。
g) 您的 OP 不清楚您是否还需要从文件中读取/写入工作表(例如除了 CCP),如果需要,什么文件格式。同样,根据您的需要,这可能相对容易到相当困难。GtkExtra 在许多电子表格格式(xls、xlsx、ods、csv、sylk 等)方面并没有为一般电子表格 IO 提供太多支持,尽管它们确实提供了相当不错的小部件来帮助您开始使用“文件小部件”,“字体/网格”小部件等(见下图,我们的应用程序称为“ARTEx”)。




h) 尽管网络上有很多地方都在谈论 GtkExtra 和 Gtk3,但我们发现坚持使用 Gtk2(这是 GtkExtra 的“官方”基础)更好(至少满足我们的需要),然后你会还需要注意各种其他软件包(例如,如果您使用 Glade,那么您需要获得支持 Gtk2 的相当旧版本的 Glade 等)。
i) 我们确实发现了一些导致 Gtk/GtkExtra 崩溃的子程序和情况,并且不得不重新编写一些 Gtk/GtkExtra 源代码。
顺便说一句,这些图像适用于用 Fortran 编写的应用程序(这是处理复杂/大型计算问题的最佳工具),并使用 ISO 绑定/接口到基于 C 的 Gtk 位,在 Windows 上运行(使用 MingW 构建并创建 Gtk 等dll),所以你可以用 Gtk/GtkExtra 做很多事情。