36 messaggi dal 06 agosto 2010
Ciao,

ho scritto una funzione javascript che preleva i dati contenuti in una gridview e li mette all'interno di un file excel.
Su un'applicazione .net di prova in locale sul mio pc la funzione javascript funziona correttamente ma quando la sposto sul server questa si blocca alla seconda istruzione dicendo che non riesce a creare l'oggetto.
Io ho pensato che sul mio pc funziona mentre sul server no semplicemente perchè il mio pc ha installato office mentre il server no. Provando a collegarmi all'applicazione presente sul server tramite un client con installato office ottengo lo stesso errore di quando la uso sul server.
A questo punto vorrei chiedere se effettivamente quando tento di accedere all'applicazione sul server ottengo un errore perchè non ho installato office o se c'è dell'altro.
Inoltre vorrei sapere come mai ottengo un errore anche se mi collego da un client che ha office? usando javascript non dovrei utilizzare le risorse del client (quindi anche office) ?

di seguito riporto la mia funzione

function Export() {
var tableElement = document.getElementById('GridView1');
var oExcel = new ActiveXObject("Excel.Application");
var oBook = oExcel.Workbooks.Add;
var oSheet = oBook.Worksheets(1);
for (var y = 0; y < tableElement.rows.length; y++) {
for (var x = 0; x < tableElement.rows(y).cells.length; x++) {
if (tableElement.rows(y) != null) {
if (y < 1) {
oSheet.Cells(y + 1, x + 1).Font.Bold = true;
}
else {
oSheet.Cells(y + 1, x + 1).Font.Bold = false;
}
oSheet.Cells(y + 1, x + 1) = tableElement.rows(y).cells(x).innerText;
}
}
}
oExcel.Visible = true;
oExcel.UserControl = true;
}

n.b.
per provarla bisogna andare sulle impostazioni di i.e.
opzioni internet -> sicurezza(internet) -> livello personalizzato -> controlli active x e plug - in -> abilitare l'opzione "Inizializza ed esegui script controlli active x non contrassegnati come sicuri per lo script"

p.s.
se qualcuno avesse una funzione che mi crea direttamente il file excel contenente i dati della gridview senza passare per excel me lo potrebbe passare ?


Grazie a tutti
652 messaggi dal 12 maggio 2001
www.idioteca.it
l'errore sembra dipendere dalla mancanza di excel sul server.
Non va se provi da un client perchè comunque è il server che deve avere office o almeno i viewer.
Ti consiglio di cambiare sistema e creare il file in altro modo (ad esempio ti crei una tabella html con i tuoi dati e poi la salvi come file excel).
Ti giro un paio di link di altri articoli/messaggi in aspitalia:

http://www.aspitalia.com/script/442/Esportare-Dati-Excel-XML-HTTPHandler-ASP.NET.aspx

http://forum.aspitalia.com/forum/post/355503/Esportare-Excel-Dati-Gridview-Unica-Pagina.aspx

ciao
Modificato da giangi_77 il 19 ottobre 2010 14.54 -
col beneficio del dubbio, in quanto fa parte di una vecchia applicazione; vedrai che molto è nel secondo link inviato da giangi, ma c'è una parte aggiuntiva molto importante


protected void BtnExportGrid_Click(object sender, EventArgs args)
{
GridViewExportUtil.Export("clienti.xls", this.GridView1);
}


poi ti crei un .cs in App_Code


using System;
using System.Data;
using System.Configuration;
using System.IO;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public class GridViewExportUtil
{
public static void Export(string fileName, GridView gv)
{

string style = @"<style> .text { mso-number-format:\@; } </style>";

HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader(
"content-disposition", string.Format("attachment; filename={0}", fileName));
HttpContext.Current.Response.ContentType = "application/ms-excel";

using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter htw = new HtmlTextWriter(sw))
{
// tab per contenere la grid
Table table = new Table();


if (gv.HeaderRow != null)
{
GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
table.Rows.Add(gv.HeaderRow);
}

foreach (GridViewRow row in gv.Rows)
{
GridViewExportUtil.PrepareControlForExport(row);
table.Rows.Add(row);
}

if (gv.FooterRow != null)
{
GridViewExportUtil.PrepareControlForExport(gv.FooterRow);
table.Rows.Add(gv.FooterRow);
}


table.RenderControl(htw);

HttpContext.Current.Response.Write(style);


HttpContext.Current.Response.Write(sw.ToString());
HttpContext.Current.Response.End();
}
}
}


/// rimpiazza i controlli con dei Literals, per Excel

private static void PrepareControlForExport(Control control)
{
for (int i = 0; i < control.Controls.Count; i++)
{
Control current = control.Controls[i];
if (current is LinkButton)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
}
else if (current is ImageButton)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
}
else if (current is HyperLink)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
}
else if (current is DropDownList)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
}
else if (current is CheckBox)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));
}

if (current.HasControls())
{
GridViewExportUtil.PrepareControlForExport(current);
}
}
}
}

la parte in bold ti evita casini vari su Excel
36 messaggi dal 06 agosto 2010
grazie ma non avete niente fatto in javascript ?
36 messaggi dal 06 agosto 2010
ho provato anche questa funzione

function Export() {
var tab_text = "<table><tr>";
var textRange;
tab = document.getElementById('GridView1');
for (j = 0; j < tab.rows.length; j++)
{
tab_text = tab_text + tab.rows[j].innerHTML;
tab_text = tab_text + "</tr><tr>";
}
tab_text = tab_text + "</tr></table>";
txtArea1.document.open("txt/html", "replace");
txtArea1.document.write(tab_text);
txtArea1.document.close();
txtArea1.focus();
sa = txtArea1.document.execCommand("SaveAs", true, "sample.xls");
return (sa);
}

che in pratica salva direttamente il file senza aprire excel ma come prima sul server non funziona mentre in locale, anche su pc senza office, si; si blocca tutto al ciclo dicendo che object required, come tab non fosse dichiarato

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
Community
Ultimi messaggi
UTENTI ONLINE
In primo piano

I più letti di oggi

Media
In evidenza
MISC