Come esportare dati in Excel in ASP.NET Core 3.0

Quando si creano applicazioni Web, sarà spesso necessario importare o esportare dati da o verso documenti Word o Excel. Esistono diversi modi per ottenere ciò e molti pacchetti NuGet per lavorare con Word o Excel. Questo articolo illustra come lavorare con ClosedXML in ASP.NET Core per esportare i dati in Excel.

Per lavorare con gli esempi di codice forniti in questo articolo, dovresti avere Visual Studio 2019 installato nel tuo sistema. Se non hai già una copia, puoi scaricare Visual Studio 2019 qui.

Creare un progetto MVC ASP.NET Core in Visual Studio

Prima di tutto, creiamo un progetto ASP.NET Core in Visual Studio 2019. Supponendo che Visual Studio 2019 sia installato nel tuo sistema, segui i passaggi descritti di seguito per creare un nuovo progetto ASP.NET Core in Visual Studio.

  1. Avvia l'IDE di Visual Studio.
  2. Fai clic su "Crea nuovo progetto".
  3. Nella finestra "Crea nuovo progetto", seleziona "Applicazione Web ASP.NET Core" dall'elenco dei modelli visualizzati.
  4. Fare clic su Avanti.
  5. Nella finestra "Configura il tuo nuovo progetto", specifica il nome e la posizione per il nuovo progetto.
  6. Facoltativamente, selezionare la casella di controllo "Posiziona soluzione e progetto nella stessa directory".
  7. Fare clic su Crea.
  8. Nella finestra "Crea una nuova applicazione Web ASP.NET Core" mostrata di seguito, selezionare .NET Core come runtime e ASP.NET Core 2.2 (o successivo) dall'elenco a discesa in alto. Userò ASP.NET Core 3.0. 
  9. Selezionare "Applicazione Web (Model-View-Controller)" come modello di progetto per creare una nuova applicazione ASP.NET Core MVC. 
  10. Assicurati che le caselle di controllo "Abilita supporto Docker" e "Configura per HTTPS" siano deselezionate poiché non utilizzeremo queste funzionalità qui.
  11. Assicurati che l'autenticazione sia impostata su "Nessuna autenticazione" poiché non utilizzeremo nemmeno l'autenticazione.
  12. Fare clic su Crea. 

Seguendo questi passaggi è necessario creare un nuovo progetto ASP.NET Core MVC in Visual Studio. Useremo questo progetto per illustrare l'esportazione dei dati per Excel nelle sezioni seguenti.

Installa il pacchetto NuGet ClosedXML 

Sono disponibili diverse librerie tra cui scegliere se si desidera esportare i dati in Excel. Uno di questi si chiama ClosedXML. È possibile installare questo pacchetto tramite il gestore di pacchetti NuGet all'interno dell'IDE di Visual Studio 2019 o eseguendo il comando seguente nella console del gestore di pacchetti NuGet:

Pacchetto di installazione ClosedXML

Esporta i dati come file CSV da ASP.NET Core 3.0

L'esportazione dei dati come file CSV (comma-separate) è semplice. Puoi sfruttare un pacchetto NuGet come CsvExport o AWright18.SimpleCSVExporter per ottenere questo risultato oppure puoi farlo manualmente. Per semplicità, genereremo manualmente un file CSV. Considera la seguente classe denominata Author.

public class Autore

{

  public int Id {get; impostato; }

  stringa pubblica FirstName {get; impostato; }

  stringa pubblica LastName {get; impostato; }

}

Successivamente, puoi popolare i dati in un elenco di autori come mostrato nello snippet di codice riportato di seguito.

Elenco autori = nuovo elenco

{

    nuovo autore {Id = 1, FirstName = "Joydip", LastName = "Kanjilal"},

    nuovo autore {Id = 2, FirstName = "Steve", LastName = "Smith"},

    nuovo autore {Id = 3, FirstName = "Anand", LastName = "Narayaswamy"}

};

Il seguente frammento di codice mostra come generare un file CSV in un metodo di azione del controller.

public IActionResult DownloadCommaSeperatedFile ()

