14

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

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

.net 3.0 是这里的目标,没有 3.5 的好处 :(

编辑:到目前为止谢谢。XML SDK 确实只是 3.5,但俄罗斯轮​​盘...呃... COM 互操作也是我想尽可能避免的事情,特别是因为 Excel 2007 有一些复杂但仍然很容易创建文档格式。我会看看发布的各种链接和提示。

4

8 回答 8

9

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

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

于 2008-09-30T14:25:43.190 回答
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 等一起使用。而且生成起来非常简单。

于 2008-10-01T08:30:15.687 回答
1

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

如果 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
于 2008-09-30T21:32:15.940 回答
1

我在SpreadsheetGear for .NET中完成了大部分 Open XML (xlsx) 工作,这绝非简单的练习。我建议使用 Office Open XML SDK 或其他 3rd 方库,如 SpreadsheetGear 或我们的竞争对手之一(只需谷歌“SpreadsheetGear”即可查看我们的竞争对手是谁)。

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

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

您可以在此处下载免费的全功能评估。

于 2009-01-28T07:26:52.370 回答
0

我曾经使用函数库为表格和段落创建正确的 XML来生成文字处理标记文档。

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

尽管有MS Open XML SDK,但似乎没有相同的 2003 SDK for Excel

于 2008-09-30T14:27:11.733 回答
0

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

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

于 2008-09-30T14:27:40.000 回答
0

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

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

以下是一些资源:

于 2008-09-30T14:29:18.000 回答
0

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

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

把它放在一个文本文件中,在最后附加一个“.vbs”然后转瞬即逝。

于 2008-09-30T21:00:06.330 回答