Копирование гиперссылок из ячейки в другую с помощью NPOI

Я пытаюсь скопировать определенные данные с листа на другой, но некоторые ячейки представляют собой простые строки, а некоторые — гиперссылки. Если я использую StringCellValue для строк, все в порядке, но я не нашел способа скопировать гиперссылки с исходного листа на новый, который я создаю.

Для построения нового листа и копирования данных я использую NPOI.

//ОБНОВЛЕНИЕ Я добавил код для вставки гиперссылок, но когда я запускаю программу, она показывает следующее исключение: Ссылка на объект не указывает на экземпляр объекта.

Вот мой код:

  using (FileStream fs = new FileStream(@"C:\Users\File.xlsx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                Console.WriteLine("Time to wait....");
                templateWorkbook = new XSSFWorkbook(fs);

            }
              row.GetCell(6).SetCellValue(sheettoget.GetRow(1).GetCell(13).StringCellValue);
            var sourceLink = sheettoget.GetRow(1).GetCell(13).Hyperlink;


                    if(sourceLink != null)
              {
                        Console.WriteLine("Inserting first Juice session...");
                        var targetLink = new XSSFHyperlink(sourceLink.Type);

                        targetLink.Address = sourceLink.Address;
                       }

                        row.GetCell(6).Hyperlink = targetLink; 
                        row.GetCell(6).CellStyle = sheettoget.GetRow(1).GetCell(13).CellStyle;

person Work_God_Damnit    schedule 09.10.2016    source источник


Ответы (1)


Вы можете скопировать такую ​​гиперссылку, где sourceCell — это ячейка, из которой вы копируете, а targetCell — это ячейка, в которую вы копируете:

    targetCell.SetCellValue(sourceCell.StringCellValue);
    var sourceLink = sourceCell.Hyperlink;
    if (sourceLink != null)
    {
        var targetLink = new XSSFHyperlink(sourceLink.Type);
        targetLink.Address = sourceLink.Address;
        targetCell.Hyperlink = targetLink;

        // also copy the cell style to ensure the copied link still looks like a link
        targetCell.CellStyle = sourceCell.CellStyle;
    }
person Brian Rogers    schedule 09.10.2016
comment
эй, еще раз спасибо за помощь: D, но я получаю это: ссылка на объект не установлена ​​​​на экземпляр объекта - person Work_God_Damnit; 10.10.2016
comment
В приведенном выше коде последние две строки должны быть внутри закрывающей скобки от if (sourceLink != null), как показано в моем ответе. Если после этого вы по-прежнему получаете исключение NullReferenceException, вам необходимо выполнить отладку и выяснить, какая строка вызывает ошибку. Как только вы это узнаете, вы можете добавить нулевую проверку. См. Что такое NullReferenceException и как его исправить. ? - person Brian Rogers; 10.10.2016