你如何使用Excel服务器端?

客户想要“networking启用”电子表格计算 – 用户指定某些单元格的值,然后将结果值显示在其他单元格中。

(他们不希望向用户展示“类似电子表格”的界面,这不是UI问题。)

他们有一个庞大的电子表格,有很多很多的计算表。 但是,最后只有两件事情是重要的 – (1)你把数字放在一张表上的几个单元格中,(2)从另一个表格的单元格中得到相应的数字。 其余的是一个黑匣子。

我想给用户提供一个UI来input他们想要的数字,然后我想以编程方式打开Excel文件,设置数字,告诉它重新计算,然后读取结果。

这是可能的/可取的吗? 有没有一个商业组件,使这更容易? 我不考虑他们的陷阱吗?

(我知道我可以使用Office自动化来做到这一点,但我知道不build议做那个服务器端,因为它试图在用户的上下文中运行等)

编辑:很多人都说我需要在代码中重新创build公式。 但是,这将是非常复杂的。 这听起来像这可能是一个解决的问题 – 有谁知道某种types的组件可以帮我吗? 有人必须创build一些“Excel公式到代码”生成系统。 我很乐意为此付出代价。

编辑/解决scheme: SpreadsheetGear是我正在寻找。 除此之外,它还允许您使用XLS作为计算器。 您可以设置所选单元格的原始值,然后读出计算单元格的值。 正是我在找什么。

你绝对不想在服务器端使用互操作,在客户端使用它作为kludge已经够糟糕的了。

我可以看到两个选项:

找出电子表格逻辑。 从长远来看,这可能会使您的业务逻辑成为已知数量,从短期来看,您可能会发现电子表格中实际存在错误(我曾经遇到过多年使用的怪物电子表格,他们的错误 – 每个人只是假设答案一定是正确的)

评估SpreadSheetGear.NET ,它基本上是互操作性的替代品,它不需要Excel(它在.NET中复制了大量的Excel非可视化逻辑和IO)

这是可能的,但不是可取的(并且正式不受支持)。

您可以通过COM或.NET主互操作程序集与Excel进行交互,但这应该是客户端过程。

在服务器端,没有显示器或桌面可用,任何意外的对话框(例如)将使您的Web应用程序挂起 – 您的应用程序将performance为片状。

另外,将Excel进程附加到每个请求并不是一个低资源的方法。

制定黑匣子并用适当的编程语言重新实现它显然是更好的select(如“更可靠和更快”)。

相关阅读: KB257757:关于Office的服务器端自动化的注意事项

虽然这当然可以使用ASP.NET,但它是非常不可取的。 它不可扩展,容易出现并发错误。

最好的办法是分析电子表格计算并复制它们。 现在,当然,你的企业不会喜欢这样做的时间,但(可能)会给他们一个更有用的系统。

或者,您可以简单地将电子表格提供给用户从您的网站,在这种情况下,你几乎什么都不做。

编辑:如果你的利益相关者真的坚持使用Excel服务器端,我build议你好好看看Excel服务, @约翰桑德斯build议。 它可能不会让你得到所有你想要的东西 ,但它会给你带来很大的帮助,并且应该解决一些你最终想用ASP.NET做服务器端的问题。

这并不是说这是一种万灵丹; 你的里程肯定会有所不同。 Sharepoint并不是很便宜的购买或维护。 事实上,如果您使用Sharepoint路线,短期成本很容易被长期成本所压倒 – 但这可能是满足要求的最佳select。

我仍然build议你推动在一个单独的.NET模块中编写所有的逻辑。 这样你就可以使用它在服务器端客户端。 Excel可以轻松地将计算传递给COM对象,并且可以非常容易地将.NET库作为COM对象进行发布。 最后,你会有一个更可维护和可用的架构。

忽略讨论在操作服务器端的Excel工作表是否合理,一种方法可能看起来像采用

Microsoft.Office.Interop.Excel.dll

使用这个库,你可以告诉Excel打开一个电子表格,改变并从.NET读取内容。 我在WinForm应用程序中使用过这个库,我想也可以从ASP.NET中使用它。

不过,考虑已经提到的并发问题…但是,如果工作表不经常访问,为什么不…

最简单的方法可能是:

将Excel工作簿上传到Google文档 – 根据我的经验,这非常干净

使用Google Spreadsheets Data API更新数据并返回数字。

这里有一个链接,让你开始这个,如果你想要这个方向:

http://code.google.com/apis/spreadsheets/overview.html

让我比其他人更坚决:不要使用Excel服务器端。 它旨在用作桌面应用程序,这意味着它不打算从随机的不同线程中使用,一次可能使用多个线程。 与使用Excel(或任何其他Office桌面产品)构成服务器相比,您最好编写自己的电子表格。

这是Excel Services存在的原因之一。 在MSDN上快速search出现了这个链接: http : //blogs.msdn.com/excel/archive/category/11361.aspx 。 这是一个类别列表,因此包含有关该主题的博客文章列表。 另请参阅Microsoft.Office.Excel.Server.WebServices命名空间 。

这听起来像你说的是用户的电子表格在本地系统上打开,你想要一个网站来操纵本地电子表格?

如果是这样的话,你不能这样做。 即使Office自动化也无济于事,除非您要求他们将工作表上传到服务器并下载新的更改版本。

你可以做的是创build一个Web服务来进行计算,并添加一些VBA或VSTO代码到Excel工作表,以交谈该服务。