visual studio office microsoft library example descargar c# excel dll interop

c# - studio - ¿Cómo se usa Microsoft.Office.Interop.Excel en una máquina sin MS Office instalado?



microsoft.office.interop.excel visual studio 2017 (4)

Estoy escribiendo una aplicación que funciona con archivos de Excel. Necesito una característica para eliminar una hoja. Tengo que usar un ensamblado Microsoft.Office.Interop.Excel.dll.

Funciona bien en la máquina del desarrollador, pero cuando trato de implementarlo en el servidor me aparece un error:

No se pudo cargar el archivo o ensamblado ''office, Version = 14.0.0.0, Culture = neutral, PublicKeyToken = 71e9bce111e9429c'' o una de sus dependencias

Entiendo que el problema ocurre cuando MS Office no está instalado en una máquina. El cliente no desea instalar y comprar MS Office en un servidor a ningún precio.

Instalo "Asambleas de interoperabilidad primarias redistribuibles" en la máquina del desarrollador como se indica aquí: http://forums.asp.net/t/1530230.aspx/1 y vuelvo a compilar mi proyecto.

Muestra de código:

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

Una excepción

No se pudo recuperar la fábrica de clase COM para el componente con CLSID {00024500-0000-000000-C000-000000000046} debido al siguiente error: 80040154 Clase no registrada (excepción de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

ocurre en la línea

app = new Excel.Application();

¿Alguien puede aconsejar sobre cómo hacer que esta característica funcione con éxito?


Busque GSpread.NET. Puede trabajar con Google Spreadsheets utilizando la API de Microsoft Excel. No necesita volver a escribir el código anterior con el nuevo uso de la API de Google. Solo agrega algunas filas:

Set objExcel = CreateObject("GSpreadCOM.Application"); app.MailLogon(Name, ClientIdAndSecret, ScriptId);

Es un proyecto OpenSource y no requiere Office para ser instalado.

La documentación disponible aquí http://scand.com/products/gspread/index.html



Si el "Cliente no quiere instalar y comprar MS Office en un servidor no tiene precio", entonces no puede usar Excel ... Pero no puedo entender el truco: se trata de una licencia básica de Office que cuesta algo así como 150 USD ... ¡Y creo que pasar el tiempo buscando una alternativa costará mucho más que esta cantidad!


puede crear un servicio y generar Excel en el servidor y luego permitir que los clientes descarguen Excel. Al comprar una licencia excel para 1000 personas, es mejor tener una licencia para el servidor.

Espero que ayude.