Имя: Пароль:
1C
1С v8
Сохранение в эксель с сохранением гиперссылки
0 PRESTIGE
 
28.04.15
15:30
Ранее создавал тему, где спрашивал как на макете сделать гиперссылку на сайт. Это кое как победил. Теперь нужно этот макет сохранить эксель, и чтобы гиперссылка в экселе осталась работоспособной. Я понимаю что это можно как то через com объект сделать, ну а есть пути проще? Может кто знает.
1 AntonH851
 
28.04.15
15:34
(0) Как то через соm...
2 asady
 
28.04.15
15:42
(0) обсуждали, делали - очень давно - ищи...
3 Ненавижу 1С
 
гуру
28.04.15
15:43
только через COM
4 Necessitudo
 
28.04.15
15:45
Стандартно сохрани в эксель, потом обойди полученный файл поячеечно и запиши что нужно. Проще чем делать файл целиком программно.
5 asady
 
28.04.15
15:49
6 PRESTIGE
 
30.04.15
12:58
(5) Из твоей ссылки, по этому
олеЕксель = новый COMОбъект("Excel.Application");
олеКнига = олеЕксель.Workbooks.Open("c:\Новый.xls");
олеЛист = олеКнига.Worksheets.Item(1);
олеЯчейка = олеЛист.Cells(6, 6);
олеВыделеный = олеЯчейка.Select();
олеЯчейка.Hyperlinks.Add(олеЕксель.Selection, "", "Лист2!R4C4", "Описание ссылки", "Ссылка");

Делаю вот так

Ссылка = Лист.Cells(НомерСтроки,3).Comment.Shape.OLEFormat.Object.Caption;
                Лист.Cells(НомерСтроки,3).Hyperlinks.Add(Лист.Cells(НомерСтроки,3), "", "'Прайс общий'!R1C1", "ссылка", Ссылка);

В ссылке у меня точно лежит ERL.
Выдает ошибку
{Форма.ФормаЗаполнения.Форма(361)}: Ошибка при вызове метода контекста (Add)
                Лист.Cells(НомерСтроки,3).Hyperlinks.Add(Лист.Cells(НомерСтроки,3), "", "'Прайс общий'!R1C1", "ссылка", Ссылка);
по причине:
Неизвестная ошибка
7 PRESTIGE
 
30.04.15
13:13
ап
8 Кирпич
 
30.04.15
13:56
может Книга.Hyperlinks.Add
9 Кирпич
 
30.04.15
13:56
10 Кирпич
 
30.04.15
13:58
(8)+
т.е. Лист.Hyperlinks.Add
11 PRESTIGE
 
30.04.15
15:48
(10) Вообщем и это да, и книгу еще открывать нужно.
12 trdm
 
30.04.15
16:22
// вЛистХЛС = ОкноЕхс.Workbooks(ВыбФ).Sheets(1);
Если (Лев(Зн1С,11) = "http://www.";) ИЛИ (Лев(Зн1С,7) = "http://";)  Тогда                
    вСтрДиап = НазваниеСтолбца(СчКолонок)+Строка(СчРядов);
    вСтрДиап = вСтрДиап + ":"+вСтрДиап;
    вЛистХЛС.Hyperlinks.Add(вЛистХЛС.Range(вСтрДиап),Зн1С);
    ЯЧейка1 = вЛистХЛС.Cells(СчРядов,СчКолонок);
    ЯЧейка1.Value = "Подробное описание";
ИначеЕсли (Лев(Зн1С,12) = "%http://www.";) ИЛИ (Лев(Зн1С,8) = "%http://";)  Тогда
    Зн1С = Сред(Зн1С,2);
    вСтрДиап = НазваниеСтолбца(СчКолонок)+Строка(СчРядов);
    вСтрДиап = вСтрДиап + ":"+вСтрДиап;
    вЛистХЛС.Hyperlinks.Add(вЛистХЛС.Range(вСтрДиап),Зн1С);
    ЯЧейка1 = вЛистХЛС.Cells(СчРядов,СчКолонок);
    ЯЧейка1.Value = "Видео";
КонецЕсли;
13 PRESTIGE
 
12.05.15
08:46
Всем спасибо за помощь) Теперь вопрос в другом) Пишу формулу) Когда написал для двух ячеек все норм:
Лист.Cells(НомерСтроки,КолонкаСумма).Value = "="+"R"+Строка(СтрЗаменить(НомерСтроки,Символы.НПП,""))+"C"+Строка(КолонкаЗаказ)+"*"+"R"+Строка(СтрЗаменить(НомерСтроки,Символы.НПП,""))+"C"+Строка(КолонкаЦены);

А когда пишу для области, то при открытии экселя в ячейке пишеться "#ИМЯ?" Делаю так:
Лист.Cells(СтрокаСуммаЗаказа+1,КолонкаСуммаЗаказа).Value ="=СУММ(R"+Строка(СтрЗаменить(НачалоОбласти,символы.НПП,""))+"C:R"+Строка(СтрЗаменить(КонецОбласти,символы.НПП,""))+"C)";
14 PRESTIGE
 
12.05.15
08:51
После того, как два раза щелкну мышкой на эту ячейку, то эта ошибка пропадает, и формула работает.
15 PaulBC
 
12.05.15
08:51
Лист.Cells(НомерСтроки,КолонкаСумма).FormulaR1C1 = ...
16 PRESTIGE
 
12.05.15
08:58
(15) Ничего не поменялось
17 PaulBC
 
12.05.15
09:06
НачалоОбласти и КонецОбласти - числа?
18 PRESTIGE
 
12.05.15
09:09
(17) Да. Отладка этой формулы у меня показывает "=СУММ(R15C:R20C)". Что собственно встает и в экселе. Но формула видитется правильной, только после того, как два раза щелкну по ней мышкой, и нажму ентер.
19 PaulBC
 
12.05.15
09:18
Лист.Cells(НомерСтроки,КолонкаСумма).FormulaLocal = ...
20 PRESTIGE
 
12.05.15
09:22
(19) Да, помогло! Спасибо большое!
21 PRESTIGE
 
12.05.15
09:25
(19) И еще параллельный вопрос, если случиться ошибка, то в исключение пишу:
Результат.Application.Quit();

Чтобы процесс экселя закрылся и не весел как рабочий, потому что если он не даст ничего делать с файлом пока этот процесс будет висет. Но этот код не убивает эксель. Может какой то другой метод?
22 PaulBC
 
12.05.15
09:33
(21)
олеКнига.Close();
олеЕксель.Quit();
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой