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

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Приложение на C# генерирует документ Excel, в который выводятся UNC пути ко всем файлам, расположенным, например, в папке d:\Advanced Installer\ . Мне нужно вместо путей выводить кликабельные гиперссылки на файлы, расположенные по данным путям: Но если я перехожу по каждой из этих ссылок, выдает ошибку: При нажатии на кнопку "Сгенерировать файл Excel" такой код:
            listBox1.Items.Clear();
            GetFiles(dir1);
            button_Click(sender, e);
            MessageBox.Show("Файл Excel сгенерирован!");
Код GetFiles():
        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():
        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;
            }
        }
Подскажите, где ошибка?

Решение задачи: «Добавление гиперссылки в документ Excel»

textual
Листинг программы
[nick]SeIZVeIZ[/nick],

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5
Похожие ответы