14

プログラムで Excel 2007 ドキュメントを作成しようとしています。今、私が見つけた2つの方法があります:

  • この投稿で概説されているように、XML を手動で作成する
  • ExcelPackageなどのサードパーティ ライブラリを使用します。

現在、私は ExcelPackage を使用していますが、これにはいくつかの非常に深刻な欠点と問題があります。過度に複雑な Excel シートを作成する必要がないため (最も「複雑な」ことは、セルの種類を明示的に数値またはテキストに設定する必要があることです)、次はオプション 1 を検討していますが、 Excel 2007 シートを生成するための他の適切でサポートされている方法はありますか? それらをハードドライブに保存する必要なく作成できる場合、つまり、それらを生成してストリームに直接出力できる場合は、ボーナス ポイントです。

ここでは.net 3.0がターゲットです。3.5の良さはありません:(

編集:これまでありがとう。XML SDK は確かに 3.5 のみですが、Russian Roulet... うーん... COM Interop も可能な限り避けたいものです。特に、Excel 2007 はやや複雑ですが、ドキュメント形式を作成するのはかなり簡単であるためです。投稿されたさまざまなリンクとヒントを見ていきます。

4

8 に答える 8

9

Office Open XML SDKを使用してみてください。MemoryStreamこれにより、すべての XML を手動で生成するよりもはるかに簡単に、たとえば a を使用してメモリ内に Excel ファイルを作成できます。

Brian Kim が指摘したように、SDK のバージョン 2.0 には .NET 3.5 が必要ですが、これは利用できませんでした。.NET 3.0 をサポートする SDK のバージョン 1も利用できます。完全ではありませんが、少なくとも文書の XML 部分とそれらの間の関係を管理するのに役立ちます。

于 2008-09-30T14:25:43.190 に答える
2

Excelで開くことができるHTMLテーブルを生成しています:

<!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

私はSpreadsheetGearfor.NETでほとんどのOpenXML(xlsx)作業を行いましたが、それは簡単なことではありません。Office Open XML SDK、またはSpreadsheetGearや競合他社の1つ(競合他社を確認するにはGoogleの「SpreadsheetGear」のみ)などのサードパーティライブラリを使用することをお勧めします。

SpreadsheetGear for .NETは、お客様のニーズを満たしているようです。

  • .NET 2.0、.NET 3.0、および.NET3.5で動作します。
  • IWorkbook.SaveToStreamを使用したスト​​リームへの書き込み、またはIWorkbook.SaveToMemoryを使用したバイト配列への書き込みをサポートします。
  • 非常に多くのユーザーをサポートする必要がある場合に次に求められる可能性が高いExcel97-2003(xls)ワークブックをサポートします。

ここから無料の完全に機能する評価をダウンロードできます。

于 2009-01-28T07:26:52.370 に答える
1

BKimmelさんの投稿にコメントしようと思ったのですが、どうやらまだSOクールポイントが足りないようです。

Excel が既に開いている場合、「personal.xls is already open」という迷惑なメッセージが表示されることがあります。まずはアプリを入手してみます。それが失敗した場合は、作成します。

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 に答える
0

生きているすべてのコードスノッブはvbscriptを嫌いますが、それは単純で機能します:

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

それをテキストファイルに入れ、最後に「.vbs」を追加してprestoします。

于 2008-09-30T21:00:06.330 に答える
0

以前は、関数のライブラリを使用してワープロ マークアップドキュメントを生成し、表と段落の正しい XML を作成していました。

次に、応答ヘッダーの 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

Primary Interop Assemblies (Office API) を使用して、Excel ドキュメントをプログラムで生成できます。これらを使用して過度に複雑なことはしたくありませんが、それが要件であるようには思えません。

このアプローチは、メモリ内にドキュメントを生成する場合にも機能するはずです。

以下にいくつかのリソースを示します。

于 2008-09-30T14:29:18.000 に答える