Excel可能是世界上使用最广泛的编程语言。微软正在努力将其转变为一种更好,更强大的编程语言,同时又不丧失它的卓越之处。
电子表格的功能不只是计算。它们可以帮助人们分析数据-并且通常,他们可以将分析汇总为决策模型。用JavaScript或PHP编写相同类型的决策,很显然您正在编程。
“(我们问)'为什么要自己构建这个?为什么不去IT部门寻求用编程语言(编写)的系统?”他们说'是的,我们这样做了,他们说是分别是200万欧元和6个月,然后是1000万欧元和9个月,它具有我在一个下午构建的电子表格的一半功能。” Excel通常被称为原始的低代码工具。当安然公司的文件公开时,它提供了难得的机会来了解企业如何将电子表格用于此类业务决策模型,这促使 莱顿大学副教授Felienne Hermans采访了典型的业务用户,以了解他们为何在Excel中有效地构建应用程序。
几年前,赫尔曼斯(Hermans) 在Excel中构建了图灵机。现在,新的 LAMBDA 功能将Excel公式转换为可重用的自定义函数,从而使它成为 Turing-complete。有效地,您可以构建用于处理Excel内部数据的规则,这些规则不是Excel内置的规则,并且具有与其他任何通用编程语言一样强大的功能。但是您不必去学习VBA或JavaScript之类的编程语言,就可以使用现有的自定义函数选项进行操作 。
比起任何一种编程语言,数百万的人知道如何在Excel中进行有效的编程。但是直到最近,Excel仍缺少一些用于编程的关键功能,包括内置的自定义函数,变量和自定义数据类型。
此外,Excel产品团队还与Microsoft Research Cambridge的编程语言研究人员建立了长期合作关系, 其中包括 功能编程语言Haskell的Microsoft研究人员 Simon Peyton-Jones。
目的是确保Excel不会限制业务或科学专业人员可以在电子表格中执行的操作,并使其更容易确保其正确性和强大性。
Excel的组程序经理Brian Jones对TechRepublic表示:“ Excel是最广泛使用的编程语言 。” “如果您编写Excel公式,则将它们放在网格上;它是函数式编程。但是在与Simon [Peyton-Jones]的合作中,他帮助我们仔细考虑了哪些缺失的核心原语将使它变得更强大人们将能够以更可靠,更健壮,更不易出错,更有效的方式来构建他们以前已经构建的东西,从而能够更快地完成工作,并且其他人会更容易理解您正在构建的内容。”
使Excel更像一个平台,超越了人们一直能够操纵的文本和数字,从而涵盖了更丰富的数据。“数据类型意味着,它实际上可能不是对象,而不仅仅是一个字符串或数字,而是一个对象-一组丰富的信息,例如股票或地理信息。我们建立了伙伴关系,因此所有 Wolfram 数据都可以作为数据类型,企业可以建立自己的数据类型。因此,我可以定义一个自定义的客户数据类型,并将其显示在单元格中。”
例如,数据类型可以基于Power BI中的业务数据 。基于数据类型的动态数组。琼斯解释说:“这个想法是一个函数可以接收一个数组,而不是一个单一的值,并且可以返回一个数组。” Excel中的一项新功能以此为基础,不仅可以返回股票的当前价格,还可以返回其历史记录。“您可以传入一个股票的数据类型,其结果将是一个数组,该数组是该股票的股票历史记录。”
琼斯补充说:“我们还一直在改进实际的公式语法。” “有时候,这些真正庞大的公式对于人们来说,太复杂了,以至于无法阅读和理解正在发生的事情。” 使用LET函数声明变量可以使公式更容易理解;但是事实证明,变量还可以使公式的执行速度更快:“编写方式可以使公式更加有效,”琼斯说。
LAMBDA建立在这些功能的基础上,通过允许用户使用Excel自己的公式语言创建自定义函数,并使一个函数调用另一个函数(称为递归),使Excel成为一种更完整的编程语言 。
“更高级的人总是可以将自定义脚本作为一个函数编写。我们拥有旧的用户定义函数,这些函数本质上类似于COM加载项,因此您可以编写自己的命令式逻辑来构建自定义函数,这非常多我们现在可以使用JavaScript来实现这一功能,但仍然是开发人员场景。”琼斯说。
Jones补充说,一些开发人员正在以高级方式使用Excel JavaScript功能,例如调用运行Azure函数的Python脚本。“他们编写Python,编写一个JavaScript函数,该函数的行为类似于Excel中的函数,并采用您引用的值,然后将其传递给在云中执行的Python,以增强Excel的公式语言。”
“现在您可以创建自己的自定义函数,但是您只需使用Excel公式语言即可完成。知道如何编写公式的人比知道编写JavaScript的人高出几个数量级。”
请参阅: Windows 10“开始”菜单黑客 (TechRepublic Premium)
在现有公式的开头放置“ = LAMBDA”,它成为您可以在工作表中其他位置重用的功能,而不必担心在复制和粘贴公式时引用会发生更改。您可以通过使用LET声明变量来使事情变得更清楚,尤其是对于其他想要理解电子表格的人-或将来自己(如果您必须修正错误)。
琼斯建议:“基本上,团队将LET和LAMBDA视为一项合并投资。一旦开始构建LAMBDA,您将开始越来越多地使用LET。”
“如果我引用单元格B9的时间不同,如果我想去引用其他单元格,则必须进行大量更新。” Excel会尽力做到这一点,但是LET意味着进行更改的地方更少。“我可以创建一个变量并将其分配给B9的值,现在我在其他任何地方都只引用该变量。因此,现在,如果我想从B9更改为B10,则可以在此位置进行编辑。”琼斯解释道。
“ LAMBDA是下一步,在这里我可以采用与该公式相同的逻辑,并且可以将其包装在LAMBDA函数中。现在,如果我开始输入公式,Excel自动完成功能将自动看到LAMBDA为我可以使用一个新功能。我可以引用所需的单元格,按回车键,它就会给我结果。”
如果以后在原始公式中发现错误,则只需在LAMBDA中更正一次,而不必每次使用该公式进行搜索并进行相同的更改。琼斯说:“从调试的角度来看,它不易出错,而且其他人更容易找出您要做什么的意图。”
您还可以通过调用一系列简单函数(一种非常常见的编程技术)来构建更复杂的函数。琼斯补充说:“这是您以前无法在Excel中完成的;要访问一组信息。”
当前,LAMBDA仅在您创建它的工作表中可用,并且您可以在Excel名称管理器中使用它。但是在一个电子表格中有用的功能通常在其他地方也有用,人们将希望与同事共享功能。琼斯说,那将及时到来。
“显然,这只是第一步。就创作经验而言,名称管理器本身并不是最出色的,因此,很显然,我们需要继续改进这一点。我们将逐步研究一下正确的模型,说明您可能如何使用这些LAMBDA并与其他人共享。”
同样,用于自动执行Excel的JavaScript脚本当前仅在单个工作表中可用,并且Excel团队已经在与客户讨论共享这些脚本的最佳方法,因此它很可能是一种类似的共享模型。
琼斯说:“每个人都有你写过的要在其他地方使用的公式,每个人都有自己的存储和重复使用方式。”
查看: 每个用户应掌握的60个Excel技巧
一旦功能更易于共享,它们也将更易于跟踪组织内的治理并进行修订。“如果看到所有被使用的地方,如果意识到有错误,就知道您需要查看的所有工作簿都可能会发生该错误。这是关于在解决方案中具有更高的安全性和健壮性,人们正在构建,因为有数亿人在编写Excel公式-本质上,电子表格是应用程序,人们正在开发这些应用程序。”
琼斯说,LAMBDA函数封装了可能非常有用的公式,因为Excel用户通常是其领域的专家。
“您可以想象我们不仅可以在其他电子表格中共享LAMBDA的方法,而且可以使它成为甚至在Excel之外也可以调用的东西。我们将探索这一点,因为有很多人可以非常编写此代码Excel的宝贵逻辑。”
“使用Excel的人是了解业务问题的人。他们是了解真正需要构建的人,而不是让开发人员介入,他们试图解释需求并编写代码。这就是Excel的优点:有需求的人就是构建解决方案的人。”
新的编程功能的组合最终可能导致组织为自己的领域自定义Excel。“您可以创建自己的自定义数据类型,然后可以创建一些知道如何对这些数据类型起作用的自定义函数,然后到达使用一组数据类型构建用于物理的Excel或用于化学的Excel的位置。琼斯说:“现在人们可以开始决策,并在世界上对他们重要的任何事物上建立这种逻辑。”
“很多人在考虑Excel和建模时,都会考虑对财务数据进行建模。这实际上是在说:'不,您现在可以使用Excel进行建模,并对世界上发生的任何事情做出决策。'我们希望随着时间的推移,看到一个生态系统,其数据类型围绕着人们想要去做的所有类型的对象,他们想要去做决定或跟踪或使用,然后在网格中使用我们的公式语言。”
网格定义了Excel,它提供了一种可视化编程形式。琼斯指出:“ Excel的美丽,Excel的灵魂,是网格和功能。” “公式语言本身并不是超级强大;网格本身也不是超级强大。但是,两者的结合就是您获得的魔力。”
“由于您可以迅速开始制定一套逻辑,因为每个单元格都是一个步骤,而您所建立的功能使您很容易了解正在发生的事情,并学习如何建立您想要的逻辑。您可能甚至没有想到自己正在做的事情就这样做了。即使当人们提交报告时,通常也会显示很多数字,但实际上只有几个单元格可以显示,但是如果您对我们如何得出此结果感到好奇,那么这里是过渡过程中的所有临时步骤。”
琼斯建议,这意味着网格已经是一种调试工具。“您可以跨单元打破逻辑,因此与其编写一个大公式,不如将其分解为几个步骤,一个公式得到一个结果,然后单击下一个结果。网格几乎为您提供了这种自然的调试器-就像每个单元都有自己的小监视窗口。”
“ LAMBDA进行了一些更改,尤其是在现在实现的过程中,您正在编写完整的内容并将其放入名称管理器中。因此,我们将研究人们使用的模式是否是他们首先采用的模式,直到他们到达了他们知道逻辑起作用的地方,然后将其组合起来;或者,如果我们需要一种更好的方法来查询公式的不同部分,以查看这部分的结果与那部分的结果,那么我可以理解为什么我没有得到我期望的结果。”
Excel无法获得程序员可能会认识到的调试器来提供帮助,但是会有更多帮助。琼斯说:“我们绝对会在人们了解他们的结果以及如何去解决这些结果方面,将重点放在一些关键的地方。”
但是,添加更多正式的编程语言构造并不是要把Excel变成有经验的开发人员的工具。
“尽管这增加了更多的功能,但我们希望做到这一点,以便使Excel对越来越多的人感到平易近人。我们绝对不会试图将其变成更多的高端工具。我们认为Excel会做得很好,我们尝试采用您在编程语言中看到的某些模式并将其带给非程序员。”
琼斯承诺对名称管理器进行改进,该名称管理器是放置新的LAMBDA功能的合乎逻辑的地方,以便人们可以开始使用它,但目前有些原始。“我们永远都不想成为一个功能完善的IDE,但是如果您熟悉名称管理器,那么它只是您正在编辑的单行文本字符串。实际上,我们的入门帮助文章将建议人们先将LAMBDA写在网格中,然后将其复制到名称管理器中,我们肯定可以做很多事情来改进它,而这是我们将要反复进行的一个方面! ”
Excel还将尝试开始尝试预测要键入的公式并自动完成,而不是让用户完整键入。“我们开始越来越多地寻找可以利用情报来帮助人们的方法,因此在他们编写公式,尝试帮助人们建立正确类型的公式时,我们可以更具预测性。做出正确的选择。”
与往常一样,新的LAMBDA功能将逐步在Office Insider Beta通道中构建,从大约一半的Insiders开始,所以并不是每个Insider都会看到它。它不仅限于特定的Office SKU,而且将在包括Excel在内的所有Office 365和Microsoft 365订阅中使用。
评论专区