Работа с представлениями
Чтение данных конкретного представления
Представления обеспечивают графическое представление проекта или его элементов (ресурсы, задачи и т.д.). Например, Gantt Chart наглядно показывает ход выполнения проекта и планы:
Microsoft Project позволяет пользователям настраивать различные свойства представлений, такие как стили полос, сетка, линии прогресса, информация о шкале времени и параметры страницы. Все эти свойства хранятся в файле MPP. С помощью Aspose.Tasks for .NET вы можете программно получить к ним доступ и изменять их через View class or its derived classes: GanttChartView, TaskUsageView, и ResourceUsageView.
1Project project = new Project("New Project.mpp");
2
3GanttChartView view = project.Views.ToList()[0] as GanttChartView;
4Console.WriteLine("Is Bar Rounding: " + view.BarRounding);
5Console.WriteLine("Show Bar Splits? : " + view.ShowBarSplits);
6Console.WriteLine("Show Drawings? : " + view.ShowDrawings);
7Console.WriteLine("Roll Up Gantt Bars? " + view.RollUpGanttBars);
8Console.WriteLine("Hide Rollup Bars When Summary Expa0nded: " + view.HideRollupBarsWhenSummaryExpanded);
9Console.WriteLine("Bar Size: " + view.BarSize.ToString());
10Console.WriteLine("Bar Style: " + view.BarStyles.Count);
11Console.WriteLine("************************ RETREIVING BAR STYLES INFORMATION FROM THE VIEW *********************");
12int i = 0;
13foreach (GanttBarStyle barStyle in view.BarStyles)
14{
15 Console.WriteLine("Name: " + barStyle.Name);
16 Console.WriteLine("ShowFor: " + barStyle.ShowFor.ToString());
17 Console.WriteLine("Row: " + barStyle.Row);
18 Console.WriteLine("From: " + barStyle.From);
19 Console.WriteLine("To: " + barStyle.To);
20 Console.WriteLine("MiddleShape: " + barStyle.MiddleShape);
21 Console.WriteLine("MiddleShapeColor: " + barStyle.MiddleShapeColor);
22 Console.WriteLine("StartShape: " + barStyle.StartShape);
23 Console.WriteLine("EndShape: " + barStyle.EndShape);
24 Console.WriteLine("EndShapeColor: " + barStyle.EndShapeColor);
25 i++;
26}
27
28Console.WriteLine("Grid Lines Count: " + view.Gridlines.Count);
29Gridlines gridlines = view.Gridlines[0];
30Console.WriteLine("************************ RETREIVING GRID LINES PROPERTIES *********************");
31Console.WriteLine("GridLine Type: " + gridlines.Type);
32Console.WriteLine("Gridlines Internval: " + gridlines.Interval);
33Console.WriteLine("Gridlines Color: " + gridlines.NormalColor);
34Console.WriteLine("Gridlines NormalPattern: " + gridlines.NormalPattern);
35Console.WriteLine("Gridlines IntervalPattern: " + gridlines.IntervalPattern);
36Console.WriteLine("Gridlines IntervalColor: " + gridlines.IntervalColor);
37Console.WriteLine("************************ RETREIVING PROGRESS LINES PROPERTIES *********************");
38Console.WriteLine("ProgressLInes.BeginAtDate: ", view.ProgressLines.BeginAtDate);
39Console.WriteLine("ProgressLines.isBaselinePlan: " + view.ProgressLines.IsBaselinePlan);
40Console.WriteLine("ProgressLines.DisplaySelected: " + view.ProgressLines.DisplaySelected);
41Console.WriteLine("ProgressLines.SelectedDates.Count: " + view.ProgressLines.SelectedDates.Count);
42Console.WriteLine("ProgressLines.SelectedDates[0]: " + view.ProgressLines.SelectedDates[0]);
43Console.WriteLine("ProgressLines.SelectedDates[1]: " + view.ProgressLines.SelectedDates[1]);
44Console.WriteLine("ProgressLines.SelectedDates[2]: " + view.ProgressLines.SelectedDates[2]);
45Console.WriteLine("ProgressLines.DisplayAtRecurringIntervals: " + view.ProgressLines.DisplayAtRecurringIntervals);
46Console.WriteLine("ProgressLines.RecurringInterval.Interval: " + Interval.Weekly, view.ProgressLines.RecurringInterval.Interval);
47Console.WriteLine("ProgressLines.RecurringInterval.WeeklyDays.Count" + view.ProgressLines.RecurringInterval.WeeklyDays.Count);
48Console.WriteLine("Recurring Interval.WeeklyDays: " + view.ProgressLines.RecurringInterval.WeeklyDays);
49Console.WriteLine("Recurring Interval.DayType.Saturday: " + view.ProgressLines.RecurringInterval.WeeklyDays);
50Console.WriteLine("Recurring Interval.DayType.Sunday: " + view.ProgressLines.RecurringInterval.WeeklyDays);
51Console.WriteLine("ProgressLines.ShowDate: " + view.ProgressLines.ShowDate);
52Console.WriteLine("ProgressLines.ProgressPointShape: " + view.ProgressLines.ProgressPointShape.ToString());
53Console.WriteLine("ProgressLines.ProgressPointColor: " + view.ProgressLines.ProgressPointColor);
54Console.WriteLine("ProgressLines.LineColor: " + Color.Red, view.ProgressLines.LineColor);
55Console.WriteLine("ProgressLines.LinePattern: " + LinePattern.Solid, view.ProgressLines.LinePattern);
56Console.WriteLine("ProgressLines.OtherProgressPointShape: " + view.ProgressLines.OtherProgressPointShape.ToString());
57Console.WriteLine("ProgressLines.OtherProgressPointColor: " + view.ProgressLines.OtherProgressPointColor.ToString());
58Console.WriteLine("ProgressLines.OtherLineColor: " + view.ProgressLines.OtherLineColor);
59Console.WriteLine("************************ BOTTOM TIMESCALE IFORMATION ******************");
60Console.WriteLine("BottomTimescaleTier.Count:" + view.BottomTimescaleTier.Count);
61Console.WriteLine("BottomTimescaleTier.Unit:" + TimescaleUnit.Days, view.BottomTimescaleTier.Unit.ToString());
62Console.WriteLine("BottomTimescaleTier.UsesFiscalYear: " + view.BottomTimescaleTier.UsesFiscalYear);
63Console.WriteLine("BottomTimescaleTier.Alignment: " + StringAlignment.Center, view.BottomTimescaleTier.Alignment.ToString());
64Console.WriteLine("BottomTimescaleTier.ShowTicks: " + view.BottomTimescaleTier.ShowTicks.ToString());
65Console.WriteLine("BottomTimescaleTier.Label:" + DateLabel.DayDi, view.BottomTimescaleTier.Label);
66Console.WriteLine("************************ MIDDLE TIMESCALE IFORMATION ******************");
67Console.WriteLine("MiddleTimescaleTier.Count:" + view.MiddleTimescaleTier.Count);
68Console.WriteLine("MiddleTimescaleTier.Unit:" + TimescaleUnit.Days, view.MiddleTimescaleTier.Unit.ToString());
69Console.WriteLine("MiddleTimescaleTier.UsesFiscalYear: " + view.MiddleTimescaleTier.UsesFiscalYear);
70Console.WriteLine("MiddleTimescaleTier.Alignment: " + StringAlignment.Center, view.MiddleTimescaleTier.Alignment.ToString());
71Console.WriteLine("MiddleTimescaleTier.ShowTicks: " + view.MiddleTimescaleTier.ShowTicks.ToString());
72Console.WriteLine("MiddleTimescaleTier.Label:" + DateLabel.DayDi, view.MiddleTimescaleTier.Label);
73Console.WriteLine("************************ TOP TIMESCALE IFORMATION ******************");
74Console.WriteLine("TopTimescaleTier.Unit:" + TimescaleUnit.Days, view.TopTimescaleTier.Unit.ToString());
75Console.WriteLine("TopTimescaleTier.UsesFiscalYear: " + view.TopTimescaleTier.UsesFiscalYear);
76Console.WriteLine("TopTimescaleTier.Alignment: " + StringAlignment.Center, view.TopTimescaleTier.Alignment.ToString());
77Console.WriteLine("TopTimescaleTier.ShowTicks: " + view.TopTimescaleTier.ShowTicks.ToString());
78Console.WriteLine("TopTimescaleTier.Label: ", view.TopTimescaleTier.Label.ToString());
В этом фрагменте кода напрямую обращаются к представлению Gantt Chart, что позволяет читать и работать с его сохранёнными свойствами, такими как шкала времени, форматирование или правила отображения.
Показ выбранных пользовательских полей в представлении Gantt Chart
К задачам в проекте можно добавить расширенные атрибуты. Иногда требуется автоматически отображать определённые пользовательские поля в представлении Gantt Chart, а не выбирать их вручную. Следующий код показывает, как настроить таблицу проекта для достижения этого.
1Project project = new Project("New Project.mpp");
2
3// Create a new project task
4Task task = project.RootTask.Children.Add("New Activity");
5
6// Define new custom attribute
7ExtendedAttributeDefinition text1Definition = ExtendedAttributeDefinition.CreateTaskDefinition(ExtendedAttributeTask.Text1, null);
8project.ExtendedAttributes.Add(text1Definition);
9// Add custom text attribute to created task.
10task.ExtendedAttributes.Add(text1Definition.CreateExtendedAttribute("Activity attribute"));
11
12// Customize table by adding text attribute field
13TableField attrField = new TableField();
14attrField.Field = Field.TaskText1;
15attrField.Width = 20;
16attrField.Title = "Custom attribute";
17attrField.AlignTitle = StringAlignment.Center;
18attrField.AlignData = StringAlignment.Center;
19Table table = project.Tables.ToList()[0];
20table.TableFields.Insert(3, attrField);
21
22project.Save("ConfigureTheGantChartViewShowSelectedColumnFields_out.mpp", new MPPSaveOptions() { WriteViewData = true });
Этот подход обеспечивает появление выбранных пользовательских полей по умолчанию в экспортируемом представлении MPP.
Настройка меток уровней шкалы времени в соответствии с текущими региональными настройками
Aspose.Tasks for .NET позволяет настраивать метки уровней шкалы времени в соответствии с системными CultureInfo
. DateTimeConverter
делегат предоставляет контроль над тем, как даты отображаются в уровнях шкалы времени.
1Project project = new Project("New Project.mpp");
2
3// Add task links
4project.TaskLinks.Add(project.RootTask.Children.Add("Task 1"), project.RootTask.Children.Add("Task 2"));
5
6GanttChartView view = (GanttChartView)project.DefaultView;
7
8// This code is added for better visualization
9view.MiddleTimescaleTier.Unit = TimescaleUnit.Months;
10project.Set(Prj.TimescaleStart, new DateTime(2012, 8, 6));
11
12// Customize middle tier dates
13view.MiddleTimescaleTier.DateTimeConverter =
14date => new[] { "Янв.", "Фев.", "Мар.", "Апр.", "Май", "Июнь", "Июль", "Авг.", "Сен.", "Окт.", "Ноя.", "Дек." }[date.Month - 1];
15project.Save("CustomizeTimescaleTierLabels_out.pdf", SaveFileFormat.PDF);
Этот фрагмент показывает, как динамически форматировать метки шкалы времени, обеспечивая соблюдение локализованных форматов даты в экспортируемых представлениях проекта.
Настройка параметров шкалы времени для конкретного представления
Класс TimescaleTier позволяет разработчикам задать точные настройки шкалы времени для представления проекта. Пример ниже показывает, как отрегулировать нижний и средний уровни и отобразить проект с этими настройками.
1 Project project = new Project();
2 GanttChartView view = (GanttChartView)project.Views.First(v => v.Name == "&Gantt Chart");
3
4 // Configure timescale tiers
5 view.BottomTimescaleTier.Count = 2;
6 view.BottomTimescaleTier.ShowTicks = false;
7 view.BottomTimescaleTier.Unit = TimescaleUnit.Days;
8 view.BottomTimescaleTier.Label = DateLabel.DayDdd;
9
10 view.MiddleTimescaleTier.Count = 1;
11 view.MiddleTimescaleTier.Unit = TimescaleUnit.Weeks;
12 view.MiddleTimescaleTier.Label = DateLabel.WeekDddDd;
13
14 // Save with custom timescale settings
15 PdfSaveOptions saveOptions = new PdfSaveOptions();
16 saveOptions.ViewSettings = view;
17 saveOptions.Timescale = Timescale.DefinedInView;
18 project.Save("SetTimeScaleCount_out.pdf", saveOptions);
Поддержка форматирования текста
Форматирование текста можно применить к представлениям Gantt Chart с помощью TableTextStyle
класса. Следующий код демонстрирует, как задать собственное форматирование текста:
1Project project = new Project("New Project.mpp");
2GanttChartView ganttChartView = project.Views.ToList()[0] as GanttChartView;
3if (ganttChartView != null)
4{
5 ganttChartView.TableTextStyles.Clear();
6 ganttChartView.TableTextStyles.Add(new TableTextStyle(1) { Color = Color.Red, Field = Field.TaskName });
7 ganttChartView.TableTextStyles.Add(new TableTextStyle(1) { Color = Color.Gray, Field = Field.TaskDurationText });
8 ganttChartView.TableTextStyles.Add(new TableTextStyle(2) { Color = Color.Blue, FontStyle = FontStyle.Bold | FontStyle.Italic | FontStyle.Underline });
9}
Эта функция полезна для выделения ключевых полей или улучшения читаемости экспортируемых документов проекта.
Сохранение MPP с использованием конкретного представления проекта
Aspose.Tasks позволяет сохранять файл MPP в графические форматы, используя конкретное представление, определённое в проекте. Эта функция удобна, когда существует несколько представлений, и нужно экспортировать только одно из них.
1 Project project = new Project("TestViews.mpp");
2 var view = project.Views.First(v => v.Name == "Customized Resource &Sheet");
3 view.PageInfo.PageSettings.IsPortrait = false;
4
5 PdfSaveOptions saveOptions = new PdfSaveOptions();
6 saveOptions.ViewSettings = view;
7 project.Save("output.pdf", saveOptions);
Работа со стилями полос в представлении Gantt Chart
Представление Gantt Chart поддерживает как стили полос, специфичные для задач, так и стили по категориям.
Следующий код показывает, как изменить их для лучшей визуализации.
1 Project project = new Project("TestGanttChartView.mpp");
2 var ganttChartView = (GanttChartView)project.Views.First(v => v.Name == "Gantt &Chart");
3
4 PdfSaveOptions saveOptions = new PdfSaveOptions();
5 saveOptions.ViewSettings = ganttChartView;
6 saveOptions.Timescale = Timescale.DefinedInView;
7
8 // Modify custom bar styles
9 foreach (GanttBarStyle ganttBarStyle in ganttChartView.CustomBarStyles)
10 {
11 if (ganttBarStyle.ShowForTaskUid == 11)
12 {
13 ganttBarStyle.LeftField = Field.TaskName;
14 ganttBarStyle.InsideBarTextConverter = task => "Hours rem.: " +
15 (int)task.Get(Tsk.RemainingWork).TimeSpan.TotalHours;
16 }
17 }
Заключение
Aspose.Tasks for .NET предоставляет широкие возможности для работы с представлениями проекта.
Быстрые ссылки
- Печать страниц проекта в отдельные файлы
- Удаление промежутка между списком задач и нижним колонтитулом
- Отображение заметок при конвертации представлений проекта
Часто задаваемые вопросы
В: Нужно ли устанавливать Microsoft Project, чтобы работать с представлениями?
- Нет. Aspose.Tasks for .NET работает независимо от Microsoft Project.
В: Могу ли я настроить, какие поля отображаются в Gantt Chart?
- Да. Вы можете настроить таблицы так, чтобы выбранные пользовательские поля отображались автоматически.
В: Поддерживает ли Aspose.Tasks локализованные метки шкалы времени?
- Да. Метки уровней шкалы времени можно настроить в соответствии с текущей
CultureInfo
.
В: Возможно ли экспортировать только одно представление из файла проекта?
- Да. Вы можете выбрать конкретное представление и экспортировать его в форматы PDF, изображения или HTML.
В: Можно ли программно настраивать стили полос в Gantt Chart?
- Да. Как стили полос, специфичные для задач, так и стили по категориям можно изменить через API.