Как создать экземпляр Excel, если Excel не установлен

в моем приложении C# с помощью библиотеки dll Excel Interop (как ссылка) я читаю/пишу файлы excel. Если я перемещаю эту программу в систему, где office / excel не установлен (подумайте о чистой машине), я ударяю с ошибкой ниже.

4 ответов


мой вопрос в том, есть ли другой способ использовать мою программу, кроме Регистрация dll взаимодействия на целевой машине?

вы спрашиваете, есть ли способ использовать вашу программу, которая использует Excel interop, когда Excel не установлен на компьютере, на котором запущена программа. Короткий ответ-нет. Длинный ответ: да, если вы готовы рефакторинг программы, чтобы не использовать взаимодействия.

можно использовать OOXml SDK предусмотрено Microsoft, если версия Excel, на которую вы ориентируетесь, 2007 и выше. Вы также можете использовать стороннюю библиотеку, такую как Aspose если вы готовы потратить немного денег.

пример использования пакета SDK OOXml для вставки электронной таблицы в файл excel можно найти в Майкрософт документы.

// 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);
    }
}

даже Microsoft не рекомендует использовать библиотеки взаимодействия на сервере. Поэтому лучше всего найти альтернативную структуру, чтобы сделать Excel для вас. Я успешно использовал Npoi в прошлом для этой цели.

Я знаю, что это не ответ на ваше исключение. Но, честно говоря, Interop-это путь к бесконечным неприятностям и загадочным сообщениям об исключениях.

обновление 2017: Я не использовал NPOI некоторое время и переместил все свои проекты к EPPlus insted-библиотека на основе OpenXML, которая создает современные файлы xlsx.


вы можете зарегистрировать свой COM с RegSrv32

ссылка:http://msdn.microsoft.com/en-us/library/ms859484.aspx

вы обязаны зарегистрировать свой COM перед использованием


из всех исследований, которые я сделал некоторое время назад, когда мне нужно было взаимодействовать с файлом Excel на сервере, вы должны установить Office.