您看到“电子表格编程”的用法了吗?[关闭]


11

不久前,我偶然发现了使用电子表格(我的意思是单元格和公式而不是宏代码)作为指定编程逻辑的方法的概念。这个想法是:

  • 用明确定义的计算流程创建电子表格(有时更适合于电子表格的“数据流”范式,而不是面向过程或面向对象的编程风格)

  • 定义输入单元

  • 定义输出单元

  • 将整个内容编译为独立的可执行类(或函数,过程等)

  • 在更广泛的软件项目中以常规代码使用它

  • 使用电子表格作为源代码,以便随着时间的推移进行维护

想法是使用这种技术来解决真正适合模型的问题,这将导致文档自然且易于维护的代码。我很想知道您是否有使用该技术的经验以及用途。我想到的一个示例应用程序是保险费率计算器,通常由精算师在Excel表格上起草,创建和验证,然后才以某些难以维护的编程逻辑进行编码(这是一个痛苦的过程)。


我不高兴结束这个问题。好的,没有像“是”,“否”或“ str_replace()”之类的答案,但是它引发了有趣的讨论。在这里,我们去:meta.programmers.stackexchange.com/questions/5652/...
ern0

@ ern0您检查了游览页面吗?“程序员都是要获得答案。这不是讨论论坛……”
2013年

Answers:


5

尽管这并不是您要问的“构建电子表格,将其编译为代码”的风格,但CLOSCells数据流扩展使用类似的模型:表示数据流和转换的公式是“源材料” /“表示形式”对象/类设计的“记录”。考虑它是构建您所要求的替代方法。

只是为了好玩:电子表格宏


1
我确定这不是 OP的初衷。
zzzzBov 2012年

4
@zzzzBov,但是,它完全符合OP的描述。
SK-logic

3

有时更适合电子表格的“数据流”范式,而不是面向过程或面向对象的编程风格

老实说,我很难想到任何适用于此的实际计算。“数据流”编程可以轻松完成许多现代编程语言(请查看.NET世界中的LINQ或Perl和Python的列表处理运算符),以我的经验,这比一堆代码可维护性更高具有难以维护的单元格引用的“电子表格公式”。

