C# Tutorial para crear un archivo Excel

por Jonas Schmidt

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 Crea C# Archivos de Excel en .NET

IronXL es una intuitiva API de Excel para C# y VB que le permite leer, editar y crear archivos de hojas de cálculo Excel en .NET con un rendimiento rapidísimo. 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:

  • Asistencia humana directamente de nuestro equipo de desarrollo .NET
  • Instalación rápida con Microsoft Visual Studio
  • GRATIS para el desarrollo. Licencias de $599.

    Crear y guardar un archivo Excel: Código rápido

https://www.nuget.org/packages/IronXL.Excel/ Como alternativa, el IronXL.dll puede descargarse y añadido a su proyecto.

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

//  El formato de archivo predeterminado es XLSX, pero puede modificarse mediante CreatingOptions.
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
var workSheet = workBook.CreateWorkSheet("example_sheet");
workSheet["A1"].Value = "Example";

//  Establecer valor en varias celdas
workSheet["A2:A4"].Value = 5;
workSheet["A5"].Style.SetBackgroundColor("#f0f0f0");

//  Fijar estilo a varias celdas
workSheet["A5:A6"].Style.Font.Bold = true;

//  Fórmula establecida
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

'  El formato de archivo predeterminado es XLSX, pero puede modificarse mediante CreatingOptions.
Private workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Private workSheet = workBook.CreateWorkSheet("example_sheet")
Private workSheet("A1").Value = "Example"

'  Establecer valor en varias celdas
Private workSheet("A2:A4").Value = 5
workSheet("A5").Style.SetBackgroundColor("#f0f0f0")

'  Fijar estilo a varias celdas
workSheet("A5:A6").Style.Font.Bold = True

'  Fórmula establecida
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")
VB   C#

Primer paso

1. Descargue la biblioteca IronXL C# GRATUITA

Biblioteca NuGet C# para Excel

Instalar con NuGet

Install-Package IronXL.Excel
o
Java PDF JAR

Descargar DLL

Descargar DLL

Instalar manualmente en su proyecto

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.

    Figura 3 - Menú de proyectos

Figura 4 - Haga clic con el botón derecho en Explorador de soluciones


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.

Gráfico 5 - Instalar el paquete NuGet IronXL.Excel

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:

  1. Busque el símbolo del sistema para desarrolladores (normalmente se encuentra en la carpeta Visual Studio).
  2. Escribe el siguiente comando:
  3. PM > Instalar paquete IronXL.Excel
  4. Pulse Intro
  5. Se instalará el paquete.
  6. Vuelva a cargar el proyecto de Visual Studio

    Descargue directamente el paquete NuGet

    Para descargar el paquete NuGet, siga estos pasos:

  7. Navegue hasta la siguiente URL: https://www.nuget.org/packages/ironxl.excel/
  8. Haga clic en Descargar paquete
  9. Una vez descargado el paquete, haga doble clic en él
  10. 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/

    Figura 6 - Descargar la biblioteca IronXL

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

  11. Haga clic con el botón derecho en la solución en el Explorador de soluciones
  12. Seleccionar referencias
  13. Buscar la biblioteca IronXL.dll
  14. Haga clic en OK

    ¡Vamos!

    Ahora que ya estás configurado, podemos empezar a jugar con las increíbles funciones de la biblioteca IronXL!


Tutoriales

2. Crear un proyecto 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

    Figura 1 - Nuevo proyecto

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

Figura 2 - Formularios web

  1. 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 simple crear un nuevo Libro de Excel usando IronXL! Se trata de 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)
VB   C#

Ambos XLS (versión anterior del archivo Excel) y XLSX (versión actual y más reciente del archivo) formatos de archivo pueden crearse con IronXL.

3.1. Establecer una hoja de cálculo por defecto

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")
VB   C#

"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 celda

4.1. Establecer valores de celda 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"
VB   C#

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
VB   C#

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
//  Crear objetos de base de datos para rellenar los datos de la base de datos
string contring;
string sql;
DataSet ds = new DataSet("DataSetName");
SqlConnection con;
SqlDataAdapter da;

