Creazione di un file Excel in ASP.NET

venerdì 30 aprile 2010 - 17.54

fildero Profilo | Newbie

Salve, questo è il mio primo messaggio essendomi appena registrato quindi per prima cosa vi saluto tutti. :)

Vi scrivo per chiedervi un aiuto: ho necessità di realizzare una semplicissima pagina web in C# che contenga un campo di testo e un bottone, e quando il bottone viene cliccato il testo contenuto nella casella viene inserita nella prima cella di un foglio Excel appositamente creato.
Ho cercato di seguire le indicazioni trovate un po in giro sulla rete, ma senza grossi risultati.

Volevo sapere che metodi ho per poter creare il foglio Excel e quali librerie devo includere.

Vi ringrazio in anticipo,
Filippo

Edit: ho aggiunto anche il codice che sto provando ad eseguire e l'errore che mi viene restituito:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
}
finally
{
GC.Collect();
}
}

private void button1_Click_1(object sender, EventArgs e)
{
//Excel.Application xlApp;
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;

//xlApp = new Excel.ApplicationClass();
xlApp = new Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Add(misValue);

xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com";

xlWorkBook.SaveAs("csharp-Excel.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();

releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);

MessageBox.Show("Excel file created , you can find the file c:\\csharp-Excel.xls");
}

private void label1_Click(object sender, EventArgs e)
{

}

}
}


ERRORE: COMException non è stata gestita.
Recupero della class factory COM per il componente con CLSID {00024500-0000-0000-C000-000000000046} non riuscito a causa del seguente errore: 80040154.

Grazie di nuovo a tutti, Filippo.

skibu Profilo | Junior Member

ho lo stesso errore appena cerco di creare l'oggetto Excel.Application
ho aggiunto come riferimento "Microsoft Office 12.0 Object Library" e "Microsoft Office Interop Excel"

io sto sviluppando con visual studio 2008 pro

Gluck74 Profilo | Guru

vi scrivo alcune righe da sostituire/aggiungere alle vostre:

using Microsoft.Office.Interop.Excel; using System.Runtime.InteropServices; Microsoft.Office.Interop.Excel.Application xl = null; xl = new Application(); xl.Interactive = false; xl.Visible = false;

Consiglio inoltre di chiudere e fare il Marshal.ReleaseComObject a scaletta, ovvero
rilascio lo sheet
chiudo il book
rilascio il book
chiudo excel
rilascio excel

Questo per cercare di correggere il vostro problema. Inoltre però bisognerebbe sapere il sistema operativo e la versione di IIS.
Se il problema persiste, allora è un errore di configurazione delle DCOM.

Per quanto riguarda invece la soluzione, io non utilizzerei le interop per fare un file di excel con una singola cella. Tante risorse sprecate.
basta creare una semplice tabella identica al risultato che volete vedere su excel, darla in pasto ad un gridview, e poi inserite il seguente codice:

System.IO.StringWriter oStringWriter = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter); GridViewXLS.RenderControl(oHtmlTextWriter); Response.Clear(); Response.ContentType = "application/vnd.ms-excel"; Response.AppendHeader("Content-Disposition", string.Format("attachment; filename={0}_{1}.xls; creation-date='{2}'", ViewState["FileName"], DateTime.Now.ToShortDateString().Replace("/", "-"), DateTime.Now.ToString())); Response.Charset = "utf-8"; Response.AppendHeader("pragma", "no-cache"); Response.Buffer = true; Response.Expires = -1; Response.Write(oStringWriter.ToString()); Response.Flush(); Response.End();

fildero Profilo | Newbie

Salve, innanzitutto ringrazio per le risposte.
Per poter creare un'applicazione che fa utilizzo di file del pacchetto Office è necessario avere installato il pacchetto Office (o almeno Excel). Io avevo installato la versione Beta 2010 che però non è adatta, ho risolto quindi sostituendo la versione 2010 Beta con la versione Office 2007 ed aggiungendo un riferimento al progetto dell'applicazione dalla sezione COM ed importando, in particolare, la libreria Micrsoft Excel Object Library...dopodichè tutto ha funzionato. Però gironzolando un po in giro sulla rete mi sono imbattuto in un articolo che consiglio di leggere:

http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2

Parla della programmazione di applicazioni che fanno utilizzo di file Office, l'ho trovato molto interessante.

Saluti, Filippo de Rosa

Gluck74 Profilo | Guru

si, conosco questo documento.

In effetti nella mia risposta avevo dato per scontato che sul server fossero installate le PIAs.
per quanto riguarda gli errori segnalati dal documento, li ho riscontrati solo su windows server 2008 R2, ma con alcuni accorgimenti, si può comunque usare tranquillamente senza errori (non so di preciso però sulla sicurezza).

Con sistemi operativi fino al Window Server 2003 / Windows Vista (per lo sviluppo), ho sempre utilizzato le PIAs ver. 11 (office 2003)
Con sistemi operativi Windows Server 2008 / Windows 7, ho installato le PIAs 12 (office 2007) ed ho avuto molti problemi sul server.

In effetti qusti sistemi operativi utilizzano IIS 7.5/IIS 7 che gestisce in maniera diversa la protezione e l'autenticazione
(che non ho ancora capito bene infatti sono nei casini con il cliente..... he he)

Per quanto riguarda l'installazione di office, non sarebbe nemmeno giusto installarlo sul server web.
Quindi, in alternativa al pacchetto e le PIAs, ci vorrebbero le Office Web Component, che dovrebbero avere la stessa identica funzione delle PIAs, però apposita per il web.

Uso il condizionale perché non le conosco e non le ho mai utilizzate.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5