Работая с объектной моделью Excel столкнулся с такой проблемой:
Создаю график, назначаю ряды (Series). Далее у 3х из шести Series включаю отображение подписей DataLabel.
- Код: Выделить всё
ChartObjects('chart1").Chart.SeriesCollection(..).Points(..).DataLabel.Position = Excel.XlDataLabelPosition.xlLabelPositionRight
Далее, в связи со специфичной задачей, настраиваю положение надписи каждой точки Point в коллекции DataLabel относительно друг друга, так чтобы они не пересекались друг с другом на графике.
Но тут такой момент, что пока Excel не отрисует эти подписи на графике и не настроит их положении, работать с ними нельзя, так как часть из них еще не создана, другие имеют пока еще не верные координаты.
При том при всем заставить график их отрисовать немедленно и ожидать завершения этой операции с помощью объектной модели и предоставляемых ею методов нельзя.
Единственное пока работающее решение которое я применил это использование
1. функции экспорта Chart в файл (заставляет график "начинать" отрисоваться немедленно)
2. делаю задержку, чтобы подождать отрисовку точек и назначения им соответствующих свойств - Sleep(1000) - эксперементальное значение
В итоге получаю 3 графика на листе x (до 50 листов) ~ 3x50x1000 = 150 секунд простоя. Что в целом очень критично для быстродействия (+ ко времени накручивается работа с COM).
Может кто знает как отловить окончание отрисовки графика, были бы эвенты у Chart (Draw, Redraw, Paint)?