уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

В посте «Статистика WebDelphi за всё время его существования» я упоминал о том, что мой блог довольно часто посещают люди в поисках информации по работе с Excel в Delphi. Для меня это было, признаться, несколько странно, т.к. в плане поисковых запросов на свой блог я рассчитывал больше на другие запросы, но, как говориться – что есть то есть. Естественно, придя в блог некоторые читатели просто получают необходимую информацию и благополучно уходят, а некоторые задают вопросы в надежде получить от меня ответ.

Коме-то я отвечаю тут же в посте, а некоторые вопросы, ответ на который превышает размер самого вопроса – выношу в отдельный пост, чтобы и вопрошающему была пища для размышлений и другим ищущим было, что почитать. Вот этот пост такого плана – ответ на вопрос читателя.

Прежде всего я сразу скажу, какая информация использовалась при написании этой статьи. Итак

План статьи:

При написании статьи я использовал в первую очередь MSDN – тут есть всё, чтобы написать приложение для работы с Excel практически любой сложности, главное – вникать. Второй источник, который использовался – книга Программирование документов и приложений MS Office в Delphi о которой я упоминал, когда рассматривал свою книжную полку. Если Вы активно используете в разработке своих программ связку Delhi+Excel или Delphi+Word я рекомендую Вам купить эту книгу – как справочник она иногда оказывается просто не заменима.

Теперь плавно переходим к теме поста – работа с примечаниями в Excel. Для написания всех примеров в статье я использовал:

Если Вы работаете в более старых версиях офиса и Delphi, то проблем с воспроизведением примеров возникнуть вроде бы не должно, т.к. в примерах используются методы и свойства доступные ещё в MS Office 2003.

Также, чтобы избежать лишних вопросов “А это что такое?” говорю, что функции запуска Excel и добавления рабочей книги я брал из самого первого своего поста про Excel – вот тут.

Добавление/удаление примечаний

Для добавления нового примечания в ячейку листа Excel необходимо воспользоваться методом AddComment, который имеется у объекта Range (диапазон) о котором я рассказывал тут.

Создадим новое приложение в Delphi, на главную форму бросим всего одну кнопку TButton и напишем у неё следующий обработчик:

procedure TForm8.CommentBtnClick(Sender: TObject);
var MyRange: OleVariant;
begin
  if RunExcel then //Excel запущен
    begin
      if AddWorkBook then //добавили рабочую книгу
        begin
          MyRange:=MyExcel.ActiveSheet.Range['A1'];//получили ссылку на ячейку
          MyRange.AddComment('Comment Text');
          MyExcel.Visible:=true;
        end;
    end;
end;

 

Результатом выполнения этой процедуры будет новое примечание в ячейке A1 листа книги Excel:

excel_comment

Для того, чтобы удалить примечание достаточно воспользоваться методом ClearComments у объекта Range, например так:

MyRange.ClearComments;

 

Ну, а для того, чтобы прочитать текст примечания из ячейки, необходимо воспользоваться свойством Text объекта Comment следующим образом:

ShowMessage(MyRange.Comment.Text)

 

И на этом этапе мы подходим непосредственно к работе с объектом Comment.

Работа с объектом Comment. Украшаем примечания.

Рассмотрим кратко набор свойств объекта Comment:

Application — указатель на объект приложения Excel. Свойство только для чтения.

Author – строка, содержащая имя автора примечания. Свойство только для чтения.

Creator – 32-битное число идентификатор приложения в котором был создан объект. Свойство только для чтения.

Parent – родительский объект. В нашем случае родителем будет диапазон. Свойство только для чтения.

Shape – объект Shape, связанный с объектом Comment.

Visible – возвращает или устанавливает значение boolean, определяющее видимость примечания на экране.

Как видите, для манипуляции со свойствами Comment у нас в распоряжении остается всего два свойства – Visible и Shape.

Visible нам не интересен, а вот с Shape разберемся по-подробнее.

