C# Tutorial para crear un archivo Excel

Chaknith Bin
Chaknith Bin
26 de mayo, 2019
Actualizado 10 de diciembre, 2024
Compartir:
This article was translated from English: Does it need improvement?
Translated
View the article in English

Este tutorial le guiará paso a paso sobre cómo crear un archivo de Excel Workbook en cualquier plataforma que soporte .NET Framework 4.5 o .NET Core. Crear archivos Excel en C# puede ser sencillo, incluso sin depender de la biblioteca heredada Microsoft.Office.Interop.Excel. Utilice IronXL para establecer las propiedades de la hoja de cálculo, como congelar paneles y protección, establecer las propiedades de impresión y mucho más.


Visión general

IronXL Creates C# Excel Files in .NET

IronXL es una API de Excel intuitiva para C# y VB que te permite leer, editar y crear archivos de hojas de cálculo de Excel en .NET con un rendimiento extremadamente rápido. No es necesario instalar MS Office ni siquiera Excel Interop.

IronXL es totalmente compatible con .NET Core, .NET Framework, Xamarin, Mobile, Linux, macOS y Azure.

Características IronXL:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-1.cs
using IronXL;

// Default file format is XLSX, we can override it using CreatingOptions
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
var workSheet = workBook.CreateWorkSheet("example_sheet");
workSheet["A1"].Value = "Example";

// Set value to multiple cells
workSheet["A2:A4"].Value = 5;
workSheet["A5"].Style.SetBackgroundColor("#f0f0f0");

// Set style to multiple cells
workSheet["A5:A6"].Style.Font.Bold = true;

// Set formula
workSheet["A6"].Value = "=SUM(A2:A4)";
if (workSheet["A6"].IntValue == workSheet["A2:A4"].IntValue)
{
    Console.WriteLine("Basic test passed");
}
workBook.SaveAs("example_workbook.xlsx");
Imports IronXL

' Default file format is XLSX, we can override it using CreatingOptions
Private workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Private workSheet = workBook.CreateWorkSheet("example_sheet")
Private workSheet("A1").Value = "Example"

' Set value to multiple cells
Private workSheet("A2:A4").Value = 5
workSheet("A5").Style.SetBackgroundColor("#f0f0f0")

' Set style to multiple cells
workSheet("A5:A6").Style.Font.Bold = True

' Set formula
workSheet("A6").Value = "=SUM(A2:A4)"
If workSheet("A6").IntValue = workSheet("A2:A4").IntValue Then
	Console.WriteLine("Basic test passed")
End If
workBook.SaveAs("example_workbook.xlsx")
$vbLabelText   $csharpLabel

Primer paso

1. Descargue la biblioteca IronXL C# GRATUITA

Comience a usar IronXL en su proyecto hoy con una prueba gratuita.

Primer Paso:
green arrow pointer


Instalación mediante NuGet

Existen tres formas diferentes de instalar el paquete NuGet de IronXL:

  1. Visual Studio

  2. Símbolo del sistema para desarrolladores

  3. Descargue directamente el paquete NuGet

    Visual Studio

    Visual Studio proporciona el gestor de paquetes NuGet para que lo utilices para instalar paquetes NuGet en tus proyectos. Puede acceder a él a través del menú Proyecto o haciendo clic con el botón derecho del ratón en el Explorador de soluciones. Ambas opciones se muestran a continuación en las figuras 3 y 4.

    Project Menu related to Visual Studio

    Figure 3Project menu

    Right Click Solution Explorer related to Visual Studio

    Figure 4Right click Solution Explorer


    Luego de hacer clic en Manage NuGet Packages desde cualquiera de las opciones, busque el paquete IronXL.Excel e instálelo como se muestra en la Figura 5.

    Install Iron Excel Nuget Package related to Visual Studio

    Figure 5Install IronXL.Excel NuGet Package

    Símbolo del sistema para desarrolladores

    Abra el Símbolo del sistema para desarrolladores y siga estos pasos para instalar el paquete IronXL.Excel NuGet:

  4. Busque el símbolo del sistema para desarrolladores (normalmente se encuentra en la carpeta Visual Studio).

  5. Escribe el siguiente comando:

  6. PM > Instalar paquete IronXL.Excel

  7. Pulse Intro

  8. Se instalará el paquete.

  9. Vuelva a cargar el proyecto de Visual Studio

    Descargue directamente el paquete NuGet

    Para descargar el paquete NuGet, siga estos pasos:

  10. Navegue hasta la siguiente URL: https://www.nuget.org/packages/ironxl.excel/

  11. Haga clic en Descargar paquete

  12. Una vez descargado el paquete, haga doble clic en él

  13. Vuelva a cargar el proyecto de Visual Studio

    Instalar IronXL mediante descarga directa de la biblioteca

    La segunda forma de instalar IronXL es descargándolo directamente desde la siguiente URL: https://ironsoftware.com/csharp/excel/

    Download Ironxl Library related to Instalar IronXL mediante descarga directa de la biblioteca

    Figure 6Download IronXL library

    Haga referencia a la Biblioteca en su proyecto siguiendo los pasos siguientes:

  14. Haga clic con el botón derecho en la solución en el Explorador de soluciones

  15. Seleccionar referencias

  16. Buscar la biblioteca IronXL.dll

  17. Haga clic en OK

    ¡Vamos!

    Ahora que estás configurado, ¡podemos comenzar a experimentar con las increíbles funciones de la biblioteca IronXL!

    Tutoriales

