以编程方式创建Excel 2007表

时间:2008-09-30 14:21:26

标签: c# .net excel

我正在尝试以编程方式创建Excel 2007文档。现在,我找到了两种方法:

目前,我使用ExcelPackage,它有一些非常严重的缺点和问题。因为我不需要创建过于复杂的Excel工作表(最复杂的是我明确需要将单元格类型设置为数字或文本),我接下来会关注选项1,但我只是想知道是否存在生成Excel 2007表格的任何其他好的和支持的方法?如果可以创建奖励积分而无需将其保存到硬盘,即生成并直接将它们输出到流中。

.net 3.0是这里的目标,没有3.5善良:(

编辑:到目前为止,谢谢。 XML SDK确实只有3.5,但俄罗斯路由......呃... COM Interop也是我想要尽可能避免的东西,特别是因为Excel 2007有一些有点复杂但仍然很容易创建的文档格式。我将查看发布的各种链接和提示。

8 个答案:

答案 0 :(得分:9)

您可以尝试使用Office Open XML SDK。这样您就可以使用MemoryStream来创建内存中的Excel文件,并且比手动生成所有XML更容易。

正如Brian Kim指出的那样,SDK的2.0版本需要.NET 3.5,而你声明它不可用。 SDK的Version 1也可用,它支持.NET 3.0。它不完整,但至少可以帮助您管理文档的XML部分以及它们之间的关系。

答案 1 :(得分:2)

我只是生成HTML表格,可以通过Excel打开:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Wnioski</title>
<style type="text/css">
<!--
br { mso-data-placement: same-cell; }
td { mso-number-format: \@; mso-displayed-decimal-separator: "."; }
-->
</style>

<table>
<tr style="height:15.0pt">
<td style="mso-number-format: general">474</td>
<td>474</td>

<tr>
<td>data2</td>
<td>data3</td>

<tr>
<td style="mso-number-format: &quot;yyyy-mm-dd&quot;">2008-10-01</td>
<td style="mso-number-format: standard">0.00</td>

<tr>
<td style="mso-number-format: general">line1<br>line2<br>line3</td>
<td></td>

</table>

这也可以作为Word中序列字母的数据源,适用于OpenOffice calc等。生成它很简单。

答案 2 :(得分:1)

我打算评论BKimmel的帖子,但显然我还没有足够的SO酷点。

如果Excel已经打开,您可以获得令人讨厌的“personal.xls已打开”消息。我先尝试使用该应用。如果失败,则创建它:

On Error Resume Next
Set myxlApp  = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
  Err.Clear
  Set myxlApp = CreateObject("Excel.Application")
  If Err.Number <> 0 Then
    ' return False, show message, etc.
  End If
End If

答案 3 :(得分:1)

我在SpreadsheetGear for .NET中完成了大部分Open XML(xlsx)工作,这远非一项微不足道的工作。我建议使用Office Open XML SDK或其他第三方库,如SpreadsheetGear或我们的竞争对手之一(只需谷歌“SpreadsheetGear”,看看我们的竞争对手是谁)。

SpreadsheetGear for .NET似乎可以满足您的需求:

  • 适用于.NET 2.0,.NET 3.0和.NET 3.5。
  • 支持使用IWorkbook.SaveToStream写入流或使用IWorkbook.SaveToMemory写入字节数组。
  • 支持Excel 97-2003(xls)工作簿,如果您需要支持很多用户,这可能是您要求的下一步工作。

您可以下载免费的全功能评估here

答案 4 :(得分:0)

我曾经使用函数库生成Wordprocessing Markup文档,用于为表和段创建正确的XML。

然后我只是将Response标头的MIME类型更改为word文档,并将XML作为响应发送给客户端。它可以在浏览器中打开,也可以另存为文件。

尽管有MS Open XML SDK

,但似乎没有相同的2003 SDK for Excel

答案 5 :(得分:0)

Excel可以通过COM对象编写脚本。我没有尝试过,但这应该是一个可靠的解决方案,虽然既不快速也不轻巧。

无论您最终做什么,请检查您的解决方案是否支持Unicode。我使用现有的解决方案来编写xls文件(即2007年之前的文件)时遇到了一些严重的问题。

答案 6 :(得分:0)

您可以使用主互操作程序集(Office API)以编程方式生成Excel文档 - 我不想使用它们做任何过于复杂的操作,但听起来并不是您的要求。

这种方法也适用于在内存中生成文档。

以下是一些资源:

答案 7 :(得分:0)

每个代码势利的人都讨厌vbscript,但它很简单并且有效:

Set myxlapp = CreateObject("Excel.Application")
Set mywb = myxlapp.Workbooks.Add
myxlapp.Visible = true

将它放在一个文本文件中,在末尾附加一个“.vbs”并预先添加。