private string ExportarExcel(string sProyectos, string sAnomes)
    {
        string        sResul = "";
        StringBuilder sb     = new StringBuilder();

        try
        {
            SqlDataReader dr = PROYECTOSUBNODO.ObtenerInformeUSAExcel(sProyectos, int.Parse(sAnomes));
            sb.Append("<TABLE style='font-family:Arial;font-size:8pt;' cellSpacing='2' border=1>");
            sb.Append("<tr align='center'>");
            sb.Append("        <td style='width:auto; background-color: #BCD4DF; font-weight:bold;'>Nº proyecto</td>");
            sb.Append("        <td style='width:auto; background-color: #BCD4DF; font-weight:bold;'>Denominación de proyecto</td>");
            sb.Append("        <td style='width:auto; background-color: #BCD4DF; font-weight:bold;'>" + Estructura.getDefLarga(Estructura.sTipoElem.NODO) + "</td>");
            sb.Append("        <td style='width:auto; background-color: #BCD4DF; font-weight:bold;'>Responsable de proyecto</TD>");
            sb.Append("        <td style='width:auto; background-color: #BCD4DF; font-weight:bold;'>Cliente</TD>");
            sb.Append("        <td style='width:auto; background-color: #BCD4DF; font-weight:bold;'>Tipo de facturación</TD>");
            sb.Append("        <td style='width:auto; background-color: #BCD4DF; font-weight:bold;'>Mes</TD>");
            sb.Append("        <td style='width:auto; background-color: #BCD4DF; font-weight:bold;'>Consumos</TD>");
            sb.Append("        <td style='width:auto; background-color: #BCD4DF; font-weight:bold;'>Producción</TD>");
            sb.Append("        <td style='width:auto; background-color: #BCD4DF; font-weight:bold;'>Facturación</TD>");
            sb.Append("        <td style='width:auto; background-color: #BCD4DF; font-weight:bold;'>Otros</TD>");
            sb.Append("        <td style='width:auto; background-color: #BCD4DF; font-weight:bold;'>Partida</TD>");
            sb.Append("        <td style='width:auto; background-color: #BCD4DF; font-weight:bold;'>Comunicado</TD>");
            sb.Append("        <td style='width:auto; background-color: #BCD4DF; font-weight:bold;'>USA / Responsable comunicado</TD>");
            sb.Append("        <td style='width:auto; background-color: #BCD4DF; font-weight:bold;'>Nº documentos</TD>");
            sb.Append("</TR>");

            while (dr.Read())
            {
                sb.Append("<tr style='vertical-align:top;' >");
                if (dr["tipo"].ToString() == "A")
                {
                    sb.Append("<td>" + int.Parse(dr["t301_idproyecto"].ToString()).ToString("#,###") + "</td>");
                }
                else
                {
                    sb.Append("<td></td>");
                }
                sb.Append("<td>" + dr["t301_denominacion"].ToString() + "</td>");
                sb.Append("<td>" + dr["t303_denominacion"].ToString() + "</td>");
                sb.Append("<td>" + dr["ResponsableProyecto"].ToString() + "</td>");
                sb.Append("<td>" + dr["t302_denominacion"].ToString() + "</td>");
                sb.Append("<td>" + dr["TipoFacturacion"].ToString() + "</td>");
                sb.Append("<td>&nbsp;" + dr["Mes"].ToString() + "</td>");
                sb.Append("<td>" + dr["t641_consumos"].ToString() + "</td>");
                sb.Append("<td>" + dr["t641_produccion"].ToString() + "</td>");
                sb.Append("<td>" + dr["t641_facturacion"].ToString() + "</td>");
                sb.Append("<td>" + dr["t641_otros"].ToString() + "</td>");

                sb.Append("<td>" + dr["partidas_comunicado"].ToString() + "</td>");
                sb.Append("<td>" + dr["desc_comunicado"].ToString() + "</td>");

                if (dr["tipo"].ToString() == "A")
                {
                    sb.Append("<td>USA: " + dr["SAT"].ToString());
                    if (dr["SAA"].ToString() != "")
                    {
                        sb.Append(" / " + dr["SAA"].ToString());
                    }
                    sb.Append("</td>");
                }
                else
                {
                    sb.Append("<td>RC: " + dr["usu_comunicado"].ToString() + "</td>");
                }

                sb.Append("<td>" + dr["num_doc"].ToString() + "</td>");
                sb.Append("</tr>");
            }
            dr.Close();
            dr.Dispose();
            sb.Append("</table>");

            string sIdCache = "EXCEL_CACHE_" + Session["IDFICEPI_ENTRADA"].ToString() + "_" + DateTime.Now.ToString();
            Session[sIdCache] = sb.ToString();;

            return("OK@#@cacheado@#@" + sIdCache + "@#@" + sb.ToString());
        }
        catch (Exception ex)
        {
            sResul = "Error@#@" + Errores.mostrarError("Error al obtener los datos mensuales de la agenda", ex);
        }

        return(sResul);
    }