如何在没有安装Office的情况下以编程方式创建、读取、写入Excel?

31

我对于读写创建Excel文件的各种方式感到非常困惑。VSTO、OLEDB等等,但它们似乎都要求必须安装Office。

我的情况是这样的:我需要开发一个应用程序,以Excel文件作为输入,进行一些计算并创建一个新的Excel文件,这个新文件基本上是第一个Excel文件的修改版。而且这个应用程序所运行的计算机可能没有安装Office。(不要问我为什么……)

我需要支持所有的Excel格式。唯一的救赎在于电子表格本身的格式非常简单。只是一堆列和值,没有花哨的东西。不幸的是,不能使用CSV,因为最终用户可能甚至不知道什么是CSV文件。


你需要支持哪些版本? - Nader Shirazie
3
你需要对“丢失功能”有多少容忍度?例如,你是否需要保留公式、数据透视表、图表等?或者这些文件中只有数据? - Nader Shirazie
1
我认为这个问题以前已经被问过了,只是现在找不到了。 - Zaki
请查看右侧的“相关”链接,特别是https://dev59.com/3kXRa4cB1Zd3GeqPtJud和https://dev59.com/UUXRa4cB1Zd3GeqPrFxA。 - harpo
@Andy Mikula - 我猜这些文件是要进一步分发的。而且,你可以使用Excel Viewer打开文件。 - Lunatik
显示剩余2条评论
11个回答

48
将Excel表格以HTML表格格式呈现:
<html>
<body>
  <table>
    <tr>
    <td style="background-color:#acc3ff">Cell1</td>
    <td style="font-weight:bold">Cell2</td>
    </tr>
  </table>
</body>
</html>

并将您的文件命名为xls扩展名。Excel会自动进行转换


25
你这是在开玩笑吧。 - eviljack
3
我已多次使用此方法,简单易行且效果很好。但在Web应用程序中,只需将内容类型/ MIME类型设置为Excel(我无法准确记住MIME类型)即可。 - Neil N
1
而且,根据您的Excel版本,它通常也会捕捉到格式。加粗的表格单元格?Excel也会带过来。背景颜色?也会复制过来... - Neil N
1
我经常使用这个功能从Web应用程序导出xls文件。 - recursive
5
这是我本周看到的最酷的东西。我已经花了几个小时尝试寻找一种从PHP导出XLS的好方法。 - Neil Aitken
显示剩余2条评论

8

如果没有安装Office,您需要使用专门设计用于理解Excel二进制文件格式的工具(除非你只想打开Office 2007 .xlsx文件)。

我发现并且使用的最好的工具是 SpreadsheetGear,它除了是.NET本地化之外,比COM / OLE解决方案更快,更稳定(过去我曾经使用过这些解决方案)。


6

建议使用CSV文件代替。Excel可以很好地读取它们,并且更易于使用。如果您需要使用.xls文件,则尝试同时支持OpenOffice和Excel。OpenOffice可以读写Excel文件。


2
您考虑过第bazillion和一个方法吗:使用Open XML SDK?您可以保留样式并进行微调以满足您的需要。任何您可以在实际文件中完成的事情都可以通过编程来实现。SDK配备了一个名为Document Reflector的工具,显示底层XML甚至显示可用于生成它们的LINQ语句。这对于尝试操作它、查看如何进行更改,然后在代码中重新创建它非常重要。
唯一的注意事项是,这仅适用于新的基于XML的格式(*.xlsx),而不适用于旧版本。学习曲线略微陡峭,但更多的材料正在博客和其他网站上发布。

2
如果成本不是问题,我建议看看Aspose的Excel产品。我使用过他们的Word产品并且很满意。
Aspose.Cells: http://www.aspose.com/categories/.net-components/aspose.cells-for-.net/default.aspx

2
在尝试了一些免费的替代品之后,我的团队也决定使用Aspose.Cells。它非常直观易用,代码也容易维护。 - dawntrader

1

Excel XLSX 文件“只是” XML 文件 - 更准确地说,它们是包含多个 XML 文件的 ZIP 文件。只需将 Excel 文件 Test.xslx 重命名为 Test.zip 并使用您喜欢的 ZIP 程序打开即可。XML 模式已经标准化并且可用。但我认为仅使用原始的 XML 处理工具和框架可能不那么容易操纵它们。


0

Excel文件采用专有格式,因此(据我所知)如果没有Office互操作性可用,您将无法执行此操作。存在一些第三方工具(可能从MS许可该格式?),但我自己没有使用过它们,无法评论它们的实用性。

我假设您无法控制基本文件格式,即简单的CSV或XML格式不可行?


0

我曾经使用过一个非常好的库,叫做CarlosAg,它使用Excel XML格式。它非常棒(而且Excel也能识别这种格式),而且速度也非常快。你可以在这里查看。

顺便说一下,我们曾经出于与你相同的原因使用它。生成这些文件的服务器无法安装Excel。


0

如果您无法按照@RHicke的建议使用CSV文件,并且假设您正在开发一个Web应用程序,因为根据要求,桌面应用程序将保证安装XL。

我会说,将您的处理应用程序创建为一个Web服务,并构建一个XL插件,该插件将直接从XL与您的Web服务进行交互。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接