4

我打算制作一个程序来编辑电子表格样式的数据。

是否有特定的小部件可以使用 Gtk(任何版本)制作电子表格,例如 wxWidget 中的 wxSheet?

如果没有,你知道它是否打算由 Gtk 开发人员实现吗?

我希望实现的功能的一些细节:

  • 编辑单元格中的文本或数字
  • 将单元格选择复制/粘贴到其他电子表格,如 Libre Office,...
  • 添加/删除行和列
  • 独立修改单元格颜色
  • 每列将具有相同的格式

根本不打算使用以下功能:

  • 合并/生成单元格
  • 将图片或“非常规”的东西放在单元格中。

准确地说,我想要这样的东西:

在此处输入图像描述

4

1 回答 1

6

我们需要做一些类似的事情(事实上,电子表格功能更完整,还有其他一些复杂性)。我们研究了各种策略,并发现:

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 非常简单,因为整个应用程序是基于数组而不是对象(数组基础更适合我们复杂的计算问题),并且不需要剪贴板“内部”,但我们让用户选择是否映射到剪贴板或使用其他方式。

您没有说明您的操作系统,GtkClipboardWindows 与 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 做很多事情。

于 2016-11-06T21:56:39.153 回答