Вопрос по interop, excel, dll, c# – Как использовать Microsoft.Office.Interop.Excel на компьютере без установленного MS Office?

64

Я пишу приложение, которое работает с файлами Excel. Мне нужна функция, чтобы удалить лист. Я должен использовать сборку Microsoft.Office.Interop.Excel.dll.

Он работает нормально на компьютере разработчика, но когда я пытаюсь развернуть его на сервере, я получаю сообщение об ошибке:

Could not load file or assembly 'office, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' or one of its dependencies

Я понимаю, что проблема возникает, когда MS Office не установлен на машине. Заказчик не хочет устанавливать и покупать MS Office на сервере по любой цене.

Я устанавливаю & quot; распространяемые первичные сборки взаимодействия & quot; на машине разработчика, как советовали здесь:http://forums.asp.net/t/1530230.aspx/1 и снова скомпилировать мой проект.

Пример кода:

public bool DeleteSheet(string tableName)
{
    Excel.Application app = null;
    Excel.Workbooks wbks = null;
    Excel._Workbook _wbk = null;
    Excel.Sheets shs = null;

    bool found = false;

    try
    {
        app = new Excel.Application();
        app.Visible = false;
        app.DisplayAlerts = false;
        app.AlertBeforeOverwriting = false;

        wbks = app.Workbooks;
        _wbk = wbks.Add(xlsfile);
        shs = _wbk.Sheets;
        int nSheets = shs.Count;

        for (int i = 1; i <= nSheets; i++)
        {
            Excel._Worksheet _iSheet = (Excel._Worksheet)shs.get_Item(i);
            if (_iSheet.Name == tableName)
            {
                _iSheet.Delete();
                found = true;

                Marshal.ReleaseComObject(_iSheet);
                break;
            }
            Marshal.ReleaseComObject(_iSheet);
        }

        if (!found)
            throw new Exception(string.Format("Table \"{0}\" was't found", tableName));

        _wbk.SaveAs(connect, _wbk.FileFormat, Missing.Value, Missing.Value, Missing.Value,
        Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
        Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
    }
    finally
    {
        _wbk.Close(null, null, null);
        wbks.Close();
        app.Quit();

        Marshal.ReleaseComObject(shs);
        Marshal.ReleaseComObject(_wbk);
        Marshal.ReleaseComObject(wbks);
        Marshal.ReleaseComObject(app);
    }
    return true;
}

Исключение

Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

происходит на линии

app = new Excel.Application();

Кто-нибудь может посоветовать, как заставить эту функцию работать успешно?

Ну, я вижу, что это более старая статья - возможно, слишком поздно - но мне приходилось делать это в прошлом, и я использовал форматы Open XML:support.office.com/en-us/article/… Jon Vote

Ваш Ответ

4   ответа
2

Вы можете создать службу и создать Excel на сервере, а затем разрешить клиентам загружать Excel. потому что покупая лицензию Excel на 1000 человек, лучше иметь одну лицензию на сервер.

надеюсь, это поможет.

разработка офисной автоматизации в архитектуре клиент-сервер не рекомендуется.
0

Ищите GSpread.NET. Вы можете работать с таблицами Google, используя API из Microsoft Excel. Вам не нужно переписывать старый код с использованием нового API Google. Просто добавьте несколько строк:

Set objExcel = CreateObject("GSpreadCOM.Application");

app.MailLogon(Name, ClientIdAndSecret, ScriptId);

Это проект OpenSource, и он не требует установки Office.

Документация доступна здесьhttp://scand.com/products/gspread/index.html

Как я вижу по опубликованному вами коду, вы должны каким-либо образом войти в систему "Google Systems". Таким образом, альтернативой для установки Office License является регистрация в Google. Я знаю, что это бесплатно и что, но ... Мне не нравится идея сделать мой журнал приложений в Службах Google.
58

Вы не можете использовать Microsoft.Office.Interop.Excel, не установив MS Office.

Просто поищите в google некоторые библиотеки, которые позволяют изменять xls или xlsx:

http://code.google.com/p/excellibrary/ http://simpleooxml.codeplex.com/ (only xlsx)
Благодарю. Я попробую эти библиотеки. John Wales
У меня установлен офис, и я получаю ту же проблему. Можете ли вы помочь?
Как это бывает, вы не можете дажеBUILD проект, который содержит ссылки наMicrosoft.Office.Core без установки также Office. Другие ссылки сборки Interop уровня документа, кажется, компилируются, но не запускаются. Мой обходной путь был удалить явноеMicrosoft.Office.Core ссылки и заменить их наdynamic а такжеvar ключевые слова, которые допускают поздние ссылки ПОСЛЕ того, как intellisense выполнил свою работу на компьютере разработчика.
Да, сборки взаимодействия просто сообщают .NET, как вызывать библиотеки Excel COM. Они не имеют никакой функциональности. Еще один популярный для чтения / записи файлов .xlsx:closedxml.codeplex.com
2

Если «Заказчик не хочет устанавливать и покупать MS Office на сервере не по какой-либо цене», то вы не можете использовать Excel ... Но я не могу получить хитрость: это всего лишь одна базовая лицензия Office, которая стоит что-то вроде 150 долларов США ... И я предполагаю, что время, потраченное на поиск альтернативы, обойдется намного дороже, чем эта сумма!

Использование Excel на сервере - это практическое занятие. Первое: это ненужная уязвимость. Во-вторых, это ужасно медленно, написание и чтение документов занимает много времени - отлично, если у вас более одного пользователя ... В-третьих: Office не предназначен для полностью автоматизированного использования. Есть высококлассные разработчики, которые создают ящики сообщений и т. Д. Это "не так хорошо" на серверах ...
Как консультант, мне было бы очень неловко говорить клиенту, что ему придется установить MS Office на свои CI-серверы. Речь идет не столько о деньгах, сколько о хлопотах и факторе WTF. И это может быть не только один сервер, возможно, они имеют 5,10,20 виртуальных серверов CI. Тогда речь идет о больших деньгах и административных расходах, чем 150 долларов.
"Во-вторых, это ужасно медленно, написание и чтение документов занимает много времени" - Не в моем опыте. А также, что если клиенты хотят использовать Excel, MS Office в полном объеме или любое другое программное обеспечение через тонкий клиент? Это & APOS; LLhave пойти на сервер в этом сценарии.
Я согласен с @ JonasS & # xF6; derstr & m; речь идет не о единой лицензии Office.

Похожие вопросы