Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    esportazione excel problema valuta

    ciao a tutti,
    ho un problema esportando in excel una gridview.
    Sembrerebbe che non venga mantenuo il formato dei dati.
    sia i dati con type datetime che decimal (valuta) vengono esportati come stringe sicchè non mi è possibile fare operazioni come la sommatoria.

    ho letto in un post in questo forum che è possibile esportare un file con ado ma le mie conoscnze di vb sono davvero minime sicchè non sono riuscito a tradurre il tutto in c#...

    (LAMER)

    mi sarebbe davvero di aiuto se qualcuno mi desse delle dritte su come risolvere il problema in questione.
    Sarei orientato verso ado e l'utilizzo di un modello excell vuoto da riempire ma anche soluzioni alternative potrebbero risolvere la situazione...

    Posto di seguito la funzione che utilizzo.. purtroppo non mi ricordo da dove l'ho presa.. ma grazie all'autore...


    private void ExportGridView()
    {

    string attachment = "attachment; filename="qualcosa.xls" ;


    try
    {
    Response.ClearContent();

    Response.AddHeader("content-disposition", attachment);

    Response.ContentType = "application/ms-excel";

    System.IO.StringWriter sw = new System.IO.StringWriter();


    HtmlTextWriter htw = new HtmlTextWriter(sw);



    // Create a form to contain the grid

    HtmlForm frm = new HtmlForm();


    GridView2.Parent.Controls.Add(frm);

    frm.Attributes["runat"] = "server";

    frm.Controls.Add(GridView2);



    frm.RenderControl(htw);

    //GridView1.RenderControl(htw);

    Response.Write(sw.ToString());

    Response.End();
    }
    http://www.dammnet.it
    http://www.nautica-bozzato.it

  2. #2
    ok ho risolto anche se in un modo non del tutto ortodosso...
    mi farebbe piacere avere qualche parere sull'impatto che puo' avere una soluzione del genere.
    praticamente vado a crearmi un dataview dal sqldatasource su cui vado a ciclare l'esportazione avendo l'accortezza di sostituire con un replace la virgola con un punto.

    poi vado a settare la formattazione su excel con

    <td align='left' style='mso-number-format:\\#\\#0\\.00;'>{0}</td>


    posto qui il codice grezzo grezzo della funzione che sto finendo.
    spero di essere di aiuto a qualcuno. mi ci è voluta una giornata buona a capire come potevo fare.

    aspetto con ansia dei commenti o consigli su migliorie.
    grazie e ciao

    private void ExportGridView()
    {
    //DataTable dt = (DataTable)SqlDataSource3.Select(DataSourceSelectA rguments.Empty);
    DataView dt= (DataView) SqlDataSource2.Select(DataSourceSelectArguments.Em pty);














    // Set up the Response object...
    this.Response.BufferOutput = false;
    this.Response.Charset = string.Empty;
    this.Response.Clear();
    this.Response.ClearContent();
    this.Response.ClearHeaders();

    this.Response.ContentType = "application/vnd.ms-excel";

    // Open the document OVER this window:
    string contentDisposition = "inline; filename=ExcelFile.xls";
    this.Response.AppendHeader("content-disposition", contentDisposition);

    // Create a table HTML tag...
    string textOutput =
    "<table border='1' bordercolor='black' rules='all' " +
    "style='BORDER: 1px double; BORDER-COLLAPSE: collapse;'>\r\n";
    this.Response.Write(textOutput);

    ///////////////////////////////////////////////////////////////////////////
    // Write out the column headers...
    ///////////////////////////////////////////////////////////////////////////
    textOutput = "<tr height=17 style='height:12.75pt'>\r\n";
    for (int i=0; i<dt.Table.Columns.Count; i++)
    {
    textOutput += string.Format(
    System.Globalization.CultureInfo.InvariantCulture,
    "<th align='left'>{0}</th>",
    dt.Table.Columns[i].ColumnName);
    }
    textOutput += "</tr>\r\n";
    this.Response.Write(textOutput);

    ///////////////////////////////////////////////////////////////////////////
    // Write out each row of the DataTable...
    ///////////////////////////////////////////////////////////////////////////
    textOutput = string.Empty;
    for (int i = 0; i < dt.Table.Rows.Count; i++)
    {
    System.Data.DataRow dataRow = dt.Table.Rows[i];
    textOutput = "<tr height=17 style='height:12.75pt'>\r\n";

    // Loop through the columns for each row and grab the values...
    for (int j=0; j<dataRow.Table.Columns.Count; j++)
    {
    string dataRowText = dataRow[j].ToString().Trim();

    // Remove any tabs, carriage returns, or newlines from the value...
    dataRowText = dataRowText.Replace("\t", " ");
    dataRowText = dataRowText.Replace("\r", string.Empty);
    dataRowText = dataRowText.Replace("\n", " ");
    dataRowText = dataRowText.Replace(",", ".");

    textOutput += string.Format(
    System.Globalization.NumberFormatInfo.CurrentInfo,
    "<td align='left' style='mso-number-format:\\#\\#0\\.00;'>{0}</td>",//
    dataRowText);
    }

    textOutput += "</tr>\r\n";
    this.Response.Write(textOutput);
    }

    // Close the HTML table tag...
    textOutput = "</table>\r\n";
    this.Response.Write(textOutput);

    // Close the Response stream...
    this.Response.Flush();
    this.Response.Close();
    this.Response.End();
    }
    http://www.dammnet.it
    http://www.nautica-bozzato.it

  3. #3
    sembra che me le scrivo e me le godo... cmq
    ho notato che la soluzione proposta crea dei problemi nel caso in cui ci siano impostazioni diverse in strumenti>opzioni>internazionale sul client excel.
    problemi non di poco conto visto che il num 11.00 puo' diventare 11000...

    sto cercando un modo per forzare una cultura o un'impostazione di excel.

    a questo punto non so se è + un post su asp.net o su excel...

    penso però sia il caso di continuare qui visto che il tutto nasce dall'esigenza di esportare un dataset in un foglio excel.

    se avete suggerimenti vi ringrazio anticipatamente.

    se dovessi trovare la soluzione la postero' in caso qualcuno si trovi nelle mie stesse difficoltà...

    (mi scuso ancora per il post un po' autoreferenziale, ma è possibile che solo io abbia questo tipo di problema?)

    ciao a tutti e buon lavoro.
    http://www.dammnet.it
    http://www.nautica-bozzato.it

  4. #4
    chiedo scusa per questo3d solitario... e per l'argomento che sfora un pochetto forse dal serverside.

    per forzare l'esportazione con determinati separatori di migliaia e decimali ho trovato questi parametri da settare nella proprietà style del table tag relativo alla tabella da esportare...

    qualcosa del tipo:


    "<table border='1' bordercolor='black' rules='all' " +
    "style='BORDER: 1px double; BORDER-COLLAPSE: collapse; mso-displayed-thousand-separator:\"\\.\"; mso-displayed-decimal-separator:\"\\,\"'>\r\n";


    sembra funzionare
    http://www.dammnet.it
    http://www.nautica-bozzato.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.