2. Crear un proyecto de ASP.NET ##

Siga los siguientes pasos para crear un sitio web ASP.NET

  1. Abrir Visual Studio

  2. Haga clic en Archivo > Nuevo proyecto

  3. Seleccione Web en Visual C# en el cuadro de lista Tipo de proyecto

  4. Seleccione ASP.NET Web Application, como se muestra a continuación

    New Project Asp Net related to 2. Crear un proyecto de ASP.NET ##

    Figura 1Nuevo Proyecto

  5. Haga clic en OK

  6. En la siguiente pantalla, seleccione Formularios Web, como se muestra en la Figura 2, debajo de

    Web Form related to 2. Crear un proyecto de ASP.NET ##

    Figura 2Formularios Web

  7. Haga clic en OK

    Ahora tenemos algo con lo que trabajar. Instala IronXL para empezar a personalizar tu archivo.


3. Crear un libro de Excel ##

¡No puede ser más sencillo crear un nuevo libro de Excel usando IronXL! ¡Es una línea de código! Sí, de verdad:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-2.cs
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
$vbLabelText   $csharpLabel

Ambos formatos de archivo, XLS (versión más antigua de archivo de Excel) y XLSX (versión actual y más reciente de archivo), se pueden crear con IronXL.

3.1. Establecer una Hoja de Trabajo Predeterminada ###

Además, es aún más sencillo crear una Hoja de cálculo por defecto:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-3.cs
WorkSheet workSheet = workBook.CreateWorkSheet("2020 Budget");
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("2020 Budget")
$vbLabelText   $csharpLabel

"Hoja" en el fragmento de código anterior representa la hoja de cálculo y se puede utilizar para establecer valores de celda y casi todo lo que Excel puede hacer.

En caso de que estés confundido sobre la diferencia entre un Libro de Trabajo y una Hoja de Cálculo, déjame explicártelo:

El Cuaderno de ejercicios contiene hojas de trabajo. Esto significa que puede añadir tantas Hojas de Trabajo como desee en un Libro de Trabajo. En un artículo posterior explicaré cómo hacerlo. Una Hoja de Cálculo contiene Filas y Columnas. La intersección de una Fila y una Columna se denomina Celda, y es lo que manipularás mientras trabajes con Excel.


4. Establecer Valores de Células

4.1. Establecer Valores de Celdas Manualmente ###

Para establecer manualmente los valores de las celdas, basta con indicar con qué celda se está trabajando y establecer su valor, como en el siguiente ejemplo:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-4.cs
workSheet["A1"].Value = "January";
workSheet["B1"].Value = "February";
workSheet["C1"].Value = "March";
workSheet["D1"].Value = "April";
workSheet["E1"].Value = "May";
workSheet["F1"].Value = "June";
workSheet["G1"].Value = "July";
workSheet["H1"].Value = "August";
workSheet["I1"].Value = "September";
workSheet["J1"].Value = "October";
workSheet["K1"].Value = "November";
workSheet["L1"].Value = "December";
workSheet("A1").Value = "January"
workSheet("B1").Value = "February"
workSheet("C1").Value = "March"
workSheet("D1").Value = "April"
workSheet("E1").Value = "May"
workSheet("F1").Value = "June"
workSheet("G1").Value = "July"
workSheet("H1").Value = "August"
workSheet("I1").Value = "September"
workSheet("J1").Value = "October"
workSheet("K1").Value = "November"
workSheet("L1").Value = "December"
$vbLabelText   $csharpLabel