另一方面,我和我的同事创建了许多基于电子表格的应用程序(准确地说是MS-Excel),其中Excel被用作一种用户友好的工具,用于快速输入输入数据/创建输入掩码,或者用于创建格式化的输出,或同时创建两者。在所有这些情况下,数据的计算或处理不是通过Excel公式完成(或仅部分完成),而是通过程序代码完成,因为Excel公式不够强大或完全错误的工具(相信我,我们有一个大量的知识,Excel公式可以实现哪些功能,什么则不能。


2

自从我读了这篇文章以来,我就一直在思考这个概念。我认为肯定用途。

关于优化这样的事情,电子表格非常类似于存储空间。它与显示和打印空间也非常相似(如x,y)。那里也有很多好处。

当您提到可维护性时,这为我带来了很多想法。我不知道要编译的内容和语言功能,库等真的很麻烦。不过,在某个地方可能会有未来。

我实际上只为电子表格,成绩簿和会计“软件”编写了VB脚本。除了C ++应用程序中的excel文件界面外,从不使用任何基于电子表格的可执行应用程序。


1

是的,但是我将其更多地视为“电子表格测试”,而不是“电子表格编程”。例如,最近我正在为我们的项目开发一项功能,该功能涉及对大量数据库记录执行计算。计算相对简单但重要,因此需要特别注意测试。此外,我们使用的公式需要少量的调整才能适用于我们的情况。

我手动进行了一些计算,以编写我的单元测试,而与我一起工作的测试人员创建了一个像您描述的那样用于他的端到端测试的电子表格。由于修改了源公式,因此我们没有任何独立的测试数据可进行比较,因此电子表格提供了一种“两次输入簿记”样式检查,使我们确信代码是正确的。

所以是的,对于涉及到的计算很容易在电子表格中实现但又要求以代码实现的情况,我认为该技术作为测试数据源非常有用。但是,这样的电子表格本身不应该用于“指定编程逻辑”,而只能用于所需的最终结果。


1

电子表格“编程”是一种数据流编程。

我们对此有语言上的问题,我们不应该将其称为“编程”,因为它远不如我们所称的编程,但绝对比将数据输入程序要多。

数据流编程是一种体系结构和学科,其中应用程序是独立模块的网络,它们相互发送消息(数据)。该模型不适用于所有问题,仅适用于存在源数据或流(或更多)并经过处理网络并产生输出数据/流的问题。请参阅下面的列表。

数据流编程有几种类型,让我们来看一些:

  • 电子表格:输入数字由公式处理,然后是结果数字和图形。特殊特征:执行时间是“一次性”,当输入值(组件)改变时,处理图的适当部分将重新运行并产生输出。
  • Unix管道:shell启动几个程序,并链接stdout-> stdin。特殊特征:仅允许使用管道样式的链接,该图为单个队列。
  • 同步执行:有一个时钟,它以指定的频率触发帧或样本的处理。每个组件每个时钟周期运行一次。以视频和音频处理系统为例,它们以指定的帧/采样率工作。
  • 异步执行:图形处于空闲状态,直到发生外部事件。然后,它处理事件,生成(或不生成)某些输出,并进入空闲状态。

回到您的问题:我认为是的,将数据流应用程序发布为独立应用程序是个好主意。我已经做到了。两次

我和我的一个朋友创建了用于家庭自动化的DF系统原型。我们没有图形编辑器,因此该应用程序无法由用户编辑,一些参数存储在配置文件中,但没有其他内容。我们有一种DF脚本语言,可以“编译”为C ++代码(组件创建和消息定义的列表),然后将其编译为本机可执行文件。这些模块是C ++类(其他类只是为了获取有关我们系统的信息:Message,Dispathcer,Component(抽象),Port(抽象),ConsumerPort,ProducerPort)。

另外,我们对DF系统提供的优势感到惊讶:我们在2分钟内制作了串行嗅探器应用程序,或者我们在现场制作了一个测试程序,该程序可以使指示灯一一闪烁(没有文档在硬件ID上)。我们创建了MIDI和Joypad组件只是为了好玩,我还用它制作了一个轻便的风琴(请参阅http://homeaut.com/under_construction/)。

对于电子表格,我只能看到一个困难:由于每个数字和公式(可能是每个单元格)都是一个组件,因此您的图形不是最终的。当您在简单的sum()应用中添加一行时,这意味着数据流图已更改。因此,您必须在运行时“重新编程”图形,否则我们应该将其称为“元编程”。在Excel中,宏可以完成这项工作,但是随后我们失去了数据流的纯度。

我有一个不太坏但不是完美的解决方案。我制作了一个电子表格,一个带有PHP后端的AJAX应用。纵轴是时间(天),线是分量。包括输入(行可以由用户编辑),垂直平均,水平平均/总和以及某些特定于域的统计计算之类的组件。它只有一个问题:这是“一维的”。只要我想要sum和avg之类的东西,我就可以添加新行,并创建用于计算内容的组件。但是有一个很强的约束:列始终是天(我已经做了周和月的“视图”,将每日数据显示为sum / avg,但仍然是一维的)。我无法展示它,它是协作的,需要PHP后端任务才能运行7/24,但我的主机提供商不支持它。

因此,我的模型(最好用“水平的日子”来形容)无法处理其他类型的问题。

我有个主意,如何解决这个问题:tabs

当您陷入Excel并不得不创建另一个表时,可以在同一选项卡上使用不同的区域,或打开另一个选项卡。另外,在选项卡之间进行引用也不舒服,我更喜欢第一种方法。我认为,选项卡应该显示在同一屏幕上,例如不重叠的窗口。

每个桌子都应有其增长轴:垂直,水平或固定。垂直生长表具有线成分(如我的日式电子表格),其中所有列均具有“相同”公式,水平成分具有列成分,固定大小的表格与任何电子表格一样。

因此,当用户添加新行/列时,新行/列将具有相同的公式。

另外,在电子表格中,我讨厌这样的事情:如果我有1000行,我需要将相同的公式复制1000次。它是错误的来源(在某些行中保留公式的旧版本),浪费内存(将相同的公式存储1000x)。

也许我是错的,并且该模型中存在概念错误,但是我希望它是一个很好的发人深省的方法。


我经常想知道电子​​表格是否需要“行:列地址来解决被认为是有害的”。其中所有内容均为命名范围,公式适用于范围,并且单元格用作输入/显示。
舍伍德·博茨福德

0

我的想法是使用电子表格来定义计算逻辑,同时尝试以使其对编程语言友好的方式设置电子表格。友好的意思是->使用名称范围/引用而不是cellXY坐标,然后将公式分解为较小的部分。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.