Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/47: Рейтинг темы: голосов - 47, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 01.07.2015
Сообщений: 127

Добавление гиперссылки в документ Excel

26.06.2017, 10:48. Показов 9002. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Приложение на C# генерирует документ Excel, в который выводятся UNC пути ко всем файлам, расположенным, например, в папке d:\Advanced Installer\ .

Мне нужно вместо путей выводить кликабельные гиперссылки на файлы, расположенные по данным путям:

Но если я перехожу по каждой из этих ссылок, выдает ошибку:

При нажатии на кнопку "Сгенерировать файл Excel" такой код:
C#
1
2
3
4
            listBox1.Items.Clear();
            GetFiles(dir1);
            button_Click(sender, e);
            MessageBox.Show("Файл Excel сгенерирован!");
Код GetFiles():
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        public void GetFiles(string dir)
        {
            try
            {
                System.IO.DirectoryInfo DirectoryInfo = new System.IO.DirectoryInfo(dir);
                foreach (System.IO.FileInfo FileInfo in DirectoryInfo.GetFiles())
                {
                    //Здесь мы выводим информацию о полученном файле
                    listBox1.Items.Add(FileInfo.FullName);
                }
                foreach (System.IO.DirectoryInfo Dir in DirectoryInfo.GetDirectories())
                {
                    try { GetFiles(Dir.FullName); }
                    catch { }
                }
 
                lCount = listBox1.Items.Count;
            }
            catch (UnauthorizedAccessException ex)
            {
                MessageBox.Show(ex.ToString());
                Log.Write(ex);
            }
        }
Код button_Click():
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
        private void button_Click(object sender, EventArgs e)
        {
            int i = Convert.ToInt32(((Button)(sender)).Tag);
            switch (i)
            {
                case 1:
                    excelapp = new Excel.Application();   // запуск Excel
                    excelapp.Visible = true;
                    // создание рабочей книги из 3-х листов:
                    excelapp.SheetsInNewWorkbook = 3;     // Свойство SheetsInNewWorkbook возвращает или устанавливает количество листов, автоматически помещаемых Excel в новые рабочие книги.
 
                    excelapp.Workbooks.Add(Type.Missing);
                    //Получаем набор ссылок на объекты Workbook (на созданные книги)
                    excelappworkbooks = excelapp.Workbooks;
                    //Получаем ссылку на книгу 1 - нумерация от 1
                    excelappworkbook = excelappworkbooks[1];
                    //Ссылку можно получить и так, но тогда надо знать имена книг,
                    //причем, после сохранения - знать расширение файла
                    //excelappworkbook=excelappworkbooks["Книга 1"];
                    //Запроса на сохранение для книги не должно быть
 
                    //Получаем массив ссылок на листы выбранной книги
                    excelsheets = excelappworkbook.Worksheets;
                    excelappworkbook.Saved = true;
                    //Получаем ссылку на лист 1
                    excelworksheet = (Excel.Worksheet)excelsheets.get_Item(1);
                    //Делаем третий лист активным
                    excelworksheet.Activate();
                   
                    //Вывод в ячейки используя номер строки и столбца Cells[строка, столбец]
                    for (int m = 1; m <= lCount; m++)
                    {
                        excelcells = (Excel.Range)excelworksheet.Cells[m, 1];
          
                        //Выводим координаты ячеек
                        excelcells.Value2 = listBox1.Items[m - 1];
                        /*
                        excelcells.Font.Size = 20;
                        excelcells.Font.Italic = true;
                        excelcells.Font.Bold = true;
                        */
                        
                        Excel.Range rangeToHoldHyperlink = (Excel.Range)excelworksheet.Cells[m, 1];
 
                        string hyperlinkTargetAddress = excelcells.Value2.ToString();
 
                        excelworksheet.Hyperlinks.Add
                            (rangeToHoldHyperlink,
                             string.Empty,
                             hyperlinkTargetAddress,
                             "Screen Tip Text",
                             hyperlinkTargetAddress);
                    }
 
                    excelapp.Columns.AutoFit();  // выровнять ширину колонок по самой широкой записи
                    
                    break;
                case 2:
                    //Устанавливаем формат
                    excelapp.DefaultSaveFormat = Excel.XlFileFormat.xlWorkbookDefault;
                    
                    try
                    {
                        if (File.Exists(excelapp.DefaultFilePath))  // если файл по пути по умолчанию существует
                        {
                            //Будем спрашивать разрешение на запись поверх существующего документа
                            excelapp.DisplayAlerts = true;  // При значении свойства DisplayAlerts=true Excel будет спрашивать - записать ли сохраняемый документ поверх существующего, при значении false - нет.
 
                            //Сохраняем результат
                            excelappworkbooks = excelapp.Workbooks;
                            excelappworkbook = excelappworkbooks[1];
                            excelappworkbook.SaveAs(Type.Missing,  //object Filename
                               Type.Missing,                       //object FileFormat
                               Type.Missing,                       //object Password 
                               Type.Missing,                       //object WriteResPassword  
                               Type.Missing,                       //object ReadOnlyRecommended
                               Type.Missing,                       //object CreateBackup
                               Excel.XlSaveAsAccessMode.xlNoChange,//XlSaveAsAccessMode AccessMode
                               Type.Missing,                       //object ConflictResolution
                               Type.Missing,                       //object AddToMru 
                               Type.Missing,                       //object TextCodepage
                               Type.Missing,                       //object TextVisualLayout
                               Type.Missing);                      //object Local
                        }
                    }
 
                    catch (COMException ex)
                    {
                        MessageBox.Show(ex.ToString());
                        Log.Write(ex);
                    }
                    excelapp.Quit();
                    break;
                default:
                    Close();
                    break;
            }
        }