Aquí, he rellenado las Columnas A a L, y la primera fila de cada una con el nombre de un mes diferente.

4.2. Establecer valores de celda dinámicamente ###

Establecer valores dinámicamente es casi similar al segmento de código anterior. Lo bueno de esto es que no tienes que codificar la ubicación de la célula. En el siguiente ejemplo de código, crearás un nuevo objeto Random para crear números aleatorios, y luego utilizarás un bucle for para iterar a través del rango de celdas que te gustaría rellenar con valores.

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-5.cs
Random r = new Random();
for (int i = 2 ; i <= 11 ; i++)
{
    workSheet["A" + i].Value = r.Next(1, 1000);
    workSheet["B" + i].Value = r.Next(1000, 2000);
    workSheet["C" + i].Value = r.Next(2000, 3000);
    workSheet["D" + i].Value = r.Next(3000, 4000);
    workSheet["E" + i].Value = r.Next(4000, 5000);
    workSheet["F" + i].Value = r.Next(5000, 6000);
    workSheet["G" + i].Value = r.Next(6000, 7000);
    workSheet["H" + i].Value = r.Next(7000, 8000);
    workSheet["I" + i].Value = r.Next(8000, 9000);
    workSheet["J" + i].Value = r.Next(9000, 10000);
    workSheet["K" + i].Value = r.Next(10000, 11000);
    workSheet["L" + i].Value = r.Next(11000, 12000);
}
Dim r As New Random()
For i As Integer = 2 To 11
	workSheet("A" & i).Value = r.Next(1, 1000)
	workSheet("B" & i).Value = r.Next(1000, 2000)
	workSheet("C" & i).Value = r.Next(2000, 3000)
	workSheet("D" & i).Value = r.Next(3000, 4000)
	workSheet("E" & i).Value = r.Next(4000, 5000)
	workSheet("F" & i).Value = r.Next(5000, 6000)
	workSheet("G" & i).Value = r.Next(6000, 7000)
	workSheet("H" & i).Value = r.Next(7000, 8000)
	workSheet("I" & i).Value = r.Next(8000, 9000)
	workSheet("J" & i).Value = r.Next(9000, 10000)
	workSheet("K" & i).Value = r.Next(10000, 11000)
	workSheet("L" & i).Value = r.Next(11000, 12000)
Next i
$vbLabelText   $csharpLabel

Cada celda de A2 a L11 contiene un valor único generado aleatoriamente.

Hablando de valores dinámicos, ¿qué te parece aprender a añadir dinámicamente datos a las celdas directamente desde una base de datos? El siguiente fragmento de código muestra rápidamente cómo se hace, suponiendo que haya configurado correctamente las conexiones a la base de datos.

4.3. Añadir directamente desde una base de datos ###

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-6.cs
// Create database objects to populate data from database
string contring;
string sql;
DataSet ds = new DataSet("DataSetName");
SqlConnection con;
SqlDataAdapter da;

// Set Database Connection string
contring = @"Data Source=Server_Name;Initial Catalog=Database_Name;User ID=User_ID;Password=Password";

// SQL Query to obtain data
sql = "SELECT Field_Names FROM Table_Name";

// Open Connection & Fill DataSet
con = new SqlConnection(contring);
da = new SqlDataAdapter(sql, con);
con.Open();
da.Fill(ds);

// Loop through contents of dataset
foreach (DataTable table in ds.Tables)
{
    int Count = table.Rows.Count - 1;
    for (int j = 12; j <= 21; j++)
    {
        workSheet["A" + j].Value = table.Rows[Count]["Field_Name_1"].ToString();
        workSheet["B" + j].Value = table.Rows[Count]["Field_Name_2"].ToString();
        workSheet["C" + j].Value = table.Rows[Count]["Field_Name_3"].ToString();
        workSheet["D" + j].Value = table.Rows[Count]["Field_Name_4"].ToString();
        workSheet["E" + j].Value = table.Rows[Count]["Field_Name_5"].ToString();
        workSheet["F" + j].Value = table.Rows[Count]["Field_Name_6"].ToString();
        workSheet["G" + j].Value = table.Rows[Count]["Field_Name_7"].ToString();
        workSheet["H" + j].Value = table.Rows[Count]["Field_Name_8"].ToString();
        workSheet["I" + j].Value = table.Rows[Count]["Field_Name_9"].ToString();
        workSheet["J" + j].Value = table.Rows[Count]["Field_Name_10"].ToString();
        workSheet["K" + j].Value = table.Rows[Count]["Field_Name_11"].ToString();
        workSheet["L" + j].Value = table.Rows[Count]["Field_Name_12"].ToString();
    }
    Count++;
}
' Create database objects to populate data from database
Dim contring As String
Dim sql As String
Dim ds As New DataSet("DataSetName")
Dim con As SqlConnection
Dim da As SqlDataAdapter

