Esportare DataGridView in Excel

Mattepuffo's logo
Esportare DataGridView in Excel

Esportare DataGridView in Excel

In un altro articolo abbiamo visto come esportare una DataGridView in formato TXT.

Ora vediamo come esportarla in formato Excel, sicuramente più comodo da visualizzare rispetto al TXT.

Prima di tutto nel nostro progetto dobbiamo aggiungere una referenza.

Cliccate col tasto destro sul progetto -> Aggiungi riferimento -> .NET -> Microsoft.Interop.Excel

A qusto punto ho aggiunto un Item nel menu con questo evento:

private void saveXLSToolStripMenuItem_Click(object sender, EventArgs e)
{
    DialogSalvaXls dlg = new DialogSalvaXls();
    dlg.dialog(dataGridViewEntrate);
}

Non faccio altro che lanciare un SaveFileDialog e passargli la DataGridView da esportare.

Per il SaveFileDialog potete guardare qua.

Questa invece la classe che lancio:

using System;
using System.Windows.Forms;
using System.IO;
using Excel = Microsoft.Office.Interop.Excel;

namespace BancaWindowsForm
{
  class DialogSalvaXls
  {
   public void dialog(DataGridView grid)
   {
    Excel._Application app = new Excel.Application();
    Excel._Workbook wk = app.Workbooks.Add(Type.Missing);
    Excel._Worksheet sheet = null;
    sheet = wk.Sheets[1];
    sheet = wk.ActiveSheet;
    sheet.Name = "Entrate";

    for (int i = 1; i < grid.ColumnCount; i++)
    {
     sheet.Cells[1, i] = grid.Columns[i - 1].HeaderText;
    }

    for (int i = 0; i < grid.Rows.Count - 1; i++)
    {
     for (int j = 0; j < grid.Columns.Count - 1; j++)
     {
      sheet.Cells[i + 2, j + 1] = grid.Rows[i].Cells[j].Value.ToString();
     }
    }
    sheet.Columns.AutoFit();

   SaveFileDialog sf = new SaveFileDialog();
   sf.Title = "Salva";
    sf.Filter = "XLS|*.xls|XLSX|*.xlsx|Tutti i file|*.*";
    sf.InitialDirectory = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
    if (sf.ShowDialog() == DialogResult.OK)
   {
     try
     {
      wk.SaveAs(sf.FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
      wk.Close();
      app.Quit();
     }
    catch (Exception ex)
    {
     throw new Exception(ex.Message);
    }
   }
  }
  }
}

Imposto le varie opzioni per il foglio.

Nel primo ciclo for imposto la prima riga del foglio prendendo l'intestazione della DGV.

Nei cicli sottostanti scandaglio righe e colonne per riempire le varie celle del foglio.

Imposto l'AutoFit() per impostare la larghezza delle colonne in maniera automatica.

Richiamo un SaveFileDialog per impostare nome, estensione e percorso del file da salvare.

Salvo il file usando il metodo SaveAs().

Chiudo tutto.

Non molto difficle direi, giusto da controllare qualche opzione dei vari metodi usati per personalizzarli sulle vostre esigenze!


Condividi

Commentami!