{

    provare

    {

       StringBuilder stringBuilder = new StringBuilder ();

       stringBuilder.AppendLine ("Id, FirstName, LastName");

       foreach (var autore negli autori)

       {

           stringBuilder.AppendLine ($ "{author.Id},

           {author.FirstName}, {author.LastName} ");

       }

      File di ritorno (Encoding.UTF8.GetBytes

      (stringBuilder.ToString ()), "text / csv", "autori.csv");

    }

    catturare

    {

       return Error ();

    }

}

Esporta i dati come file XLSX in ASP.NET Core 3.0

Una cartella di lavoro in Excel è composta da diversi fogli di lavoro. È possibile creare una cartella di lavoro di Excel utilizzando il codice seguente.

var workbook = new XLWorkbook ();

È quindi possibile sfruttare l'interfaccia IXLWorkSheet per creare e aggiungere fogli di lavoro alla cartella di lavoro come mostrato di seguito.

IXLWorksheet worksheet = workbook.Worksheets.Add ("Autori");

foglio di lavoro.Cell (1, 1) .Value = "Id";

foglio di lavoro.Cell (1, 2) .Value = "FirstName";

foglio di lavoro.Cell (1, 3) .Value = "LastName";

for (int index = 1; index <= autori.Count; index ++)

{

   foglio di lavoro.Cella (indice + 1, 1) .Valore = autori [indice - 1] .Id;

   foglio di lavoro.Cell (indice + 1, 2) .Valore = autori [indice - 1] .FirstName;

   foglio di lavoro.Cell (indice + 1, 3) .Value = autori [indice - 1] .LastName;

}

Infine, puoi salvare la cartella di lavoro come flusso di memoria e quindi creare un'istanza FileContentResult come mostrato di seguito.

utilizzando (var stream = new MemoryStream ())

{

     cartella di lavoro.SaveAs (stream);

     var content = stream.ToArray ();

     file di ritorno (content, contentType, fileName);

}

Scarica un documento Excel in ASP.NET Core 3.0

Ecco il codice sorgente completo del metodo di azione che può essere utilizzato per scaricare un documento Excel.

public IActionResult DownloadExcelDocument ()

        {

            string contentType = "application / vnd.openxmlformats-

            officedocument.spreadsheetml.sheet ";

            string fileName = "autori.xlsx";

            provare

            {

                utilizzando (var workbook = new XLWorkbook ())

                {

                    Foglio di lavoro IXLWorksheet =

                    workbook.Worksheets.Add ("Autori");

                    foglio di lavoro.Cell (1, 1) .Value = "Id";

                    foglio di lavoro.Cell (1, 2) .Value = "FirstName";

                    foglio di lavoro.Cell (1, 3) .Value = "LastName";

                    for (int index = 1; index <= autori.Count; index ++)

                    {

                        foglio di lavoro.Cella (indice + 1, 1) .Valore =

                        autori [indice - 1] .Id;

                        foglio di lavoro.Cella (indice + 1, 2) .Valore =

                        autori [indice - 1] .FirstName;

                        foglio di lavoro.Cella (indice + 1, 3) .Valore =

                        autori [indice - 1] .LastName;

                    }

                    utilizzando (var stream = new MemoryStream ())

                    {

                        cartella di lavoro.SaveAs (stream);

                        var content = stream.ToArray ();

                        file di ritorno (content, contentType, fileName);

                    }

                }

            }

            cattura (eccezione ex)

            {

                return Error ();

            }

        }

Sebbene in questo articolo abbiamo usato ClosedXML, sono disponibili molti altri pacchetti per la lettura, la scrittura e la manipolazione dei dati di Excel in ASP.NET Core, inclusi EPPlus e NPOI. Puoi saperne di più su ClosedXML su GitHub su //github.com/ClosedXML/ClosedXML. Discuterò dell'importazione di dati Excel in un'applicazione ASP.NET Core in un post futuro qui.

Come fare di più in ASP.NET e ASP.NET Core:

  • Come usare la memorizzazione nella cache in memoria in ASP.NET Core
  • Come gestire gli errori nell'API Web ASP.NET
  • Come passare più parametri ai metodi del controller dell'API Web
  • Come registrare i metadati di richieste e risposte nell'API Web ASP.NET
  • Come lavorare con HttpModules in ASP.NET
  • Controllo delle versioni avanzato nell'API Web ASP.NET Core
  • Come usare l'inserimento delle dipendenze in ASP.NET Core
  • Come lavorare con le sessioni in ASP.NET
  • Come lavorare con HTTPHandlers in ASP.NET
  • Come utilizzare IHostedService in ASP.NET Core
  • Come utilizzare un servizio SOAP WCF in ASP.NET Core
  • Come migliorare le prestazioni delle applicazioni ASP.NET Core
  • Come utilizzare un'API Web ASP.NET Core usando RestSharp
  • Come lavorare con la registrazione in ASP.NET Core
  • Come usare MediatR in ASP.NET Core
  • Come lavorare con lo stato della sessione in ASP.NET Core
  • Come utilizzare Nancy in ASP.NET Core
  • Comprendere l'associazione di parametri nell'API Web ASP.NET
  • Come caricare file in ASP.NET Core MVC
  • Come implementare la gestione delle eccezioni globale nell'API Web ASP.NET Core
  • Come implementare i controlli di integrità in ASP.NET Core
  • Procedure consigliate per la memorizzazione nella cache in ASP.NET
  • Come utilizzare la messaggistica Apache Kafka in .NET
  • Come abilitare CORS sulla tua API Web
  • Quando utilizzare WebClient vs. HttpClient vs. HttpWebRequest
  • Come lavorare con Redis Cache in .NET
  • Quando utilizzare Task.WaitAll rispetto a Task.WhenAll in .NET