//  Establecer la cadena de conexión a la base de datos
contring = @"Data Source=Server_Name;Initial Catalog=Database_Name;User ID=User_ID;Password=Password";

//  Consulta SQL para obtener datos
sql = "SELECT Field_Names FROM Table_Name";

//  Abrir conexión y rellenar DataSet
con = new SqlConnection(contring);
da = new SqlDataAdapter(sql, con);
con.Open();
da.Fill(ds);

//  Recorrer el contenido del conjunto de datos
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++;
}
'  Crear objetos de base de datos para rellenar los datos de la base de datos
Dim contring As String
Dim sql As String
Dim ds As New DataSet("DataSetName")
Dim con As SqlConnection
Dim da As SqlDataAdapter

'  Establecer la cadena de conexión a la base de datos
contring = "Data Source=Server_Name;Initial Catalog=Database_Name;User ID=User_ID;Password=Password"

'  Consulta SQL para obtener datos
sql = "SELECT Field_Names FROM Table_Name"

'  Abrir conexión y rellenar DataSet
con = New SqlConnection(contring)
da = New SqlDataAdapter(sql, con)
con.Open()
da.Fill(ds)

'  Recorrer el contenido del conjunto de datos
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
VB   C#

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 los 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")
VB   C#

Esto establece el color de fondo del rango de celdas en gris. El color está en RGB (Rojo, Verde, Azul) en el que 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, y de A a F (En 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
VB   C#

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. Utilizar fórmulas en celdas

Sigo diciendo que IronXL hace que todo sea tan fácil, pero 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
//  Utilice las agregaciones integradas en IronXL
decimal sum = workSheet["A2:A11"].Sum();
decimal avg = workSheet["B2:B11"].Avg();
decimal max = workSheet["C2:C11"].Max();
decimal min = workSheet["D2:D11"].Min();

//  Asignar valor a las celdas
workSheet["A12"].Value = sum;
workSheet["B12"].Value = avg;
workSheet["C12"].Value = max;
workSheet["D12"].Value = min;
'  Utilice las agregaciones integradas en IronXL
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()

'  Asignar valor a las celdas
workSheet("A12").Value = sum
workSheet("B12").Value = avg
workSheet("C12").Value = max
workSheet("D12").Value = min
VB   C#

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 utilizar la función SUM (suma valores)AVG (valores medios)MAX (obtiene el valor más alto) y MIN (obtiene el valor más bajo) fórmulas.


7. Establecer propiedades de hoja de cálculo e impresión

7.1. Establecer propiedades de la hoja de cálculo

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)
VB   C#

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.

Gráfico 7 - Paneles de congelación

Figura 8 - Hoja de trabajo protegida

7.2. Configurar 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
VB   C#

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.

Figura 9 - Configuración de impresión


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")
VB   C#

Acceso rápido a tutoriales

Descargar este tutorial como C# Código fuente

El código fuente completo y gratuito de C# for Excel para este tutorial está disponible para descargar como un archivo de proyecto comprimido de Visual Studio 2017.

Descargar

Explore este tutorial en GitHub

El código fuente de este proyecto está disponible en C# y VB.NET en GitHub.

Utilice este código como una manera fácil de ponerse en marcha en solo unos minutos. El proyecto se guarda como un proyecto de Microsoft Visual Studio 2017, pero es compatible con cualquier IDE de .NET.

Cómo crear un archivo Excel en C# en GitHub

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
Jonas es desarrollador jefe en una empresa de software .NET de Munich.  Jonas utiliza IronXL para impulsar el intercambio de datos entre la contabilidad de un cliente y los documentos de Excel de canal de ventas.  IronXL se está convirtiendo en una herramienta común en muchos de los proyectos de sistemas de contabilidad de clientes de Jonas.

Jonas Schmidt

Desarrollador C#

Jonas es desarrollador jefe en una empresa de software .NET de Munich. Jonas utiliza IronXL para impulsar el intercambio de datos entre la contabilidad de un cliente y los documentos de Excel de canal de ventas. IronXL se está convirtiendo en una herramienta común en muchos de los proyectos de sistemas de contabilidad de clientes de Jonas.