Tabla de Contenidos

Guardar archivos de Excel en C# es una tarea común en muchas aplicaciones .NET, especially when generating reports, exporting analytical data, or automating system logs. Ya sea que esté trabajando con resúmenes financieros o datos de operaciones diarias, poder crear y guardar archivos de Excel mediante programación puede mejorar significativamente la eficiencia y la precisión.
En C#, los desarrolladores pueden manejar archivos de Excel de múltiples maneras: creando nuevos libros de trabajo, escribiendo datos y guardándolos en varios formatos como XLSX, CSV o PDF. Con la ayuda de bibliotecas de Excel dedicadas, estas operaciones se pueden automatizar de manera eficiente sin depender de Microsoft Excel o de una intervención manual.
En este artículo, exploraremos cómo:
- Preparar su entorno de desarrollo
- Guardar datos de DataTable o DataGridView en Excel
- Guardar archivos de Excel en diferentes formatos de hoja de cálculo (CSV, XLS, etc.)
- Exportar archivos de Excel a formatos de documento (PDF, HTML, etc.)
- Guardar libros de Excel en un MemoryStream para aplicaciones web
- Abrir y volver a guardar archivos de Excel existentes
Preparar el Entorno de Desarrollo
Antes de sumergirse en el código, configure su entorno de desarrollo con una biblioteca de Excel que admita la creación, lectura y guardado de archivos en .NET. En este tutorial, usaremos Free Spire.XLS for .NET.
Paso 1: Instalar Spire.XLS a través de NuGet
Install-Package FreeSpire.XLS
Paso 2: Importar el Espacio de Nombres Requerido
using Spire.Xls;
Paso 3: Crear, Escribir y Guardar un Archivo de Excel Simple
// Crear un nuevo libro de trabajo y obtener la primera hoja de cálculo
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
// Escribir "¡Hola Mundo!" en la celda A1
sheet.Range["A1"].Text = "¡Hola Mundo!";
// Guardar el libro de trabajo en un archivo
workbook.SaveToFile("HelloWorld.xlsx", ExcelVersion.Version2016);
Este sencillo ejemplo muestra el flujo de trabajo básico: crear un libro de trabajo, escribir datos en una celda y guardar el archivo.
Después de esto, puede explorar clases y métodos clave como:
- Workbook – representa todo el archivo de Excel.
- Worksheet – representa una sola hoja dentro del libro de trabajo.
- Range – permite el acceso a celdas específicas para entrada, formato o estilo.
- Workbook.SaveToFile() – guarda el libro de trabajo en el disco en el formato de Excel especificado.
Guardar Datos en un Archivo de Excel en C#
Guardar datos estructurados como DataTable o DataGridView en un archivo de Excel es una de las tareas más prácticas en el desarrollo de C#. Ya sea que su aplicación produzca resultados de base de datos, contenido de cuadrícula de interfaz de usuario o informes automatizados, exportar estos conjuntos de datos a Excel proporciona una mejor legibilidad y compatibilidad.
Ejemplo 1: Guardar DataTable en Excel
using Spire.Xls;
using System.Data;
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
sheet.Name = "EmployeeData";
DataTable table = new DataTable();
table.Columns.Add("EmployeeID");
table.Columns.Add("FullName");
table.Columns.Add("Department");
table.Columns.Add("HireDate");
table.Columns.Add("Salary");
// Agregar filas de muestra
table.Rows.Add("E001", "Alice Johnson", "Finance", "2020-03-12", "7500");
table.Rows.Add("E002", "Bob Williams", "Human Resources", "2019-08-05", "6800");
table.Rows.Add("E003", "Catherine Lee", "IT", "2021-01-20", "8200");
table.Rows.Add("E004", "David Smith", "Marketing", "2018-11-30", "7100");
table.Rows.Add("E005", "Emily Davis", "Sales", "2022-06-15", "6900");
// Insertar el DataTable en la hoja de cálculo
sheet.InsertDataTable(table, true, 1, 1);
// Aplicar formatos incorporados
sheet.AllocatedRange.Rows[0].BuiltInStyle = BuiltInStyles.Heading1;
for (int i = 1; i < sheet.AllocatedRange.Rows.Count(); i++)
{
sheet.AllocatedRange.Rows[i].BuiltInStyle = BuiltInStyles.Accent1;
}
sheet.AllocatedRange.AutoFitColumns();
sheet.AllocatedRange.AutoFitRows();
// Guardar en Excel
workbook.SaveToFile("EmployeeDataExport.xlsx", FileFormat.Version2016);
Cómo funciona:
- InsertDataTable() inserta datos a partir de una celda específica.
- El argumento true incluye los encabezados de las columnas.
- SaveToFile() guarda el libro de trabajo en el disco; el segundo parámetro especifica la versión del formato de Excel.
- FileFormat.Version2016 especifica la versión del formato de Excel.
A continuación se muestra una salida de ejemplo que muestra cómo se ve el DataTable exportado en Excel:

