web-dev-qa-db-ja.com

Excelがインストールされていない場合にExcelのインスタンスを作成する方法

私のC#アプリでは、Excel Interop dllを使用して(参照として)Excelファイルの読み取り/書き込みを行っています。このプログラムをoffice/Excelがインストールされていないシステムに移動すると(クリーンマシンの場合)、以下のエラーが発生します。

System.Runtime.InteropServices.COMException(0x80040154):CLSID {00024500-0000-0000-C000-000000000046}のコンポーネントのCOMクラスファクトリの取得は、次のエラーのために失敗しました:80040154クラスが登録されていません(HRESULTからの例外:0x80040154(REGDB_E_CLASSNOTREG ))。

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

19
Mahender

私の質問は、ターゲットマシンに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);
    }
}
18
Seth Flowers

でも Microsoftはサーバー上のInteropライブラリでの使用を推奨していません 。 Excelを実行するための代替フレームワークを見つけるのが最善です。その目的で、過去に Npoi を使用しました。

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

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

15
trailmax

RegSrv32でCOMを登録できます

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

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

0
Aghilas Yakoub

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

0
Gromer