Подскажите, где ошибка?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.06.2017, 10:48
Ответы с готовыми решениями:

Range работа с диапазоном в Excel - добавление гиперссылки
Не определяется Range У меня такой вот код Как &quot;вписать&quot; в него метод добавления гиперссылки в колонку В файла ексель? class...

Гиперссылки на другой документ. не получается
Добрый день! Уважаемые, подскажите как мне быть? дело вот в чем: Есть документ эксель &quot;Журнал отгрузки&quot;, он содержит 31...

Добавление гиперссылки в базу access
Доброго времени суток! Рыскал по просторам инэта, но так ничего путного не нашел, в общем цель такова: Есть БД Access, которая...

14
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
26.06.2017, 11:20
Лучший ответ Сообщение было отмечено eliasum как решение

Решение

Цитата Сообщение от eliasum Посмотреть сообщение
C#
1
2
3
4
5
6
excelworksheet.Hyperlinks.Add
 (rangeToHoldHyperlink,
string.Empty,
hyperlinkTargetAddress,
"Screen Tip Text",
hyperlinkTargetAddress);
не верно составили у Вас ссылка пустая:
C#
1
2
3
excelworksheet.Hyperlinks.Add(
        rangeToHoldHyperlink, hyperlinkTargetAddress,
        missing, "Screen Tip Text",hyperlinkTargetAddress);
1
0 / 0 / 0
Регистрация: 01.07.2015
Сообщений: 127
26.06.2017, 11:31  [ТС]
SeIZVeIZ, Спасибо!
0
0 / 0 / 0
Регистрация: 01.07.2015
Сообщений: 127
27.06.2017, 12:40  [ТС]
Возникла еще проблема, вылетает исключение:


Не пойму, в чем проблема, куда копать?
0
0 / 0 / 0
Регистрация: 01.07.2015
Сообщений: 127
27.06.2017, 12:42  [ТС]
Генерируется примерно 2/3 файла с гиперссылками, а потом ни с того ни с сего исключение и такой результат:
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
27.06.2017, 13:02
Версия Excel, и номер строки на котором валится? похоже на старую версию Excel с переполнением строк
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
27.06.2017, 14:10
Сохраняйте файл в xlsx
0
0 / 0 / 0
Регистрация: 01.07.2015
Сообщений: 127
27.06.2017, 14:48  [ТС]
Версия Excel 2015, валится на строке с методом excelworksheet.Hyperlinks.Add() , а файл сохраняется в формате .xlsx .
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
27.06.2017, 15:16
eliasum, номер строки в экселе, а не программе на скриншоте отрезана эта часть не все цифры видны
0
0 / 0 / 0
Регистрация: 01.07.2015
Сообщений: 127
27.06.2017, 18:05  [ТС]
SeIZVeIZ, понял, 65531
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
27.06.2017, 21:05
все указывает на то что срабатывает ограничение в 65к, правда такого не встречал на новых версиях, думал там уже исправили.

Добавлено через 7 минут
есть вариант, что просто начинает висеть, пробуй после 65к строк давать "передышку" потоку
1
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
27.06.2017, 22:14
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
правда такого не встречал на новых версиях
Согласен, если сохранять в формат xlsx, то можно и больше 65к, отладчик поможет понять причину
1
999 / 358 / 135
Регистрация: 27.10.2006
Сообщений: 764
27.06.2017, 22:19
Лучший ответ Сообщение было отмечено eliasum как решение

Решение

На самом деле, как вы все знаете, листы Excel имеют определённые технические ограничения, заложенные в его архитектуре при разработке и касательно количеству гиперссылок на листе Excel их не может быть больше, чем 66530 штук. Даже в новых версиях Excel 2013-2016. Об этом вы можете прочитать по этой ссылке https://support.office.com/ru-... 9d656771c3

там есть строка: Гиперссылки на листе - 66 530 гиперссылок
2
27.06.2017, 22:28

Не по теме:

нефига себе, старожил подсказал, уважуха :)

0
0 / 0 / 0
Регистрация: 01.07.2015
Сообщений: 127
28.06.2017, 11:17  [ТС]
SeIZVeIZ, Pavel55, спасибо за помощь! Сделал по 50 тыс гиперссылок на лист. Конечно на одном было бы лучше, но хотя бы так.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.06.2017, 11:17
Помогаю со студенческими работами здесь

Добавление/изменение/удаление гиперссылки в записи таблицы
Здравствуйте. Есть в БД на аксесс в одной из таблиц поле &quot;Ссылка&quot; - тип &quot;Текст&quot;. Поле предназначено для указания ссылки на файл. Файлы...

Эффективные гиперссылки из Excel?
Не раз замечал, что Яндекс кроме html-текста на странице индексирует еще и документы excel размещенные на сайте. Например прайс-листы....

Ссылки, гиперссылки Excel
У нас есть таблица в Excel, в ней указаны идентификаторы, все уникальные без повторов. Возможно ли реализовать при вводе любого...

Гиперссылки на лист в Excel Online
Здравствуйте! Сталкивался ли кто-нибудь с гиперссылками на лист или ячейку Excel Online? Складывается впечатление, что это невыполнимая...

Excel переход по листам в виде гиперссылки
Dear All В экселе первый лист - список листов xls книги с описанием каждой. Можно ли сделать эти строки описания в виде гиперссылки с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 11.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 10.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 09.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 09.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 09.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru