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

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

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

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

有帮助吗?

解决方案

您可以尝试使用 Office 开放 XML SDK. 。这将允许您使用以下命令在内存中创建 Excel 文件 MemoryStream 并且比手动生成所有 XML 容易得多。

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

其他提示

我只是生成 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 等一起使用。而且生成起来非常简单。

我本来打算对 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

我完成了大部分 Open XML (xlsx) 工作 用于 .NET 的 SpreadsheetGear 这绝非一项微不足道的工作。我建议使用 Office Open XML SDK 或其他第 3 方库,例如 SpreadsheetGear 或我们的竞争对手之一(只需 Google“SpreadsheetGear”即可查看我们的竞争对手是谁)。

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

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

您可以免费下载全功能评估版 这里.

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

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

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

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

以下是一些资源:

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

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

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

每个代码高手都讨厌 vbscript,但它很简单而且有效:

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

将其放入文本文件中,在末尾附加“.vbs”,然后就可以了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top