Crear archivo Excel desde C#
ctg | 08 Septiembre, 2008 22:33Aunque Microsoft Excel es capaz de interpretar ficheros separados por comas (*.csv), también es posible generar un fichero Excel (*.xls) desde C# utilizando Interop. De este modo, se podrán utilizar funciones como autosuma o simplemente cambiar ciertos aspectos de una determinada celda.
El único problema, es que es necesario que el ordenador tenga instalado Microsoft Office (XP, 2003 ó 2007) asegurándose que la opción ".NET Programmability support" esté seleccionada. Si se ha seleccionado instalación Completa (en Microsoft Office), no hace falta preocuparse por nada por se tuvo que instalar.
Aunque no lo he probado, pero puede ser que una versión reducida de Office (instalación mínima) junto con Redistributable Primary Interop Assemblies sea posible crear XLS desde código .NET.
En este enlace, (http://msdn.microsoft.com/en-us/library/aa159923.aspx) informa de varias formas de instalar y usar Office 2003 para usar Interop.
Para crear un fichero XLS, desde un proyecto Windows de C#, añadir una referencia a Microsoft xx.0 Object Library que la encontrarás en la pestaña COM. Si utilizas Microsoft Office XP ó 2003, la versión será la 11.0. En cambio, con Office 2007, la versión es la 12.0. Es puede ser una fuente de problemas y por ello es importante prestar atención a la versión porque ciertos tipos no son compatibles unos con otros.
Dentro del espacio de nombres Microsoft.Office.Interop.Excel se encuentra todo lo necesario para poder crear el fichero Excel. Dejo aquí un pequeño ejemplo de una simple clase para ayudarme a crear ficheros XLS, para poder "acordarme" en un futuro...
using System;
using Microsoft.Office.Interop;
using System.Reflection;
using MyExcel = Microsoft.Office.Interop.Excel;
// Use this class to create a Microsoft Excel (*.xls) file
// Please, read this notes
// Microsoft Office XP, 2003 or 2007 must be installed on target computer to create *.xls file.
// VERY IMPORTANT: Office Primary Interop Assemblies (PIA) must be selected on Microsoft Office installation. Use "Complete installation" in Office setup
// http://msdn.microsoft.com/en-us/library/kh3965hw(VS.80).aspx
//
// Add Microsoft Excel Library xx.0 (Microsoft.Office.Interop.Excel.dll) reference on COM tab
// Also VERY IMPORTANT
// Double check Microsoft Excel Library version. 11.0 = Office 2003, 12.0 = Office 2007. Certain types are NOT compatibles!!!
public class ExcelFile : IDisposable
{
MyExcel.Application theExcel = null;
MyExcel.Workbook theWorkbook = null;
string theExcelFileName;
public ExcelFile(string fileName)
{
theExcel = new MyExcel.Application();
theWorkbook = theExcel.Workbooks.Add(System.Reflection.Missing.Value);
theExcelFileName = fileName;
}
~ExcelFile()
{
Dispose(false);
}
public void AddSheet(string sheetName)
{
var newSheet = (MyExcel.Worksheet)theWorkbook.Sheets.Add(Missing.Value, Missing.Value, 1, MyExcel.XlSheetType.xlWorksheet);
newSheet.Name = sheetName;
}
public void SetCell(int row, int column, string text)
{
SetCell(null, row, column, text);
}
public void SetCell(string sheetName, int row, int column, string text)
{
MyExcel.Worksheet theSheet = (null == sheetName ? (MyExcel.Worksheet) theWorkbook.ActiveSheet : (MyExcel.Worksheet)theWorkbook.Sheets[sheetName]);
theSheet.Cells[row, column] = text;
}
public void Close()
{
Dispose(true);
}
private void Dispose(bool disposing)
{
if(disposing)
{
theWorkbook.SaveAs(theExcelFileName, MyExcel.XlFileFormat.xlExcel7, Missing.Value, Missing.Value, Missing.Value, Missing.Value, MyExcel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, null);
theWorkbook.Close(false, Missing.Value, Missing.Value);
theExcel.Quit();
}
}
void IDisposable.Dispose()
{
Dispose(true);
}
}
Posted in
C# .
Comentario: (5).
Retroenlaces:(0).
Enlace
«Next post |
Previous post»
1. DANIEL MORENO | 09/10,2008 at 01:07
Cristobal muy buen ejemplo... ya lo utilice y me sirvio de maravilla. Le agregue un par de cosas simples para que el usuario escogiera la ruta y para que lo abriera despues de guardarlo. Pero me surge una duda con respecto a añadir mas hojas....¿ Que es var en el metodo AddSheet. Acaso es una instancia de
"theExcel.Worksheet" ?.
2. ctg | 09/10,2008 at 09:28
Hola Daniel:
Creo que un ejemplo, lo verás más rápido y lo entenderás mejor. Estas 2 líneas hacen exactamente lo mismo.
var newSheet = (MyExcel.Worksheet)theWorkbook.Sheets.Add(Missing.Value, Missing.Value, 1, MyExcel.XlSheetType.xlWorksheet);
MyExcel.Worksheet newSheet = (MyExcel.Worksheet)theWorkbook.Sheets.Add(Missing.Value, Missing.Value, 1, MyExcel.XlSheetType.xlWorksheet);
Como puedes ver, la 2ª opción es mucho más larga. En cambio, en la palabra "var" indica al compilador que averigüe el mismo de que tipo va a ser la variable.
Aquí encontrarás una explicación más detallada:http://www.mediacenter.vb-mundo.com/index.php?option=com_content&task=view&id=196
Saludos.
3. Gabriel Fabres | 11/14,2008 at 19:26
Me sirvio Muchisimo la informacion que publicaste.
Saludos
4. Abel | 07/22,2009 at 23:24
Chido paro may!!!
Gracias!!!
5. Andres B | 10/28,2013 at 14:26
Estoy viendo tu post porque tengo que crear un archivo de excel en donde envio una informacion y constantemente la estoy actualizando, vi tu post pero la verdad aun no logro entenderlo, no se si me puedas ayudar, te agradeceria, lo tengo creado pero no se como ejecutarlo.