Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/01/2010, 10:41
Avatar de a n g e l u s
a n g e l u s
 
Fecha de Ingreso: enero-2006
Ubicación: Chile
Mensajes: 237
Antigüedad: 18 años, 4 meses
Puntos: 1
Exclamación Exportar a excel

Hola mi estimados amigos de foros del web.

se me ha presentado el siguiente problema y estoy buscando solución que me ha esquibado por varios días.

el problema es el siguiente:

tengo un textos que promedian 176529 caracteres (lo revise haciendo textoquequieroexportar.lenght). el problema es que al traspasar textos demasiado grandes a otra página mediante form o ajax llega vacio. Al parecer no soporta tanto una variable por parametro.

la idea:

La finalidad de exportar tanto texto es generar informes y exportarlos a excel, word o a pdf.

como:

en seudocodigo seria : selecciono una región de la página que esta entre <div id=texto> esto quiero exportar </div> y la capturo con document.getElementId('texto') , lo envio a una función para quitar objetos de formulario, img, scritps, etc, luego lo envio por ajax a una página en asp, exportaraexcel.asp, que recibe por parametro el texto y la encabezo con la funcion asp :
Response.ContentType= "application/vnd.ms-excel" Response.AddHeader "Content-Disposition", "inline; filename=elarchivo.xls;"

y se generar el excel que puedo descargar en mi pc.

lindo cierto, y lo bueno es que funciona pero con texto chicos.

Estimados, dejo mi inquietud para que me ayuden a generar una solución para manejar textos grandes o arreglar el código por que me falta algo, que sus experiencias viviadas ya han logrado solucionar.

dejo el código para que lo revisen y se pueda generar una lluvia de ideas.

codigo:


pagina con el texto

___________________
Código HTML:
Ver original
  1. <script language="JavaScript">
  2.  
  3. function printSpecial(){
  4.  
  5.     var html;
  6.  
  7.     if (document.getElementById != null){
  8.  
  9.         if (document.getElementsByTagName != null){
  10.             var headTags = document.getElementsByTagName("BODY");
  11.  
  12.             if (headTags.length > 0)
  13.                 html += headTags[0].innerHTML;
  14.         }
  15.  
  16.         var printReadyElem = document.getElementById("printReady");
  17.  
  18.  
  19.         if (printReadyElem != null){
  20.             html = printReadyElem.innerHTML;
  21.         }
  22.         else{
  23.             alert("NO SE ENCONTRO LA FUNCION");
  24.             return;
  25.         }
  26.  
  27.         html = limpiapalabras(html);
  28.  
  29. //      exportarExcel(html,1)
  30.  
  31. //      document.write (html);
  32.  
  33.  
  34.     }
  35.     else{
  36.         alert("Esta funcion no es soportada por su navegador");
  37.     }
  38. }
  39.  
  40.  
  41. function limpiapalabras(doc){
  42.  
  43. //--------QUITAR LAS IMAGENES
  44.     doc = doc.replace(/<IMG[^>]+>/g,'&nbsp;');
  45.  
  46. //--------QUITAR ELEMENTOS INPUT
  47.     doc = doc.replace(/<FORM[^>]+>/g,'&nbsp;');
  48.     doc = doc.replace(/<\/FORM>/g,'&nbsp;');   
  49.     doc = doc.replace(/<INPUT[^>]+>/g,'&nbsp;');
  50.     doc = doc.replace(/<TEXTAREA[^>]+>/g,'&nbsp;');
  51.     doc = doc.replace(/<\/TEXTAREA>/g,'&nbsp;');   
  52.  
  53. //--------QUITAR LINK
  54.     doc = doc.replace(/<A[^>]+>/g,'');
  55.     doc = doc.replace(/<\/A>/g,'');
  56.  
  57. //--------QUITAR SCRIPT
  58.     doc = doc.replace(/<script[^>]+\/script>/g,'');
  59.  
  60.     //Delete all SPAN tags
  61. //  doc = doc.replace(/<\/?SPAN[^>]*>/gi, '');
  62.    
  63.     //Delete Class attributes
  64.     doc = doc.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, '<$1$3');
  65.    
  66.     //Delete Style attributes
  67. //  doc = doc.replace(/<(\w[^>]*) style='([^']*)'([^>]*)/gi, '<$1$3');
  68.     //Delete Lang attributes
  69.     doc = doc.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, '<$1$3');
  70.    
  71.     //Delete XML elements and declarations
  72.     doc = doc.replace(/<\\?\?xml[^>]*>/gi, '');
  73.    
  74.     //Delete Tags with XML namespace declarations: <o:p></o:p>
  75.     doc = doc.replace(/<\/?\w+:[^>]*>/gi, '');
  76.    
  77. //  doc = doc.replace(/<FONT [^>]*><\/FONT>/gi,' ');
  78.  
  79.  
  80.     return doc;
  81.  
  82. }
  83.  
  84. </head>
  85.  
  86. <div id="printReady">
  87.  
  88. <form id="printMe" name="printMe">
  89.  
  90. <input type="button" name="printMe" onClick="printSpecial()" value="Print this Page">
  91.  
  92. </form>
  93. <&#37;
  94.     for i = 0 to 200'---> genera mucho texto a exportar
  95. %>
  96. <TABLE id=idTable cols=3 name=idTable>
  97. <TR>
  98. <TH>Titulo 1</TH>
  99. <TH>Titulo 2</TH>
  100. <TH>Titulo 3</TH>
  101. </TR>
  102. <TR><TD>Celda 1</TD><TD>Celda 5</TD><TD>Celda 5</TD></TR>
  103. <TR><TD><b>Celda 2</b></TD><TD>Celda 6</TD><TD>Celda 5</TD></TR>
  104. <TR><TD>Celda 3</TD><TD>Celda 7</TD><TD>Celda 5</TD></TR>
  105. <TR><TD>Celda 4</TD></TR>
  106. <%
  107.     next
  108. %>
  109.  
  110. </div>


