|
|
|
|
#1 |
|
Участник
|
Axapta и Excel
Как добавить в ячейку Excel гиперссылку?
На VBA код выглядит следующим образом: X++: ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="http://www.axforum.info/" Range("I21").Select |
|
|
|
|
#2 |
|
Moderator
|
Можно немножко понагляднее переписать VBA:
Код:
Sub ExcelMacro()
Dim myRange As Range 'в Аксапте это будет COM myRange
Dim myHyperlink As Hyperlink 'в Аксапте это будет COM myHyperlink
Set myRange = Application.ActiveSheet.Range("A1")
Set myHyperlink = myRange.Hyperlinks.Add(myRange, "http://www.axforum.info/")
myHyperlink.TextToDisplay = "Вызов Аксфорума из ячейки"
End SubX++: {
ComExcelDocument_RU doc = new ComExcelDocument_RU();
COM xlApp;
COM wbook;
COM activeSheet;
COM rng;
COM hyperlink;
;
doc.NewFile();
wbook = doc.getComDocument();
xlApp = wbook.Parent();
activeSheet = xlApp.ActiveSheet();
rng = activeSheet.Range('A1');
hyperlink = rng.Hyperlinks();
hyperlink = hyperlink.Add(rng,'http://www.axforum.info/');
hyperlink.TextToDisplay('Вызов Аксфорума из ячейки');
}X++: ...................
rng = activeSheet.Range('C10');
rng.Select();
hyperlink = activeSheet.Hyperlinks();
hyperlink = hyperlink.Add(xlApp.Selection(),'http://www.axforum.info/');
hyperlink.TextToDisplay('Вызов Аксфорума из ячейки');
} |
|
|
|
| За это сообщение автора поблагодарили: Stainless (1). | |
|
|
#3 |
|
Пенсионер
|
Добавте метод в класс ComExcelDocument_RU
X++: void SetHyperLink(MSOfficeBookMark_RU _bookMark, str _hyperLink, int _workSheet, str _textToDisplay = "") { COM activeRange; COM hyperLinks; COM workSheet; ; activeRange = this.findRange(_bookMark, _worksheet); workSheet = this.getWorkSheet(_workSheet); hyperLinks = workSheet.HyperLinks(); hyperLinks.Add(activeRange, "#" + _hyperLink, "" , "",_textToDisplay); }
__________________
Законы природы еще никто не отменял!А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
|
|
| За это сообщение автора поблагодарили: Stainless (1), decoder (1). | |
|
|
#4 |
|
Moderator
|
Цитата:
Кстати, пора, наверное, интенсивно переходить от void-методов к методам, возвращающим COM объекты Excel, пригодные для удобной дальнейшей работы. Void-методы что-то делают (создают, удаляют, вставляют, бордюрят и т.п.) и далее совершенно не заботятся о том, как мы будем добывать, например, гиперссылку, если она нам потребуется дальше. И от парочки "_bookMark, _worksheet" лучше перейти к нормальному использованию range и передавать его туды-сюды параметром как COM-объект (а не текстовым адресом и номером листа). Range сам несет в себе информацию о worksheet, на котором он находится. A worksheet в свою очередь - о workbook, в состав которого он входит. Не надо постоянно "искать" range при помощи findRange. C COM range, определенным на одном worksheet, можно легко оперировать при активном другом (например, задавать значение или делать фонт жирным). Создал примерчик. Используемый класс - маленький наследник ComExcelDocument_RU см. в прилагаемом проекте. X++: static void Job88(Args _args) { ComExcelDocument_RU_2 doc = new ComExcelDocument_RU_2(); // класс ..._2 в прилагаемом проекте COM range1, range2; COM hyperlink; ; doc.newFile(); doc.insertSheet(); range2 = doc.getRange('C10', 2); // range2 - на втором листе и всё он сам прекрасно знает о себе // и всё это выдаст, когда его спросят range1 = doc.getRange('D20', 1); // активировал таким образом первый лист, чтобы показать, // что лист, на котором создается гиперссылка (второй), не обязательно должен быть активным hyperlink = doc.setHyperLink( range2, 'http://www.axforum.info/', 'Вызов Аксфорума из ячейки'); // легко совершаем действие, "непрописанное" в setHyperLink hyperlink.ScreenTip('Это всплывающая подсказка к гиперссылке'); // всё! смотрим ссылку на втором (!) листе, наводим на нее мышь, щелкаем по ней } |
|
|
|
|
#5 |
|
Участник
|
Спасибо
|
|
|
| Теги |
| excel, url |
|
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|