none
exportar a excel RRS feed

  • Pregunta


  • Ya estuve dando muchas vueltas y visitado infinidad de paginas en internet y cada vez me confundo mas, le platico ya tengo parte de mi pagina en cuanto al funcionamiento pero inserte parte de un codigo para exportar a excel utilizando una hoja xsl, pero marca un error , que me dice, error de compilacion en XSLT, pongo el codigo

        protected void btnexporta_Click(object sender, EventArgs e)
        {
            //ejemplo para exportar a Excel desde un dataview
            //Conectar con el origen de datos. OleDbConnection objConn = new OleDbConnection (strConn); objConn.Open();           

            //Rellenar un conjunto de datos con registros de la tabla
            sql = "SELECT idnegocio,nombreprop,dirprop,colprop,cpprop,telprop,rfc,denominacion," +
                      "giro,actividad,CASE WHEN rojo = '0' THEN 'NO' ELSE 'SI' END AS rojo,observ,direccion,coloneg,delegacion,cpneg,telefono," +
                      "entrecalle1,entrecalle2,apertura,refrendo,refmens," +
                      "CASE WHEN pf = '0' THEN 'NO' ELSE 'SI' END AS pf ," +
                      "CASE WHEN pc = '0' THEN 'NO' ELSE 'SI' END AS pc,camara,fechasol," +
                      "CASE WHEN vunica = '0' THEN 'NO' ELSE 'SI' END AS vunica,folio,fechaauto,fechapag,norecibo,cantidad,descuento,importe,pago," +
                      "pagos,resta,factor " +
                      "FROM lic.comercio " +
                      "WHERE idnegocio = '0001010004'";
            conn.Open();

            da = new Npgsql.NpgsqlDataAdapter(sql, conn);
            DataSet ds = new DataSet();
            da.Fill(ds, "lic.comercio");


            //Crear el FileStream con el que escribir.
            System.IO.FileStream fs = new System.IO.FileStream( "C:\\ejemplo.htm", System.IO.FileMode.Create);

            ////Crear XmlTextWriter para FileStream.
            System.Xml.XmlTextWriter xtw = new System.Xml.XmlTextWriter( fs, System.Text.Encoding.Unicode);

            ////Transformar el código XML utilizando la hoja de estilos.
            XmlDataDocument xmlDoc = new XmlDataDocument(ds);
            System.Xml.Xsl.XslCompiledTransform xslTran = new System.Xml.Xsl.XslCompiledTransform();
            xslTran.Load("c:\\ejemplo.xsl"); <-------------- aqui en donde me marca el error
            xslTran.Transform(xmlDoc, null, xtw);

            ////Abrir el archivo HTML en Excel. Excel.Application
            Excel.Application  oExcel;
            oExcel = new Excel.Application();
            oExcel.Visible=true;
            oExcel.UserControl=true;
            Excel.Workbooks oBooks = oExcel.Workbooks;
            object oOpt = System.Reflection.Missing.Value;

        }

    por mas que le busco donde compilar, no le encuentro, pongo el codigo de ejemplo.xsl

    <?xml version="1.0" encoding="iso-8859-1"?>

    <xslTongue Tiedtylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">

    <html>
    <head><title>Vínculos</title></head>
    <body>
    <table border="2" bordercolor="blue" cellspacing="5" cellpadding="5">
    <tr>
    <xsl:apply-templates select="favoritos" />
    </tr>
    </table>

    </body>
    </html>

    Gracias.
    Nos leemos
    jueves, 12 de junio de 2008 22:07

Respuestas

  • puedes probar con la libreria fileHelpers http://www.filehelpers.com/ 

     

    también puedes probar la siguiente función (es para asp.net pero supongo que puedes adaptarla...)

     

     Public Sub ExportToExcel(ByVal dataTable As DataTable)

     

            ' We can't do anything if there's no data...

            If (DataTable Is Nothing) Or (DataTable.Rows.Count <= 0) Then

                Return

            End If

     

            '// Set up the Response object...

     

            HttpContext.Current.Response.BufferOutput = False

            HttpContext.Current.Response.Charset = String.Empty

            HttpContext.Current.Response.Clear()

            HttpContext.Current.Response.ClearContent()

            HttpContext.Current.Response.ClearHeaders()

     

            HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"

     

            ' Open the document OVER this window:

            Dim contentDisposition As String = "inline; filename=ExcelFile.xls"

            HttpContext.Current.Response.AppendHeader("content-disposition", contentDisposition)

     

            ' Create a table HTML tag...

            Dim textOutput As String = "<table border='1' bordercolor='black' rules='all' " + "style='BORDER: 1px double; BORDER-COLLAPSE: collapse;'>\r\n"

            HttpContext.Current.Response.Write(textOutput)

     

            '///////////////////////////////////////////////////////////////////////////

            '// Write out the column headers...

            '///////////////////////////////////////////////////////////////////////////

            textOutput = "<tr height=17 style='height:12.75pt'>\r\n"

     

            Dim i As Integer = 0

            Dim j As Integer = 0

     

            For i = 0 To DataTable.Columns.Count - 1

                textOutput += String.Format(System.Globalization.CultureInfo.InvariantCulture, "<th align='left'>{0}</th>", DataTable.Columns(i).ColumnName)

            Next

     

            textOutput += "</tr>\r\n"

            HttpContext.Current.Response.Write(textOutput)

     

            '///////////////////////////////////////////////////////////////////////////

            '// Write out each row of the DataTable...

            '///////////////////////////////////////////////////////////////////////////

            textOutput = String.Empty

            For i = 0 To DataTable.Columns.Count - 1

                Dim dataRow As System.Data.DataRow = DataTable.Rows(i)

                textOutput = "<tr height=17 style='height:12.75pt'>\r\n"

     

                '// Loop through the columns for each row and grab the values...

                For j = 0 To DataRow.Table.Columns.Count - 1

     

                    Dim dataRowText As String = DataRow(j).ToString().Trim()

     

                    '// Remove any tabs, carriage returns, or newlines from the value...

                    dataRowText = dataRowText.Replace("\t", " ")

                    dataRowText = dataRowText.Replace("\r", String.Empty)

                    dataRowText = dataRowText.Replace("\n", " ")

     

                    textOutput += String.Format(System.Globalization.CultureInfo.InvariantCulture, "<td align='left' style='mso-number-format:\\@;'>{0}</td>", dataRowText)

                Next

     

                textOutput += "</tr>\r\n"

                HttpContext.Current.Response.Write(textOutput)

            Next

     

     

            '// Close the HTML table tag...  

            textOutput = "</table>\r\n"

            HttpContext.Current.Response.Write(textOutput)

     

            '// Close the Response stream...

            HttpContext.Current.Response.Flush()

            HttpContext.Current.Response.Close()

            HttpContext.Current.Response.End()

        End Sub

    martes, 7 de septiembre de 2010 11:34