質問

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

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

ここでは .net 3.0 がターゲットですが、3.5 は問題ありません :(

編集: これまでありがとう。XML SDK は確かに 3.5 のみですが、ロシアン ルーレット...えーっと...COM 相互運用機能も、特に Excel 2007 はやや複雑ではあるものの、ドキュメントの作成が比較的簡単な形式であるため、できる限り避けたいものです。掲載されているさまざまなリンクやヒントを見ていきます。

役に立ちましたか?

解決

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

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

他のヒント

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などで機能します。また、生成するのは非常に簡単です。

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 用スプレッドシートギア それは決して簡単な作業ではありません。Office Open XML SDK、または SpreadsheetGear や競合他社のような別のサードパーティ ライブラリを使用することをお勧めします (競合他社を確認するには、「SpreadsheetGear」を Google で検索してください)。

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 を作成するための関数のライブラリを使用してドキュメントを作成します。

次に、Response ヘッダーの MIME タイプを Word ドキュメントに変更し、XML を応答としてクライアントに送信しました。ブラウザで開くか、ファイルとして保存します。

Excel 用の同じ 2003 SDK はないようですが、 MS オープン XML SDK

すべてのcode-snob aliveはvbscriptを嫌いますが、それは簡単で動作します:

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

テキストファイルに「.vbs」を追加します。最後に、プレスト。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top