115 messaggi dal 01 novembre 2012
Comunque ho capito che è una questione di permessi di scrittura, infatti ho cambiato il percorso e ho messo Desktop e il file mi viene creato bene.
Ma il problema più grande è che quando pubblico l'applicativo sul Server si blocca la procedura appena la lancio oltre che avere la necessità di farlo aprire o salvare nel PC di chi ne lancia l'elaborazione.....come faccio ??
Modificato da modelrc il 19 giugno 2014 18.11 -
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Nando,
un CSV è un semplice file di testo, non hai bisogno delle classi del namespace Microsoft.Office.Interop.Excel, che invece servono a scrivere file Excel nel suo formato binario.

Ecco un esempio che sfrutta uno StreamWriter per aggiungere righe di testo ad un file.
http://msdn.microsoft.com/en-us/library/hxwfzt61.aspx

Dovrai invocare il WriteLine per ogni riga della tua DataTable.
Su ogni riga scriverai il valore dei campi. Decidi tu che separatore usare, ma il formato CSV vuole che sia la virgola.
Quando necessario, dovrai racchiudere i valori nei doppi apici ".

Possono sorgere problemi nel caso i tuoi campi contengano uno dei caratteri speciali che hai scelto come separatore (la virgola, l'a-capo, i doppi apici). In questo caso devi fare l'escape di tali caratteri in modo che Excel non entrerà in confusione durante l'importazione dei dati.

Leggi questo articolo su wikipedia, ti indica esattamente come comportarti in quei casi.
http://it.wikipedia.org/wiki/Comma-separated_values


1. i campi sono separati da virgola e vengono racchiusi tra doppi apici se contengono virgole;
2. le linee sono separate da un carattere 'a capo';
3. è preferibile non lasciare spazi prima e dopo i campi (se intenzionali, tali spazi vanno racchiusi tra doppi apici);
4. per rappresentare un carattere di doppio apice in un campo occorre raddoppiarlo e racchiudere il campo tra doppi apici: " diventa "";
5. per rappresentare un'interruzione di riga in un campo, occorre racchiudere il campo tra doppi apici.


Ecco del codice di esempio che racchiude tutte le considerazioni di cui abbiamo parlato finora.
http://www.codeproject.com/Tips/665519/Writing-a-DataTable-to-a-CSV-file

ciao,
Moreno
Modificato da BrightSoul il 20 giugno 2014 23.49 -

Enjoy learning and just keep making
115 messaggi dal 01 novembre 2012
Ti ringrazio per la risposta, ma ormai ho scritto la procedura per creare il file excel e per me é meglio, solo che ho un problema, il primo é che in run-time mi viene creato senza problemi ma solo se lo creo sul desktop per una questione di permessi di scrittura e l'altro problema non so come farlo aprire dal client che lancia la procedura o comunque farlo salvare.
Oltre al fatto che non so come abilitare I permessi per la creazione sul server dove è pubblicato.
in pratica vorrei fare che dopo averlo creato si apra la finestra che proponga di aprire il file o salvarlo.
saluti
nando
Modificato da modelrc il 21 giugno 2014 00.02 -
3.939 messaggi dal 28 gennaio 2003
facendo una ricerca, magari con queste parole
asp.net download file from server

si trovano le risposte. Ad esempio (il primo che ho trovato)

http://stackoverflow.com/questions/18477398/asp-net-file-download-from-server

in altre parole, una volta creato il file, devi fare il Download del file come "attachment". Il browser del client gli chiederà se aprire il file o salvarlo.


ps.

Se fossi in te però, seguirei i consigli di BrightSoul.
Come fai tu sono solo problemi e (almeno credo) che tu abbia bisogno di installare Excel nel server, o sbaglio?

In alternativa ai csv, ti propongo di crearti un file Excel ma in formato foglio di calcolo XML 2003 (*.xml).
Non è semplicissimo ma non è neanche impossibile. Si tratta di comporre una stringa xml.

ciao
115 messaggi dal 01 novembre 2012
Grazie Pietro per la risposta,
io ho giá Excel installato nel Server in quanto uso un server aziendale, useró sicuramente il tuo suggerimento per il download, ma vorrei prima completare il tutto con un file Excel, che torno a ripetere per l'esigenza che ho é l'ideale.
Resta comunque un altro problema vale a dire che se provo l'applicazione lanciando questa procedura che mi crea il file excel e come destinazione del file il DeskTop va bene e mi crea il file correttamente ( in run-time), mentre quando poi pubblico sul Server l'applicativo appena lancio questa procedura mi va in errore.
Pertanto credo che sia una questione di permessi di scrittura quindi avevo pensato di farcreare questo file in una cartella virtuale dove risiede l'applicazione in questo modo dovrei avere i permessi di scrittura e quinidi una volta creato il file excel potrei adottare il tuo suggerimento nell'introdurre il download del file stesso... va bene ??
Modificato da modelrc il 21 giugno 2014 10.14 -
Modificato da modelrc il 21 giugno 2014 10.16 -
3.939 messaggi dal 28 gennaio 2003
Io posso solo dire che ho provato ad usare Excel ai tempi di Windows NT, ai tempi di ASP e InterDev e ho trovato esattamente quello che dici tu: problemi e problemi.
Comunque, se hai il controllo dei server io creerei una directory, per esempio, c:\dati\xyz e darei a xyz tutti i permessi di lettura-scrittura.
Al file darei naturalmente, un nome univoco, tipo GUID.
E, dulcis in fundo, pulirei questa directory dei files più vecchi di qualche minuto.

Il file csv, invece, si crea in memoria, non si scrive niente nel disco, e si fa il download semplicemente nello stesso modo. Non è necessario avere Excel installato nel server, e non è necessario che lo abbia il client.

ciao
115 messaggi dal 01 novembre 2012
ho individuato uno dei problemi:

Errore server nell'applicazione '/'.
Recupero della class factory COM per il componente con CLSID {00024500-0000-0000-C000-000000000046} non riuscito a causa del seguente errore: 80070005 Accesso negato. (Eccezione da HRESULT: 0x80070005 (E_ACCESSDENIED)).
Descrizione: Eccezione non gestita durante l'esecuzione della richiesta Web corrente. Per ulteriori informazioni sull'errore e sul suo punto di origine nel codice, vedere la traccia dello stack.

Dettagli eccezione: System.UnauthorizedAccessException: Recupero della class factory COM per il componente con CLSID {00024500-0000-0000-C000-000000000046} non riuscito a causa del seguente errore: 80070005 Accesso negato. (Eccezione da HRESULT: 0x80070005 (E_ACCESSDENIED)).

ASP.NET non è autorizzato ad accedere alla risorsa richiesta. Provare a concedere diritti di accesso alla risorsa all'identità di richiesta di ASP.NET. ASP.NET dispone di un'entità di processo di base (in genere {MACHINE}\ASPNET su IIS 5 o Network Service su IIS 6 e IIS 7 e l'identità del pool di applicazioni configurato in IIS 7.5) che viene utilizzata se l'applicazione non esegue la rappresentazione. Se l'applicazione esegue la rappresentazione tramite <identity impersonate="true"/>, l'identità sarà rappresentata dall'utente anonimo (in genere IUSR_MACHINENAME) o dall'utente autenticato che ha eseguito la richiesta.

Per concedere l'accesso a un file ad ASP.NET, fare clic su di esso con il pulsante destro del mouse in Esplora risorse, scegliere Proprietà e fare clic sulla scheda Sicurezza. Fare clic su "Aggiungi" per aggiungere l'utente o il gruppo appropriato. Evidenziare l'account ASP.NET e selezionare la casella relativa all'accesso desiderato.

Errore nel codice sorgente:


Riga 261:
Riga 262:    Private Sub DatatableToExcel(ByVal dtTemp As DataTable)
Riga 263:        Dim _excel As New Microsoft.Office.Interop.Excel.Application
Riga 264:        Dim wBook As Microsoft.Office.Interop.Excel.Workbook
Riga 265:        Dim wSheet As Microsoft.Office.Interop.Excel.Worksheet


l'errore è sulla riga 263 che faccio ?
115 messaggi dal 01 novembre 2012
ad ogni modo ho creato anche la procedura per crearmi il file CSV e vi devo dare ragione in quanto è velocissimo nel crearlo quindi grazie infinite....ma ora per il download ho visto l'esempio che ha postato pietro ma non riesco a collocarlo

System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
    response.ClearContent();
    response.Clear();
    response.ContentType = "text/plain";
    response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + ";");
    response.TransmitFile(Server.MapPath("FileDownload.csv"));
    response.Flush();
    response.End();  


a richiamarlo ho capito che lo faccio così:

<asp:Button ID="btnDownload" runat="server" Text="Download File" OnClick="btnDownload_Click"/>

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.