我正在尝试以编程方式创建Excel 2007文档。现在,我找到了两种方法:
目前,我使用ExcelPackage,它有一些非常严重的缺点和问题。因为我不需要创建过于复杂的Excel工作表(最复杂的是我明确需要将单元格类型设置为数字或文本),我接下来会关注选项1,但我只是想知道是否存在生成Excel 2007表格的任何其他好的和支持的方法?如果可以创建奖励积分而无需将其保存到硬盘,即生成并直接将它们输出到流中。
.net 3.0是这里的目标,没有3.5善良:(
编辑:到目前为止,谢谢。 XML SDK确实只有3.5,但俄罗斯路由......呃... COM Interop也是我想要尽可能避免的东西,特别是因为Excel 2007有一些有点复杂但仍然很容易创建的文档格式。我将查看发布的各种链接和提示。
答案 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: "yyyy-mm-dd"">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似乎可以满足您的需求:
您可以下载免费的全功能评估here。
答案 4 :(得分:0)
我曾经使用函数库生成Wordprocessing Markup文档,用于为表和段创建正确的XML。
然后我只是将Response标头的MIME类型更改为word文档,并将XML作为响应发送给客户端。它可以在浏览器中打开,也可以另存为文件。
,但似乎没有相同的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”并预先添加。