' Set Database Connection string
contring = "Data Source=Server_Name;Initial Catalog=Database_Name;User ID=User_ID;Password=Password"

' SQL Query to obtain data
sql = "SELECT Field_Names FROM Table_Name"

' Open Connection & Fill DataSet
con = New SqlConnection(contring)
da = New SqlDataAdapter(sql, con)
con.Open()
da.Fill(ds)

' Loop through contents of dataset
For Each table As DataTable In ds.Tables
	Dim Count As Integer = table.Rows.Count - 1
	For j As Integer = 12 To 21
		workSheet("A" & j).Value = table.Rows(Count)("Field_Name_1").ToString()
		workSheet("B" & j).Value = table.Rows(Count)("Field_Name_2").ToString()
		workSheet("C" & j).Value = table.Rows(Count)("Field_Name_3").ToString()
		workSheet("D" & j).Value = table.Rows(Count)("Field_Name_4").ToString()
		workSheet("E" & j).Value = table.Rows(Count)("Field_Name_5").ToString()
		workSheet("F" & j).Value = table.Rows(Count)("Field_Name_6").ToString()
		workSheet("G" & j).Value = table.Rows(Count)("Field_Name_7").ToString()
		workSheet("H" & j).Value = table.Rows(Count)("Field_Name_8").ToString()
		workSheet("I" & j).Value = table.Rows(Count)("Field_Name_9").ToString()
		workSheet("J" & j).Value = table.Rows(Count)("Field_Name_10").ToString()
		workSheet("K" & j).Value = table.Rows(Count)("Field_Name_11").ToString()
		workSheet("L" & j).Value = table.Rows(Count)("Field_Name_12").ToString()
	Next j
	Count += 1
Next table
$vbLabelText   $csharpLabel

Sólo tiene que establecer la propiedad Valor de la celda en cuestión con el nombre del campo que desea introducir en la celda.


5. Aplicar formato

5.1. Establecer Colores de Fondo de las Celdas ###

Para establecer el color de fondo de una celda o de un rango de celdas, sólo necesitas una línea de código parecida a la siguiente:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-7.cs
workSheet["A1:L1"].Style.SetBackgroundColor("#d3d3d3");
workSheet("A1:L1").Style.SetBackgroundColor("#d3d3d3")
$vbLabelText   $csharpLabel

Esto establece el color de fondo del rango de celdas en gris. El color está en formato RGB (Rojo, Verde, Azul) donde los dos primeros caracteres representan el Rojo, los dos siguientes, el Verde y los dos últimos, el Azul. Los valores van de 0 a 9, luego de A a F (Hexadecimal).

5.2. Crear Bordes

Crear bordes con IronXL es muy sencillo, como se muestra a continuación:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-8.cs
workSheet["A1:L1"].Style.TopBorder.SetColor("#000000");
workSheet["A1:L1"].Style.BottomBorder.SetColor("#000000");
workSheet["L2:L11"].Style.RightBorder.SetColor("#000000");
workSheet["L2:L11"].Style.RightBorder.Type = IronXL.Styles.BorderType.Medium;
workSheet["A11:L11"].Style.BottomBorder.SetColor("#000000");
workSheet["A11:L11"].Style.BottomBorder.Type = IronXL.Styles.BorderType.Medium;
workSheet("A1:L1").Style.TopBorder.SetColor("#000000")
workSheet("A1:L1").Style.BottomBorder.SetColor("#000000")
workSheet("L2:L11").Style.RightBorder.SetColor("#000000")
workSheet("L2:L11").Style.RightBorder.Type = IronXL.Styles.BorderType.Medium
workSheet("A11:L11").Style.BottomBorder.SetColor("#000000")
workSheet("A11:L11").Style.BottomBorder.Type = IronXL.Styles.BorderType.Medium
$vbLabelText   $csharpLabel

En el código anterior he establecido los bordes negro superior e inferior en las celdas A1 a L1, luego he establecido el borde derecho en las celdas L2 a L11 y el estilo del borde es Medio. Por último, he establecido el borde inferior de las celdas A11 a L11


6. Usar fórmulas en las celdas ##

