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<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;
}
<form id="printMe" name="printMe">
<input type="button" name="printMe" onClick="printSpecial()" value="Print this Page">
<%
for i = 0 to 200'---> genera mucho texto a exportar
%>
<TABLE id=idTable cols=3 name=idTable> <%
next
%>
EXCEL.JS
_________
Código Javascript
:
Ver originalvar 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.