PROBLEMAS AL EXPORTAR A EXCEL USANDO AUTOMATIZACION

11/11/2006 - 01:40 por Silverio Bernal | Informe spam
Hola estoy utilizando automatizacion para exportar a un archivo en excel por
medio de oledb. en desarrollo todo funciona muy bien pero cuando lo paso a
productivo me arroja un error de COM. adjunto pongo el codigo que estoy
utilizando y seguido el error. si alguien me puede ayudar a ver que me falta
se lo agradeceré.

el codigo:

protected void expExcel_Click(object sender, EventArgs e)
{

//File.Delete("C:\\Documents and
Settings\\sbernal\\EscritorioContratosLaborFechaFin.xls");

ADODB.Connection cn = new ADODB.Connection();
ADODB.Recordset rs = new ADODB.Recordset();
string cnStr;
string query;

//Connection string.
cnStr = "Provider=SQLOLEDB;Initial Catalog=***;Data
Source=serverSQL;User ID=***;Password=***";
query = "exec consultaYin '" + firstinput.Text + "', '" +
secondinput.Text + "'";
cn.ConnectionString = cnStr;
cn.Open(null, null, null, 0);
rs.Open(query, cnStr, ADODB.CursorTypeEnum.adOpenKeyset,
ADODB.LockTypeEnum.adLockOptimistic, -1);

Excel.Workbooks m_objBooks;
Excel.Workbook m_objBook;
object m_objOpt;
Excel.Sheets m_objSheets;
Excel.Worksheet m_objSheet;
Excel.Range m_objRange;
m_objOpt = System.Reflection.Missing.Value;

Excel.Application m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBook = (Excel.Workbook)(m_objBooks.Add(m_objOpt));

m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
m_objSheet = (Excel.Worksheet)(m_objSheets.get_Item(1));

object[] objHeaders = { "No. Requerimiento", "Nombre", "No.
Documento", "Sociedad - Sucusal", "Operación", "Fecha Ingreso", "Fecha
Retiro", "Tipo de contrato", "Fecha de cierre" };
m_objRange = m_objSheet.get_Range("A1", "I1");
m_objRange.Value2 = objHeaders;

DataSet reporte = yin.consultaYin(firstinput.Text, secondinput.Text);
m_objRange = m_objSheet.get_Range("A2", m_objOpt);
m_objRange = m_objRange.get_Resize(retorno.Rows.Count, 9);
m_objRange.CopyFromRecordset(rs, m_objOpt, m_objOpt);

String pepe;
pepe = Server.MapPath(DateTime.Today.Year.ToString() +
DateTime.Today.Month.ToString() + DateTime.Today.Day.ToString() +
DateTime.Now.Hour.ToString() + ".xls");

m_objBook.SaveAs(pepe, m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt,
Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();

rs.Close();
cn.Close();

Response.Redirect(DateTime.Today.Year.ToString() +
DateTime.Today.Month.ToString() + DateTime.Today.Day.ToString() +
DateTime.Now.Hour.ToString() + ".xls");

}


el error:

Description: An unhandled exception occurred during the execution of the
current web request. Please review the stack trace for more information about
the error and where it originated in the code.

Exception Details: System.Runtime.InteropServices.COMException: Retrieving
the COM class factory for component with CLSID
{00024500-0000-0000-C000-000000000046} failed due to the following error:
80040154.

segun el error que me arroja la pagina le excepcion ocurre en la linea:
Excel.Application m_objExcel = new Excel.Application();


si alguien me puede dar una luz sobre este tema le agradeceré enormemente.


Silverio Bernal
 

Leer las respuestas

#1 Alberto Poblacion
11/11/2006 - 11:45 | Informe spam
"Silverio Bernal" wrote in
message news:
Hola estoy utilizando automatizacion para exportar a un archivo en excel
por
medio de oledb. en desarrollo todo funciona muy bien pero cuando lo paso a
productivo me arroja un error de COM.
[...]
segun el error que me arroja la pagina le excepcion ocurre en la linea:
Excel.Application m_objExcel = new Excel.Application();



Voy a decir una tontería pero ¿Tienes instalado Excel en el servidor?
Obviamente no puedes hacer un "new Excel.Application();" sin tener Excel en
la máquina.
En caso afirmativo, recuerda que para usar la automatización sobre el
objeto Excel desde un aplicativo Web hay que manipular los permisos de DCOM,
ya que de forma predeterminada no los tiene. No me acuerdo exactamente de
qué es lo que hay que tocar, pero hay un artículo en la Knowledge Base de
Microsoft que lo explica.
Por cierto, si no lo has hecho ya, ten en cuenta que tendrás que hacer
login al menos una vez con el usuario que estés impersonando para lanzar
Excel y ejecutar a mano el Excel con ese usuario, ya que la primera vez que
se lanza abre una ventanita preguntando el nombre y las iniciales del
usuario, y si eso lo haces desde la aplicación web esa ventanita no se ve en
ningún sitio y no hay forma de darle al OK, con lo que se queda "colgado".

Este artículo:
http://support.microsoft.com/kb/257757/es/
te explica por qué no debes usar Excel en un servidor. Más abajo sugiere
una serie de alternativas. Y luego más abajo tiene una serie de enlaces a
los artículos que te indican cómo configurarlo si a pesar de todo insistes
en ello.

Preguntas similares