Ejemplo 2: Guardar DataGridView en Excel
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
sheet.InsertDataTable(((DataTable)dataGridView1.DataSource), true, 1, 1);
workbook.SaveToFile("GridViewExport.xlsx", FileFormat.Version2016);
Consejo: Antes de guardar, asegúrese de que el origen de datos de su DataGridView se convierta correctamente a un DataTable. Esto garantiza que la estructura exportada coincida con el diseño de la cuadrícula de la interfaz de usuario.
Si desea aprender a crear archivos de Excel con más tipos de datos, formato y otros elementos, puede explorar el artículo Cómo Crear Archivos de Excel en C#.
Guardar Archivo de Excel como CSV o XLS en C#
Diferentes sistemas y plataformas requieren diferentes formatos de hoja de cálculo. Si bien XLSX es ahora el estándar, CSV, XLS y otros formatos siguen siendo comunes en entornos empresariales. Exportar a diferentes formatos permite que los datos de Excel se compartan, procesen o importen por diversas aplicaciones.
Ejemplo 1: Guardar Excel como CSV
CSV (Valores Separados por Comas) es un formato simple basado en texto ideal para intercambiar datos con bases de datos, aplicaciones web u otros sistemas que admiten archivos de texto sin formato.
Workbook workbook = new Workbook();
workbook.LoadFromFile("EmployeeDataExport.xlsx");
workbook.SaveToFile("Report.csv", ",", FileFormat.CSV);
Ejemplo 2: Guardar Excel como XLS (Formato Heredado)
XLS (formato Excel 97–2003) es un formato binario heredado que todavía se usa en sistemas o aplicaciones más antiguos que no admiten XLSX. Guardar en XLS garantiza la compatibilidad con los flujos de trabajo empresariales heredados.
Workbook workbook = new Workbook();
workbook.LoadFromFile("EmployeeDataExport.xlsx");
workbook.SaveToFile("Report_legacy.xls", ExcelVersion.Version97to2003);
Formatos de Hoja de Cálculo Adicionales Compatibles
Además de los formatos CSV, XLS y XLSX de uso común, la biblioteca también admite varios otros formatos de hoja de cálculo y plantilla. La siguiente tabla enumera estos formatos junto con sus valores de enumeración FileFormat correspondientes para una fácil referencia al guardar archivos mediante programación.
| Formato | Descripción | Enumeración Correspondiente (FileFormat) |
|---|---|---|
| ODS | Hoja de Cálculo OpenDocument | FileFormat.ODS |
| XLSM | Libro de Excel habilitado para macros | FileFormat.Xlsm |
| XLSB | Libro de Excel binario | FileFormat.Xlsb2007 / FileFormat.Xlsb2010 |
| XLT | Plantilla de Excel 97–2003 | FileFormat.XLT |
| XLTX | Plantilla XML abierta de Excel | FileFormat.XLTX |
| XLTM | Plantilla de Excel habilitada para macros | FileFormat.XLTM |
Estos formatos adicionales son útiles para organizaciones que trabajan con sistemas heredados, estándares de documentos abiertos o flujos de trabajo de automatización basados en macros/plantillas.
Guardar Excel como PDF o HTML en C#
En muchos casos, los archivos de Excel deben convertirse a formatos de documento o web para facilitar su publicación, impresión o uso compartido.
Exportar a PDF es ideal para informes de diseño fijo e impresión, mientras que HTML es adecuado para ver datos de Excel en un navegador web.
Ejemplo 1: Guardar Excel como PDF
El siguiente ejemplo muestra cómo guardar un libro de Excel como un archivo PDF usando C#. Esto es útil para generar informes que conservan el diseño y el formato.
Workbook workbook = new Workbook();
workbook.LoadFromFile("EmployeeDataExport.xlsx");
workbook.SaveToFile("EmployeeDataExport.pdf", FileFormat.PDF);
Aquí hay un ejemplo del archivo PDF generado después de exportarlo desde Excel:

Ejemplo 2: Guardar Excel como HTML
Este ejemplo demuestra cómo guardar un libro de Excel como un archivo HTML, lo que facilita la representación de los datos en un navegador web o la integración con aplicaciones web.
Workbook workbook = new Workbook();
workbook.LoadFromFile("EmployeeDataExport.xlsx");
workbook.SaveToFile("EmployeeDataExport.html", FileFormat.HTML);
A continuación se muestra una vista previa del archivo HTML exportado renderizado en un navegador:

