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
<script language="JavaScript"> function printSpecial(){ var html; if (document.getElementById != null){ if (document.getElementsByTagName != null){ var headTags = document.getElementsByTagName("BODY"); if (headTags.length > 0) html += headTags[0].innerHTML; } var printReadyElem = document.getElementById("printReady"); if (printReadyElem != null){ html = printReadyElem.innerHTML; } else{ alert("NO SE ENCONTRO LA FUNCION"); return; } html = limpiapalabras(html); // exportarExcel(html,1) // document.write (html); } else{ alert("Esta funcion no es soportada por su navegador"); } } function limpiapalabras(doc){ //--------QUITAR LAS IMAGENES doc = doc.replace(/<IMG[^>]+>/g,' '); //--------QUITAR ELEMENTOS INPUT doc = doc.replace(/<FORM[^>]+>/g,' '); doc = doc.replace(/<\/FORM>/g,' '); doc = doc.replace(/<INPUT[^>]+>/g,' '); doc = doc.replace(/<TEXTAREA[^>]+>/g,' '); doc = doc.replace(/<\/TEXTAREA>/g,' '); //--------QUITAR LINK doc = doc.replace(/<A[^>]+>/g,''); doc = doc.replace(/<\/A>/g,''); //--------QUITAR SCRIPT doc = doc.replace(/<script[^>]+\/script>/g,''); //Delete all SPAN tags // doc = doc.replace(/<\/?SPAN[^>]*>/gi, ''); //Delete Class attributes doc = doc.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, '<$1$3'); //Delete Style attributes // doc = doc.replace(/<(\w[^>]*) style='([^']*)'([^>]*)/gi, '<$1$3'); //Delete Lang attributes doc = doc.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, '<$1$3'); //Delete XML elements and declarations doc = doc.replace(/<\\?\?xml[^>]*>/gi, ''); //Delete Tags with XML namespace declarations: <o:p></o:p> doc = doc.replace(/<\/?\w+:[^>]*>/gi, ''); // doc = doc.replace(/<FONT [^>]*><\/FONT>/gi,' '); return doc; } </script> </head> <BODY> <div id="printReady"> <form id="printMe" name="printMe"> <input type="button" name="printMe" onClick="printSpecial()" value="Print this Page"> </form> <% for i = 0 to 200'---> genera mucho texto a exportar %> <TABLE id=idTable cols=3 name=idTable> <TR> </TR> </TABLE> <% next %> </div>
EXCEL.JS
_________
Código Javascript:
Ver original
var Conexion=false; // Variable que manipula la conexion. var url="generar_archivo.asp"; // Determina la pagina donde enviar var url_ruta = "" function objetoAjax(){ var xmlhttp=false; try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp = new XMLHttpRequest(); } return xmlhttp; } function exportarExcel(texto_html,id){ peticion = objetoAjax(); peticion.open("GET", url, true); peticion.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1'); peticion.onreadystatechange = function () { if (peticion.readyState == 1) { document.getElementById(id).innerHTML="cargando...<img src='cargando.gif' alt='enviando' />" } if (peticion.readyState == 4) { var urlMod = url +'?html='+ texto_html; urlMod = urlMod +'&tipo='+ id; // alert(urlMod); window.open(urlMod); // window.open(urlMod,"ventana1","height=300,scrollbars=0,Location=1") } } peticion.send(texto_html); }
generar_archivo.asp
____________________
Código ASP:
Ver original
<% tabla = request("html") opcion = request("tipo") Response.buffer = true Response.ContentType = "application/vnd.ms-excel" Response.AddHeader "Content-Disposition", "inline; filename=respaldo.xls;" ' sub exportarexcel() ' end sub sub exportarword() Response.buffer = true Response.ContentType = "application/vnd.ms-word" Response.AddHeader "Content-Disposition", "inline; filename=respaldo.doc;" end sub %> <html> <head> <title>EXPORTAR</title> </head> <body> <% response.Write(tabla) ' response.Binarywrite(tabla) %> </body> </html>
PD. SI, estos códigos son familiares, pero llama recursividad.