my.ASPItalia.com
ASP.NET
|
HTML5
|
LINQ e Entity Framework
|
Silverlight
|
Windows Phone
|
.NET Framework
|
Windows 8
|
Libro WP7
|
Libro HTML5
|
Corso HTML5
Iscriviti
Login
Newsletter
Home
Articoli
Script
Notizie
FORUM
Blogs
Media
Tutorials
Corsi
Libri
Eventi
Tags
Tutti i forum
Ricerca
FAQ
Fai una domanda
esportazione dati gridview in excel
in
Misc
>
Altri linguaggi e tecnologie
Ultimo messaggio
teio83
il 19 ottobre 2010 alle 14:35
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
Rispondi
Quoting
giangi_77
il 19 ottobre 2010 alle 14:53
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 -
Rispondi
Quoting
teo prome
il 19 ottobre 2010 alle 15:04
531 messaggi
dal 13 novembre 2008
Contributi
www.whereabouts.it
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
Rispondi
Quoting
teio83
il 19 ottobre 2010 alle 15:53
36 messaggi
dal 06 agosto 2010
grazie ma non avete niente fatto in javascript ?
Rispondi
Quoting
teio83
il 19 ottobre 2010 alle 16:17
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
Rispondi
Quoting
Salto rapido
Ultimi messaggi
Tutti i forum
Ricerca
Utenti online
ASP.NET
ASP.NET 2.0
ASP.NET 3.5
ASP.NET 4.0
.NET Framework
Silverlight
Windows Phone
Windows Presentation Foundation e WinForms
Windows Communication e Workflow
ASP - avanzato
ASP - base
SQL Server e MySQL
E-commerce
Hosting
Altri linguaggi e tecnologie
Windows Server, IIS & Security
Libri
OT
Commenti: blogs e notizie
Eventi
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
Effettua il login!
Hai dimenticato la password?
Ultimi messaggi
Jquery, filtro tabella html e rowspan
(1)
Miglior modo e tecnologia per scaricare immagini
(1)
[vb6] activex component can't create object
UTENTI ONLINE
In primo piano
Annunciate le versioni ufficiali di Visual Studio 11
Rilasciato Visual Studio 11 Beta: scopri tutte le novità!
Windows 8 Consumer Preview: segui con noi la diretta
I più letti di oggi
Sviluppare applicazioni web mobile con HTML5 e jQuery mobile
Le novità di ASP.NET 4.5 (Community Days 2012)
Metro Style App per Windows 8 con HTML e Javascript
Introduzione ad Entity Framework
Web Camp - ASP.NET MVC 3 (Community Days 2012)
Introduzione a LINQ, LINQ to XML, Object e DataSet
Migliorare le prestazioni di Entity Framework limitando l'uso del metodo Include
Windows Phone 7.5 Developer Day: costruire un'app in 60 minuti
Applicazioni Metro con XAML: cosa cambia per lo sviluppatore .NET con Windows 8
Windows 8: introduzione allo sviluppo
Media
Sviluppare applicazioni web mobile con HTML5 e jQuery mobile
Metro Style App per Windows 8 con HTML e Javascript
Tutti i media
In evidenza
Dal 29 febbraio arriva WinRTItalia.com: tutto sullo sviluppo per Windows 8 e Metro
Migliorare le prestazioni di Entity Framework limitando l'uso del metodo Include
Aprire una popup in Silverlight
Sviluppare applicazioni web mobile con HTML5 e jQuery mobile
Disegnare un'applicazione a servizi con Entity Framework e WCF
Il nuovo tag time in HTML5
Salvare e leggere rapidamente le impostazioni di un'applicazione Windows Phone
Metro Style App per Windows 8 con HTML e Javascript
MISC
I nostri autori
Collabora con noi!
Media Kit - Pubblicità sul nostro network