Interoperabilidad de Microsoft Office Project en .NET

4. October 2009 11:24 by Oscar.SS in Desarrollo Office  //  Tags:   //   Comments (0)

En las últimas semanas en el trabajo he tenido que pelearme con una librería que en mí humilde opinión no es muy amigable de utilizar y por desgracia no existe apenas documentación y la que existe es muy pobre. Se trata de importar y exportar datos de las planificaciones de proyectos desde nuestras aplicaciones a Microsoft Office Project y viceversa.

En Visual Studio 2008 ya existen tipos de proyectos para interoperabilidad con Office pero si estáis trabando en el Framework 1.x  tendréis que descargaros un paquete de instalación que contiene las DLLs para la interoperabilidad con Microsoft Office 2003.

http://www.microsoft.com/downloads/details.aspx?familyid=3c9a983a-ac14-4125-8ba0-d36d67e0f4ad&displaylang=en

Para ver las especificaciones, instrucciones de instalación y demás información ojear este enlace:

http://msdn.microsoft.com/en-us/library/aa188781(office.10).aspx

 

Una vez instaladas las DLLs deberéis de añadir en vuestro proyecto referencias al  siguiente componente:

Ahora dejo algunos ejemplos de código con comentarios en cada linea. ¡Espero que os sirva de ayuda!. 

 

//Crear una aplicación de tipo Project para EXPORTAR datos desde nuestra aplicación.
ApplicationClass Aplicacion = new ApplicationClass();
 
//Aplicacion.AppMaximize(); --> Opcional
 
//Abrir la aplicación.
Aplicacion.FileNew(Missing.Value, Missing.Value, Missing.Value, Missing.Value);
 
//Crear un archivo project.
Project Proyecto = Aplicacion.ActiveProject;
 
//Cambiar el calendario para que los fines de semana sean laborable.
Aplicacion.BaseCalendarEditDays("Estándar", Missing.Value, Missing.Value, PjWeekday.pjFriday, true, Missing.Value, Missing.Value,
"Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value);
 
Aplicacion.BaseCalendarEditDays("Estándar", Missing.Value, Missing.Value, PjWeekday.pjMonday, true, Missing.Value, Missing.Value,
"Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
Missing.Value, Missing.Value);
 
Aplicacion.BaseCalendarEditDays("Estándar", Missing.Value, Missing.Value, PjWeekday.pjSaturday, true, Missing.Value, Missing.Value,
"Missing.Value, Missing.Value,Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value);
 
Aplicacion.BaseCalendarEditDays("Estándar", Missing.Value, Missing.Value, PjWeekday.pjSunday, true, Missing.Value, Missing.Value,
"Missing.Value, Missing.Value,Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
Missing.Value, Missing.Value);
 
Aplicacion.BaseCalendarEditDays("Estándar", Missing.Value, Missing.Value, PjWeekday.pjThursday, true, Missing.Value, Missing.Value,
"Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
Missing.Value, Missing.Value);
 
Aplicacion.BaseCalendarEditDays("Estándar", Missing.Value, Missing.Value, PjWeekday.pjTuesday, true, Missing.Value, Missing.Value,
"Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
Missing.Value, Missing.Value);
 
Aplicacion.BaseCalendarEditDays("Estándar", Missing.Value, Missing.Value, PjWeekday.pjWednesday, true, Missing.Value, Missing.Value, 
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
Missing.Value, Missing.Value);"
 
//Añadir las tareas.
//Las tareas pueden tener a su vez subTareas y estas deben ser declaradas antes.
//subLine = Linea después de la que se quiere insertar la subTarea.
Task subTarea = Proyecto.Tasks.Add("NombreSubTarea", subLine);
subTarea.Start = "10/10/2009";
subTarea.Finish = "12/10/2009";
subTarea.AppendNotes("Nota adjunta a la subTarea");
 
//Añadimos los recursos asignadas a subTarea.
Resource recurso = Proyecto.Resources.Add("NombreRecurso", subLine);
subTarea.Assignments.Add(subTarea.ID, recurso.ID, obj.ocupacion);
 
Task subTarea2 = Proyecto.Tasks.Add("NombreSubTarea2", subLine + 1);
subTarea2.Start = "12/10/2009";
subTarea2.Finish = "14/10/2009";
subTarea2.AppendNotes("Nota adjunta a la subTarea2");
 
//Añadimos la tarea padre.
//line = Linea después de la que se quiere insertar la subTarea.
Task tareaPadre = Proyecto.Tasks.Add("NombreTareaPadre", line);
tareaPadre.Start = "10/10/2009";
tareaPadre.Finish = "14/10/2009";
tareaPadre.AppendNotes("Nota adjunta a la Tarea");
 
//Indicar cuales son las tareas hijo de tareaPadre;
subTarea.OutlineIndent();
subTarea2.OutlineIndent();
 
//Añadir diagrama de Gantt.
Aplicacion.GanttBarFormat(tareaPadre.ID, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,Missing.Value, 
Microsoft.Office.Interop.MSProject.PjColor.pjGreen, Missing.Value, Missing.Value,Missing.Value, Missing.Value, Missing.Value, 
Missing.Value, Missing.Value, Missing.Value,Missing.Value, Missing.Value);
 
//Salvar y Cerrar los recuersos abiertos.
Proyecto.SaveAs(ruta, Microsoft.Office.Interop.MSProject.PjFileFormat.pjMPP, Type.Missing, Type.Missing, Type.Missing,Type.Missing,
 Type.Missing, Type.Missing, Type.Missing, "MSProject.mpp.9", Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing);
 
//Si estamos IMPORTANDO datos deberemos sustituir la instrución anterior por...
//Aplicacion.FileClose(Microsoft.Office.Interop.MSProject.PjSaveType.pjDoNotSave, true);
 
//Cerrar la aplicación.
Aplicacion.Quit(Microsoft.Office.Interop.MSProject.PjSaveType.pjDoNotSave);
 

Recent Comments

Comment RSS

Month List