2008-09-30 86 views
14

我试图以编程方式创建Excel 2007文档。现在,有两种方法,我发现:以编程方式创建Excel 2007表格

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

.NET 3.0的目标在这里,没有良善3.5 :(

编辑:感谢这么远的XML SDK确实是3.5只,但俄罗斯鲁莱特......呃...... COM互操作是也是我想尽可能避免的东西,特别是因为Excel 2007有一些复杂但是很容易创建的文档格式,我会看看发布的各种链接和提示

回答

9

你可以尝试使用Office Open XML SDK 。这将允许您使用说MemoryStream在内存中创建Excel文件,并且比手动生成所有XML更容易。

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

+0

看来.net 3.5是必需的。 – 2008-09-30 17:42:00

+0

好点,更正。 – 2008-09-30 21:08:12

0

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

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

似乎有不被用于Excel相同的2003 SDK虽然有MS Open XML SDK

0

Excel是通过COM对象非常编写脚本。我还没有尝试过,但这应该是一个坚实的解决方案,虽然不是快速或轻量级。

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

+2

服务器上Excel的COM自动化可能非常脆弱。微软只在桌面上支持它。 – 2008-09-30 14:28:51

0

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

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

这里有一些资源:

+0

避免PIA ...是的,在.ss和主Interop Ass-Emblies之间的疼痛并不是巧合。相信我,我仍然可以感受到伤害。 – 2008-09-30 22:23:32

0

每个代码势利活着恨VBScript中,但其实很简单,它的工作原理:

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

Put在文本文件中,在末尾附加一个“.vbs”。

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 
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等一起使用。而且它很容易生成。

1

我在中完成了大部分Open XML(xlsx)工作,这远非一项简单的练习。我建议使用Office Open XML SDK或其他第三方库(如SpreadsheetGear或我们的竞争对手之一)(只需Google“SpreadsheetGear”查看我们的竞争对手是谁)。

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

  • 工程与.NET 2.0,.NET 3.0和.NET 3.5。
  • 支持使用IWorkbook.SaveToStream写入流或使用IWorkbook.SaveToMemory写入字节数组。
  • 支持Excel 97-2003(xls)工作簿,如果您需要支持很多用户,这些工作簿可能会成为您接下来要求提供的工作簿。

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

相关问题