Formatos de Documento y Web Adicionales Compatibles
Además de PDF y HTML, la biblioteca admite varios otros formatos amigables para documentos y web. La siguiente tabla muestra estos formatos junto con sus valores de enumeración FileFormat para una fácil referencia.
| Formato | Descripción | Enumeración Correspondiente (FileFormat) |
|---|---|---|
| XML | Datos de Excel exportados como XML | FileFormat.XML |
| Bitmap / Image | Exportar Excel como mapa de bits u otros formatos de imagen | FileFormat.Bitmap |
| XPS | Documento de especificación de papel XML | FileFormat.XPS |
| PostScript | Documento PostScript | FileFormat.PostScript |
| OFD | Formato de documento de diseño fijo abierto | FileFormat.OFD |
| PCL | Archivo de lenguaje de comandos de impresora | FileFormat.PCL |
| Markdown | Formato de archivo Markdown | FileFormat.Markdown |
Estos formatos brindan flexibilidad adicional para distribuir contenido de Excel en diferentes plataformas y flujos de trabajo, ya sea para impresión, publicación web o automatización.
Guardar un Archivo de Excel en MemoryStream en C#
En aplicaciones web o servicios en la nube, guardar archivos de Excel directamente en el disco puede no ser ideal por razones de seguridad o rendimiento. El uso de MemoryStream le permite generar archivos de Excel en la memoria y entregarlos directamente a los clientes para su descarga. Spire.XLS for .NET también admite tanto la carga como el guardado de libros de trabajo a través de MemoryStream, lo que facilita el manejo de archivos de Excel completamente en la memoria.
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
sheet.Range["A1"].Text = "Export to Stream";
using (MemoryStream stream = new MemoryStream())
{
workbook.SaveToStream(stream, ExcelVersion.Version2016);
byte[] bytes = stream.ToArray();
// Ejemplo: enviar bytes al cliente para su descarga en ASP.NET
// Response.BinaryWrite(bytes);
}
Este enfoque es particularly useful for ASP.NET, Web API, or cloud services, donde desea servir archivos de Excel dinámicamente sin crear archivos temporales en el servidor.
Abrir y Volver a Guardar Archivos de Excel en C#
En muchas aplicaciones, es posible que deba cargar un libro de Excel existente, aplicar actualizaciones o modificaciones y luego guardarlo de nuevo en el disco o convertirlo a un formato diferente. Esto es común al actualizar informes, modificar datos exportados o automatizar flujos de trabajo de archivos de Excel.
Ejemplo: Abrir y Actualizar un Archivo de Excel
El siguiente código C# carga el libro de trabajo anterior, actualiza la primera celda y guarda los cambios:
Workbook workbook = new Workbook();
workbook.LoadFromFile("EmployeeDataExport.xlsx");
Worksheet sheet = workbook.Worksheets[0];
sheet.Range["A1"].Text = "Updated Content"; // Actualizar el valor de la celda
sheet.Range["A1"].AutoFitColumns(); // Autoajustar el ancho de la columna
// Guardar el libro de trabajo actualizado
workbook.Save(); // Guarda en el archivo original
workbook.SaveToFile("UpdatedCopy.xlsx", ExcelVersion.Version2016); // Guardar como archivo nuevo
La siguiente captura de pantalla muestra la hoja de Excel actualizada después de modificar y guardar el archivo:

También puede consultar la guía detallada sobre cómo editar archivos de Excel usando C# para escenarios más avanzados.
Mejores Prácticas al Guardar Archivos de Excel
-
Evitar Sobrescribir Archivos
Verifique si el archivo de destino existe antes de guardar para evitar la pérdida accidental de datos.
-
Manejar Permisos y Rutas Correctamente
Asegúrese de que su aplicación tenga acceso de escritura a la carpeta de destino, especialmente en entornos web o en la nube.
-
Elegir el Formato Correcto
Use XLSX para compatibilidad moderna, CSV para intercambio de datos y PDF para imprimir o compartir informes.
Conclusión
Guardar archivos de Excel en C# cubre una amplia gama de operaciones, desde escribir conjuntos de datos estructurados, exportar a diferentes formatos de hoja de cálculo, convertir a PDF/HTML, hasta manejar flujos de archivos en aplicaciones web.
Con la flexibilidad que ofrecen bibliotecas como Spire.XLS for .NET, los desarrolladores pueden implementar potentes flujos de trabajo de automatización de Excel con facilidad.
Preguntas Frecuentes
P1: ¿Cómo guardo un archivo de Excel en C#?
Use SaveToFile() con la ExcelVersion o FileFormat apropiada:
workbook.SaveToFile("Report.xlsx", ExcelVersion.Version2016);
P2: ¿Cómo abro y modifico un archivo de Excel existente?
Cargue el libro de trabajo usando LoadFromFile(), realice cambios y luego guarde:
Workbook workbook = new Workbook();
workbook.LoadFromFile("ExistingFile.xlsx");
workbook.Worksheets[0].Range["A1"].Text = "Updated Content";
workbook.SaveToFile("UpdatedFile.xlsx", ExcelVersion.Version2016);
P3: ¿Cómo guardo como CSV o PDF?
Especifique el FileFormat deseado en SaveToFile():
workbook.SaveToFile("Report.csv", ",", FileFormat.CSV);
workbook.SaveToFile("Report.pdf", FileFormat.PDF);
P4: ¿Puedo guardar Excel en la memoria en lugar del disco?
Sí. Use SaveToStream() para enviar la salida a un MemoryStream, útil en aplicaciones web o en la nube:
using (MemoryStream stream = new MemoryStream())
{
workbook.SaveToStream(stream, ExcelVersion.Version2016);
byte[] bytes = stream.ToArray();
}