【问题标题】:Methods to compile an Excel spreadsheet into a .NET assembly?将 Excel 电子表格编译成 .NET 程序集的方法?
【发布时间】:2011-04-03 20:51:17
【问题描述】:

我有一个电子表格,我想将它编译成可以从 C# 调用的表单。

当然,我希望能够在读取计算结果之前更改电子表格的输入。

你推荐的方法是什么?

更新:

为了澄清,我想将现有的 Excel 电子表格作为可从 .NET 调用的 Web 服务提供。我不能依赖 Excel,因为它在 Web 服务器上运行。

更新:

我使用了下面的答案,它就像一个魅力。现在我可以在 Excel 中制作公式原型,然后将其直接转换为 C# 并编译成程序集。


Reading Excel Files as a Server Process 也涵盖了这个问题。

【问题讨论】:

  • 是的 - 我需要有关如何在 Excel 之外重建逻辑的指导,即将电子表格“编译”成 C# 代码或 .NET 程序集。
  • 试图将数据转换为代码通常不会奏效。使用 Microsoft.Office.Interop.Excel 命名空间。
  • 您可能会发现这个问题及其答案很有用:stackoverflow.com/questions/3449541/exporting-excel-to-c/…
  • @Hans Passant 谢谢,但我需要能够在不依赖 Excel 的情况下将此应用程序部署到 Web 服务器。

标签: c# .net excel


【解决方案1】:

TMS Flexcel Studio for .NET 中的 FlexCel API Mate 可让您将现有的 Excel 电子表格转换为 C# 代码,重新计算电子表格,并使用 API 调用从单元格中读取结果。

请参阅video tutorial of FlexCel ApiMate。视频状态,引用:

ApiMate 将转换 Excel 文件 转换为 C#、VB.NET 或 Delphi.NET 程序。

文档还声明:

重新计算200多个Excel 功能。

和:

您可以在 代码到已经很大的列表 由 FlexCel 实现,并使用它们 作为报告中的本机函数。

更新

这是来自 TMS 技术支持的澄清:


通过电子邮件发送的问题:

我想做以下事情:

  1. 将现有的 .xlsx 文件转换为 C# 代码,从数据库中导入数据。
  2. 允许 FlexCel 为我重新计算电子表格。
  3. 从单元格中读取答案(用于我的 C# 代码中的其他位置)。
  4. 跳过将完成的 .xlsx 文件写入磁盘的步骤(我们不需要这个)。

简而言之,我想将 FlexCel 用作“Webserver Excel 计算引擎”,因此我们不必在 Web 服务器上安装 Excel 来执行电子表格计算。

我描述的步骤可行吗?还是我误解了组件的工作原理?


电子邮件回复:

  1. 您可以直接从数据库加载文件(通过从流中打开)或使用 APIMate 工具(包含在工具文件夹中)将文件转换为 c# 代码。
  2. 是的,FlexCel 将使用 XlsFile.Recalc() 重新计算它
  3. 是的,您也可以读取重新计算的值。
  4. 是的,如果你不想写答案,你不需要写。

除此之外,为了将其用作重新计算引擎,我们有“RecalculateCell()”方法,它不会重新计算整个电子表格,而只会重新计算获取特定单元格中值所需的单元格。因此,例如,如果您的结果在 A1 中,您可以在 A1 中调用 RecalcCell,它只会重新计算获取 A1 中的值所需的所有单元格(包括依赖项,所以如果 A1 有一个带有 a2 的公式,a2 有 a3,将计算所有 3 个)。

还有一个 RecalcExpression 方法,它将重新计算任何公式的值,而无需将其写入单元格。因此,假设您在 A 列有一列数字,并且您想知道总和。您可以使用 RecalcExpression("=sum(A:A)");知道总和,无需在 B1 中输入带有总和的公式,然后读取该公式的值(当然你也可以这样做)

【讨论】:

    【解决方案2】:

    似乎有一个来自 Microsoft 的框架,名为 Excel Services“为您的应用开发计算引擎”

    预告片摘录:

    本文讨论:

    • Excel 作为基于服务器的应用程序
    • Excel Services 架构和 API
    • 创建托管的用户定义函数
    • 使用 Excel Services 构建自定义解决方案

    我从未使用过它,但主页上的信息图形最令人鼓舞。

    感谢您提出这个问题:)

    【讨论】:

      【解决方案3】:

      Calc4web将电子表格转换成C++代码,可以从C#、Java等中调用

      来自网站的报价:

      Calc4Web 为程序员提供了更好的 完成工作的方法:创建一个 小电子表格,其中包含 逻辑,然后按一个按钮来转动它 将电子表格转换为有效的 C++ 代码 在第一次尝试时,代码可以是 从任何语言调用:C、C++、C#、 Visual Basic、Java 和任何其他 可以调用 DLL 的语言。

      我还怀疑,由于它将电子表格逻辑编译为纯原生 C++ 代码,因此与 Excel 相比会非常快(网站称“快 5,000 倍”)。

      【讨论】:

        【解决方案4】:

        查看ActiveMesa X2C,这是一个将 Excel 电子表格转换为 C# 和 C++ 的工具。 (免责声明:我是作者。)

        【讨论】:

        • 谢谢,这看起来很有趣。它支持多少百分比的内置 Excel 函数?顺便说一句,有一个 CodePlex 项目通过使用 Boost 上的包装器在 Excel 中复制一些 Excel 功能,并使用 SWIG 支持 C#。
        • @Contango 它支持很大一部分 Excel,包括所有数学表达式。有时会有差距,但我会很快修复它们。在产品页面查看试用版!
        • 链接已失效。
        【解决方案5】:

        有关允许您在不依赖 Excel 的情况下使用 Excel 电子表格的电子表格组件列表,请参阅DevDirect Spreadsheet Components

        【讨论】:

          【解决方案6】:

          SyncFusion Essential Calculate.

          引用:

          ...你可以完全加载, 操作和计算 Excel 不依赖于电子表格 Excel。

          【讨论】:

            【解决方案7】:

            没有办法将excel电子表格编译成c#代码。它们在任何方面都不是同一个“东西”,同样你不能把你正在阅读的这个文本,或者一个word文档编译成代码或某种集合。

            您必须更具体地说明您想要获得的功能类型,这将有助于您获得答案。

            有几种方法(在此处的其他答案中指出)允许您访问 Excel 电子表格数据并利用它们,但这绝不是编译它们。

            【讨论】:

            • 不正确。 calc4web.com 将电子表格转换为 C++ 代码,可以编译成 .dll 并从 .NET 中调用。
            • 好吧@Gravitas,这并不是真的将电子表格转换为代码 - 它有一个 GUI,允许您使用 excel UI 和函数创建函数 link。但我必须承认它更接近于“编译”excel,然后我会想象存在..
            • 再次不正确:它确实将整个电子表格的功能编译为纯 C++ 代码。这就是它可以说明“重新计算比 Excel 快 5,000 倍”的方式。此外,TMS Flexcell 也会做同样的工作(见我上面的回答)——它将 Excel 电子表格转换为 100% 原生 C# 代码(独立于 Excel),然后您可以使用 C# 调用进行查询。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-09-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-02-16
            • 1970-01-01
            相关资源
            最近更新 更多