25

私のC#アプリでは、Excel Interop dll(参照として)の助けを借りて、Excelファイルを読み書きしています。このプログラムを office/excel がインストールされていないシステム (クリーン マシンと考えてください) に移動すると、以下のエラーが発生します。

System.Runtime.InteropServices.COMException (0x80040154): CLSID {00024500-0000-0000-C000-000000000046} を持つコンポーネントの COM クラス ファクトリを取得できませんでした: 80040154 クラスが登録されていません (HRESULT からの例外: 0x80040154 (REGDB_ECLASS_REGNOTREGNOT) )))。

ターゲット マシンに Excel がないため、上記のエラーが予想されます。
私の質問は、Interop dll をターゲット マシンに登録する以外に、私のプログラムを使用する他の方法はありますか?

4

4 に答える 4

25

私の質問は、Interop dll をターゲット マシンに登録する以外に、私のプログラムを使用する他の方法はありますか?

プログラムを実行しているコンピューターに Excel がインストールされていない場合に、Excel 相互運用機能を使用するプログラムを使用する方法があるかどうかを尋ねています。短い答えはノーです。相互運用性を使用しないようにプログラムをリファクタリングする意思がある場合、より長い答えは「はい」です。

対象の Excel のバージョンが 2007 以降の場合、Microsoft が提供するOOXml SDKを使用できます。多少の費用がかかる場合は、 Asposeなどのサードパーティ ライブラリを使用することもできます。

OOXml SDK を使用してスプレッドシートを Excel ファイルに挿入する例は、microsoft docsにあります。

// Given a document name, inserts a new worksheet.
public static void InsertWorksheet(string docName)
{
    // Open the document for editing.
    using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docName, true))
    {
        // Add a blank WorksheetPart.
        WorksheetPart newWorksheetPart = spreadSheet.WorkbookPart.AddNewPart<WorksheetPart>();
        newWorksheetPart.Worksheet = new Worksheet(new SheetData());

        Sheets sheets = spreadSheet.WorkbookPart.Workbook.GetFirstChild<Sheets>();
        string relationshipId = spreadSheet.WorkbookPart.GetIdOfPart(newWorksheetPart);

        // Get a unique ID for the new worksheet.
        uint sheetId = 1;
        if (sheets.Elements<Sheet>().Count() > 0)
        {
            sheetId = sheets.Elements<Sheet>().Select(s => s.SheetId.Value).Max() + 1;
        }

        // Give the new worksheet a name.
        string sheetName = "Sheet" + sheetId;

        // Append the new worksheet and associate it with the workbook.
        Sheet sheet = new Sheet() { Id = relationshipId, SheetId = sheetId, Name = sheetName };
        sheets.Append(sheet);
    }
}
于 2012-09-11T19:03:39.077 に答える
16

Microsoftでさえ、サーバー上の Interop ライブラリでの使用は推奨していません。そのため、Excel を実行するための代替フレームワークを見つけることをお勧めします。私は過去にその目的のためにNpoiを使用して成功しました。

これがあなたの例外に対する答えではないことは知っています。しかし正直なところ、Interop は無限のトラブルと不可解な例外メッセージへの道です。

更新 2017 : 私はしばらくの間 NPOI を使用しておらず、すべてのプロジェクトをEPPlus insted に移動しました。これは、最新の xlsx ファイルを作成する OpenXML ベースのライブラリです。

于 2012-09-11T18:52:56.330 に答える
0

少し前にサーバー上の Excel ファイルを操作する必要があったときに行ったすべての調査から、Office をインストールする必要があることがわかりました。

于 2012-09-11T18:45:31.170 に答える
0

COMをRegSrv32に登録できます

リンク: http://msdn.microsoft.com/en-us/library/ms859484.aspx

使用する前にCOMを登録する必要があります

于 2012-09-11T18:44:59.860 に答える