В посте «Статистика WebDelphi за всё время его существования» я упоминал о том, что мой блог довольно часто посещают люди в поисках информации по работе с Excel в Delphi. Для меня это было, признаться, несколько странно, т.к. в плане поисковых запросов на свой блог я рассчитывал больше на другие запросы, но, как говориться – что есть то есть. Естественно, придя в блог некоторые читатели просто получают необходимую информацию и благополучно уходят, а некоторые задают вопросы в надежде получить от меня ответ.
Коме-то я отвечаю тут же в посте, а некоторые вопросы, ответ на который превышает размер самого вопроса – выношу в отдельный пост, чтобы и вопрошающему была пища для размышлений и другим ищущим было, что почитать. Вот этот пост такого плана – ответ на вопрос читателя.
Прежде всего я сразу скажу, какая информация использовалась при написании этой статьи. Итак
План статьи:
При написании статьи я использовал в первую очередь MSDN – тут есть всё, чтобы написать приложение для работы с Excel практически любой сложности, главное – вникать. Второй источник, который использовался – книга Программирование документов и приложений MS Office в Delphi о которой я упоминал, когда рассматривал свою книжную полку. Если Вы активно используете в разработке своих программ связку Delhi+Excel или Delphi+Word я рекомендую Вам купить эту книгу – как справочник она иногда оказывается просто не заменима.
Теперь плавно переходим к теме поста – работа с примечаниями в Excel. Для написания всех примеров в статье я использовал:
- Delphi XE
- Microsoft Excel 2010
Если Вы работаете в более старых версиях офиса и 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:
Для того, чтобы удалить примечание достаточно воспользоваться методом 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;
В результате получим примечание следующего вида:
Ну, разукрасить в разные цвета примечания на листе не так уж и креативненько :) Попробуем пройти немного дальше в наших исследованиях нового объекта и разберемся с тем как вставить картинку в примечание вместо (или вместЕ) с фона.
Если внимательно просмотреть свойства и методы объекта Shape, то можно обнаружить среди них метод UserPicture – этот метод и используется для того, чтобы вставить в Shape картинку пользователя. Формат в данном случае значения не имеет, например, в приведенном ниже код в примечание вставляется картинка в формате gif:
MyRange.Comment.Shape.Fill.UserPicture(ExtractFilePath(Application.ExeName)+'2.gif');
Результат представлен на рисунке ниже:
Отмечу, что картинка растягивается по всему объекту Shape, т.е. если вы планируете вставлять в примечания картинки определенного размера – убедитесь, что они выглядят в примечании прилично :)
Собственно, на этом ответ на вопрос читателя можно считать оконченным. Сегодня мы научились:
- вставлять/удалять/читать примечания
- изменять фоновый цвет примечания
- вставлять фоновый рисунок в примечания
Книжная полка
Описание Описаны общие подходы к программированию приложений MS Office. Даны программные методы реализации функций MS Excel, MS Word, MS Access и MS Outlook в среде Delphi.
|
Купить на ЛитРес |
Как изменить размер блока с примечанием в Excel:
Range.Comment.Shape.ScaleWidth(4, 0, 0);
Range.Comment.Shape.ScaleHeight(6, 0, 0);
Почему текст постов не отображается? У меня все статьи выглядят следующим образом:
Не должно быть такого, может вы зашли в момент обновления блога? На всякий случай можете подписаться на RSS-канал — в него сейчас транслируется весь текст статьи — гарантированно получите весь текст вместе с картинками и форматированием
UPD Проверил блог в Chrome, Opera, IE, FireFox — все последние версии. Работает все нормально.
Уже нормально, не знаю, что было
можно ли в excel создать примечание для таблицы данных, которое в зависимости от вводимого значения в ячейку таблицы выдавало нужное примечание?
или по другому — в ячейки вводятся коды, нужно что бы при анализе во всплывающих окнах отображалась их расшифровка?
Пример — 1т23, расшифровка: «1» — по графику; «т» — состояние: «требует прнятия мер»; «23» — дефект: «2» — центровка, «3» — крепления.
052, то, что примечание добавить можно — факт. А уж как вы его добавите и что оно будет отображать…может и есть какой-то скрипт на VB реализующий то, что вам надо, но я таким никогда не занимался
что ж спасибо за оперативность
Не знаю, отвечаете ли Вы ещё, но возникла проблема. При попытке прочитать текст примечания из ячейки, в которой его нет, возникает ошибка. Как проверить ячейку на наличие комментария?