Si necesitais darle un poco de vida y colorido a un fichero en formato .csv de Excel. Quizas os sirva este ejemplo. Se trata de ejecutar una macro previamente grabada para darle un nuevo formato a la hoja Excel (colorear columnas, cambiar de tamaño las letras, crear gráficos, etc…) para despues grabar el resultado en formato .xls. Comparto este código escrito en c# por si puede ser útil.
Requisito 1: antes de ejecutar el código es importante habilitar la opción «Confiar en el acceso a proyectos de Visual Basic» en la pestaña «Editores de confianza» que se encuentra en Herramientas>Macro> Seguridad.
Requisito 2: debeis tener instaladas las PIAS para Excel.
Código:
using Microsoft.Office.Interop.Excel;
using Microsoft.Vbe.Interop;
.
.
public static class MacroExcel
{
/*
* ejecuta macro sobre un csv y devuelve path del xls resultante
*/ public static string abrirCsvEjecutarMacroyGrabarXls(string pathFicheroCsv, string pathMacro, string nombreFuncionMacro)
{
object missing = System.Reflection.Missing.Value;
string pathXls = Path.ChangeExtension(pathFicheroCsv, "xls");
//
// abrir csv
//
ApplicationClass excel = new ApplicationClass();
Workbooks books = excel.Workbooks;
_Workbook book = books.Open(pathFicheroCsv, missing, missing, missing, missing, missing, missing, missing, missing,
missing, missing, missing, missing, missing, missing);
try
{
//
// abrir macro
//
VBComponentClass vbComp = (VBComponentClass)excel.VBE.ActiveVBProject.VBComponents.Add(vbext_ComponentType.vbext_ct_StdModule);
vbComp.CodeModule.AddFromFile(pathMacro);
//
// ejecutar macro
//
excel.Run(nombreFuncionMacro, missing, missing, missing, missing, missing, missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing, missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing, missing, missing,
missing, missing, missing);
//
// eliminar la macro del xls
//
vbComp.CodeModule.DeleteLines(1, vbComp.CodeModule.CountOfLines);
//
// grabar xls
//
File.Delete(pathXls);
book.SaveAs(pathXls, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, missing,
missing, missing, missing, XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing);
}
finally
{
books.Close();
}
return pathXls;
}
}