EXCEL.JS
_________
Código Javascript:
Ver original
  1. var Conexion=false; // Variable que manipula la conexion.
  2. var url="generar_archivo.asp"; // Determina la pagina donde enviar
  3.  
  4. var url_ruta = ""
  5.  
  6. function objetoAjax(){
  7. var xmlhttp=false;
  8.     try {
  9.         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  10.     } catch (e) {
  11.                 try {
  12.                     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  13.                 } catch (E) {
  14.         xmlhttp = false;
  15.         }
  16.     }
  17.  
  18.     if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  19.         xmlhttp = new XMLHttpRequest();
  20.     }
  21. return xmlhttp;
  22. }
  23.  
  24.  
  25.  
  26. function exportarExcel(texto_html,id){
  27.  
  28. peticion = objetoAjax();
  29.  
  30. peticion.open("GET", url, true);
  31.  
  32. peticion.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1');
  33.  
  34. peticion.onreadystatechange = function () {
  35.     if (peticion.readyState == 1) {
  36.              document.getElementById(id).innerHTML="cargando...<img src='cargando.gif' alt='enviando' />"
  37.         }
  38.         if (peticion.readyState == 4) {
  39.             var urlMod = url +'?html='+ texto_html;
  40.                 urlMod = urlMod +'&tipo='+ id;
  41. //          alert(urlMod);
  42.             window.open(urlMod);
  43. //          window.open(urlMod,"ventana1","height=300,scrollbars=0,Location=1")
  44.  
  45.  
  46.         }
  47.     }
  48. peticion.send(texto_html);
  49. }


generar_archivo.asp
____________________


Código ASP:
Ver original
  1. <%
  2. tabla  = request("html")
  3. opcion = request("tipo")
  4.  
  5.  
  6.  
  7.         Response.buffer         = true
  8.         Response.ContentType    = "application/vnd.ms-excel"
  9.         Response.AddHeader        "Content-Disposition", "inline; filename=respaldo.xls;"
  10.  
  11. '   sub exportarexcel()
  12. '   end sub
  13.    
  14.     sub exportarword()
  15.         Response.buffer         = true
  16.         Response.ContentType    = "application/vnd.ms-word"
  17.         Response.AddHeader        "Content-Disposition", "inline; filename=respaldo.doc;"
  18.     end sub
  19. %>
  20.  
  21. <html>
  22. <head>
  23. <title>EXPORTAR</title>
  24.  
  25. </head>
  26.  
  27. <body>
  28.  
  29. <%
  30.     response.Write(tabla)
  31. '   response.Binarywrite(tabla)
  32.  
  33. %>
  34. </body>
  35. </html>


PD. SI, estos códigos son familiares, pero llama recursividad.
__________________
Atte,
A n g e l u s
Concepción - Chile
más vale respuestas bien pensadas, que 7000 post

Última edición por a n g e l u s; 01/02/2010 a las 10:10 Razón: AGREGO HIGHLIGHT