Объект Shape предоставляет нам все возможности для работы с графикой будь то просто изменение цвета, стиль линий обрамления, вставка картинки или даже другого OLE-объекта. Разбираться со всеми свойствами и методами этого объекта мы сегодня не будем, а расмотрим лишь те, которые нам могут понадобиться для украшения примечаний.

Во-первых, научимся раскрашивать примечания в разные цвета. Для этого необходимо воспользоваться свойством Fill объекта. Это свойство дает нам доступ к объекту с помощью которого можно делать много чего с заливкой, в том числе и менять цвет вот так:

procedure TForm8.CommentBtnClick(Sender: TObject);
var MyRange: OleVariant;
begin
  if RunExcel then //Excel запущен
    begin
      if AddWorkBook then //добавили рабочую книгу
        begin
          MyRange:=MyExcel.ActiveSheet.Range['A1'];//получили ссылку на ячейку
          MyRange.ClearComments;//почистили на всякий случай комментарии
          MyRange.AddComment('Comment Text');
          {задаем новый цвет фона}
          MyRange.Comment.Shape.Fill.ForeColor.RGB:=RGB(255, 0, 0);
          MyExcel.Visible:=true;
        end;
    end;
end;

 

В результате получим примечание следующего вида:

excel_comment2

Ну, разукрасить в разные цвета примечания на листе не так уж и креативненько :) Попробуем пройти немного дальше в наших исследованиях нового объекта и разберемся с тем как вставить картинку в примечание вместо (или вместЕ) с фона.

Если внимательно просмотреть свойства и методы объекта Shape, то можно обнаружить среди них метод UserPicture – этот метод и используется для того, чтобы вставить в Shape картинку пользователя. Формат в данном случае значения не имеет, например, в приведенном ниже код в примечание вставляется картинка в формате gif:

MyRange.Comment.Shape.Fill.UserPicture(ExtractFilePath(Application.ExeName)+'2.gif');

 

Результат представлен на рисунке ниже:

excel_comment3

Отмечу, что картинка растягивается по всему объекту Shape, т.е. если вы планируете вставлять в примечания картинки определенного размера – убедитесь, что они выглядят в примечании прилично :)

Собственно, на этом ответ на вопрос читателя можно считать оконченным. Сегодня мы научились:

  • вставлять/удалять/читать примечания
  • изменять фоновый цвет примечания
  • вставлять фоновый рисунок в примечания
Скачать исходник: Исходники —> Excel в Delphi

Книжная полка

Автор: Юрий Магда
Название:Разработка приложений Microsoft Office 2007 в Delphi
Описание Описаны общие подходы к программированию приложений MS Office. Даны программные методы реализации функций MS Excel, MS Word, MS Access и MS Outlook в среде Delphi.
Купить на ЛитРес
0 0 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
8 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
JayDi
26/06/2011 11:52

Как изменить размер блока с примечанием в Excel:
Range.Comment.Shape.ScaleWidth(4, 0, 0);
Range.Comment.Shape.ScaleHeight(6, 0, 0);

xpert13
28/06/2011 03:03

Почему текст постов не отображается? У меня все статьи выглядят следующим образом:comment image

xpert13
28/06/2011 13:37

Уже нормально, не знаю, что было

052
052
24/04/2012 15:40

можно ли в excel создать примечание для таблицы данных, которое в зависимости от вводимого значения в ячейку таблицы выдавало нужное примечание?
или по другому — в ячейки вводятся коды, нужно что бы при анализе во всплывающих окнах отображалась их расшифровка?
Пример — 1т23, расшифровка: «1» — по графику; «т» — состояние: «требует прнятия мер»; «23» — дефект: «2» — центровка, «3» — крепления.

052
052
24/04/2012 18:18

что ж спасибо за оперативность

NX
NX
20/12/2013 18:58

Не знаю, отвечаете ли Вы ещё, но возникла проблема. При попытке прочитать текст примечания из ячейки, в которой его нет, возникает ошибка. Как проверить ячейку на наличие комментария?