asp excel error 80040154
У меня проблема с моим проектом asp (C #).
У меня возникла следующая ошибка: получение фабрики COM-класса для компонента с CLSID {00024500-0000-0000-C000-000000000046} не удалось из-за следующей ошибки: 80040154, когда я пытаюсь создать файл excel с сервера. Я уже видел некоторые сообщения об этом, и я не знаю, применимы ли они ко мне, и я не мог решить проблему с ними. Позвольте мне показать вам мой код и объяснить.
using Excel = Microsoft.Office.Interop.Excel; using System.Reflection; private Excel.Application oXL; private Excel._Workbook oWB; private ExcelFile f; protected void bExcel_Click(object sender, EventArgs e) { if (Session["mode"] == null) Response.Redirect(accueil); // Set the values oXL = new Excel.Application(); oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value)); f = new ExcelFile((Excel._Worksheet)oWB.ActiveSheet); oXL.Visible = true; /* displaying data from a gridview, non revelant here (?) */ oXL.Visible = true; f = null; oXL = null; oWB = null; }
И объяснение ошибки (строка 225):
- Ссылки на COM-объекты Excel 2010 не выпущены
- Трудности с установщиком Windows для развертывания надстройки COM
- есть ли API COM для Excel Viewer (XLView)?
- Excel COM Interop, процесс не завершается, если я редактирую ячейки
- Добавление текстового поля Excel с помощью win32com
Erreur source: Ligne 224 : // Set the values Ligne 225 : oXL = new Excel.Application(); Ligne 226 : oWB = (Excel._Workbook) oXL.Workbooks.Add(Missing.Value)); Ligne 227 : f = new ExcelFile((Excel._Worksheet)oWB.ActiveSheet);
Хорошо, поэтому у меня возникает эта проблема, когда я пытаюсь создать файл excel с сервера, но не тогда, когда я запускаю режим debbugging с локальной версией (код работает). На всех рабочих станциях моей компании установлен MS Office Excel на компьютере, но не на сервере, который я использую, и мой вопрос в том, есть ли решение, не устанавливая Excell на сервере?
Я стараюсь избегать установки Excel на сервере, потому что сервер не из моей службы, поэтому я бы хотел его избежать (но если это единственное (и лучшее / безопасное) решение, я сделаю это), если смогу. Я попытался скопировать библиотеки в папку сборки на сервере (так как все рабочие станции одинаковые, ссылки shoud работают?), Но я не смог найти разрешения, которые я должен был предоставить, чтобы разрешить доступ к библиотекам с сервера (надеюсь Я не слишком объясняю это).
Заранее спасибо,
EDIT: Есть вещи, которые я не понимаю, это то, что в предыдущем коде, который уже был написан, приложение Excel можно запустить следующим образом:
Response.Clear(); Response.Buffer = true; Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", "attachment;filename=registrationData.xls"); // Pour les caractères spéciaux (é, à, etc...) Response.ContentEncoding = System.Text.Encoding.Unicode; Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble()); using (StringWriter sw = new StringWriter()) using (HtmlTextWriter htw = new HtmlTextWriter(sw)) { Table table = new Table(); TableRow tRow = new TableRow(); /* Adding each information of the grid using tRow.Cells.Add() */ table.RenderControl(htw); // Response needs the Htmlwriter HttpContext.Current.Response.Write(sw.ToString()); HttpContext.Current.Response.End(); }
И это работает, без установки Excel, потому что (я не уверен, хотя) он только вызвал приложение Excel, заполнил его буфером (StringWriter). Но я не хочу использовать таблицу, потому что таблица скучна для использования, и я уже сделал файл с помощью Interop … Если бы я мог найти разрешения на использование сборок, установленных на сервере, зная, что все рабочие станции есть Excel, я должен использовать его так, как этот код использует?
- C # Excel VBA делает имена модулей не зависящими от языка
- Библиотека объектов Excel - приложение, скомпилированное с использованием 16.0, и попробуйте запустить с использованием 12.0 на другом компьютере
- Как я могу достоверно определить, открыт ли файл в Microsoft Excel?
- Как «заблокировать» excel при взаимодействии через COM
- Excel Interop - установка имени файла перед сохранением
- как запускать и контролировать экземпляр excel из java
- com excel addin: как удалить старую версию при установке более новой версии после смены имени продукта
- Отключить всплывающее сообщение в php
Interop не поддерживается в MS-сценариях с несколькими сценариями .
Существует множество возможностей для чтения / редактирования / создания файлов Excel без Interop / установки Excel на сервере:
MS предоставляет бесплатный OpenXML SDK V 2.0 – см. http://msdn.microsoft.com/en-us/library/bb448854%28office.14%29.aspx (только для XLSX)
Это может читать + писать файлы MS Office (включая Excel).
Еще один бесплатный вариант см. http://www.codeproject.com/KB/office/OpenXML.aspx (только для XLSX)
Если вам нужно больше походить на обработку старых версий Excel (например, XLS, а не только XLSX), рендеринг, создание PDF-файлов, формул и т. Д., Тогда есть разные бесплатные и коммерческие библиотеки, такие как ClosedXML (только для XLSX), EPPlus (только для XLSX) , Aspose.Cells , SpreadsheetGear , LibXL и Flexcel и т. Д.
Поскольку моя стажировка заканчивается на этой неделе (да, немного поздно, чтобы найти что-то подобное), я не могу работать над чем-то новым сейчас, уже слишком поздно, поэтому я просто вернусь к изменениям и использую предыдущий процесс создания файлов Excel (что Я улучшился, хотя).
Я полагаю, способ исправить эту проблему может дать разрешения на использование сборок Interop с сервера, чтобы затем вызвать программу Excel пользователей, но я не мог установить разрешение (он не работал, не знаю почему). Сейчас уже поздно, я просто сделаю некоторое обслуживание и обеспечу непрерывность проекта.
Спасибо за ответы, ребята.