Sigo diciendo que IronXL hace que todo sea tan fácil, ¡y realmente lo hace, y no puedo destacarlo lo suficiente! El siguiente código permite utilizar fórmulas:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-9.cs
// Use IronXL built-in aggregations
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();

// Assign value to cells
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;
' Use IronXL built-in aggregations
Dim sum As Decimal = workSheet("A2:A11").Sum()
Dim avg As Decimal = workSheet("B2:B11").Avg()
Dim max As Decimal = workSheet("C2:C11").Max()
Dim min As Decimal = workSheet("D2:D11").Min()

' Assign value to cells
workSheet("A12").Value = sum
workSheet("B12").Value = avg
workSheet("C12").Value = max
workSheet("D12").Value = min
$vbLabelText   $csharpLabel

Lo bueno de esto es el hecho de que se puede establecer el tipo de datos de la celda por lo tanto el resultado de la fórmula. El código anterior muestra cómo usar las fórmulas SUM (suma valores), AVG (promedia valores), MAX (obtiene el valor más alto) y MIN (obtiene el valor más bajo).


7. Establecer propiedades de la hoja de trabajo y de impresión

7.1. Establecer las Propiedades de la Hoja ###

Las propiedades de la hoja de cálculo incluyen congelar filas y columnas y proteger la hoja de cálculo con una contraseña. Se muestra a continuación:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-10.cs
workSheet.ProtectSheet("Password");
workSheet.CreateFreezePane(0, 1);
workSheet.ProtectSheet("Password")
workSheet.CreateFreezePane(0, 1)
$vbLabelText   $csharpLabel

La primera fila se congela y no se desplaza junto con el resto de la hoja de cálculo. La hoja de cálculo también está protegida de cualquier edición con una contraseña. Las figuras 7 y 8 muestran esto en acción.

Freeze Panes related to 7.1. Establecer las Propiedades de la Hoja ###

Figure 7Freeze Panes

Protected Worksheet related to 7.1. Establecer las Propiedades de la Hoja ###

Figure 8Protected Worksheet

7.2. Establecer Propiedades de Página e Impresión ###

Puede establecer las propiedades de la página, como la orientación de la página, el tamaño de la página y el área de impresión, entre otras.

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-11.cs
workSheet.SetPrintArea("A1:L12");
workSheet.PrintSetup.PrintOrientation = IronXL.Printing.PrintOrientation.Landscape;
workSheet.PrintSetup.PaperSize = IronXL.Printing.PaperSize.A4;
workSheet.SetPrintArea("A1:L12")
workSheet.PrintSetup.PrintOrientation = IronXL.Printing.PrintOrientation.Landscape
workSheet.PrintSetup.PaperSize = IronXL.Printing.PaperSize.A4
$vbLabelText   $csharpLabel

El área de impresión se establece en A1 a L12. La orientación se establece en Horizontal y el tamaño de papel en A4.

Print Setup related to 7.2. Establecer Propiedades de Página e Impresión ###

Figure 9Print Setup


8. Guardar libro de trabajo

Para guardar el Libro de Trabajo, utilice el siguiente código:

:path=/static-assets/excel/content-code-examples/tutorials/create-excel-file-net-12.cs
workBook.SaveAs("Budget.xlsx");
workBook.SaveAs("Budget.xlsx")
$vbLabelText   $csharpLabel

Acceso rápido a tutoriales

Brand Visual Studio related to Acceso rápido a tutoriales

Download this Tutorial as C# Source Code

The full free C# for Excel Source Code for this tutorial is available to download as a zipped Visual Studio 2017 project file.

Download

Explore this Tutorial on GitHub

The source code for this project is available in C# and VB.NET on GitHub.

Use this code as an easy way to get up and running in just a few minutes. The project is saved as a Microsoft Visual Studio 2017 project, but is compatible with any .NET IDE.

How to Create Excel File in C# on GitHub
Github Icon related to Acceso rápido a tutoriales
Documentation related to Acceso rápido a tutoriales

Lea la referencia de la API XL

Explore la Referencia de la API para IronXL, que describe los detalles de todas las características, espacios de nombres, clases, métodos, campos y enums de IronXL.

Ver la referencia de la API
Chaknith Bin
Ingeniero de software
Chaknith trabaja en IronXL e IronBarcode. Tiene una gran experiencia en C# y .NET, ayudando a mejorar el software y a apoyar a los clientes. Sus conocimientos de las interacciones con los usuarios contribuyen a mejorar los productos, la documentación y la experiencia general.