Извлечение URL из гиперссылки в ячейке Excel - PullRequest
8 голосов
/ 13 апреля 2011

У меня есть таблица, полная текста с гиперссылками в Excel, так что в основном это набор имен, но когда я нажимаю на одно, в моем браузере по умолчанию я перехожу на какой-то URL.

Итак, я извлекаю текст из этой таблицы Excel в моей программе, но значение, которое я получаю, когда извлекаю из этих ячеек гиперссылки, это значение строки внутри, когда я хочу получить URL-адрес, с которым связана строка в файле Excel.

Так что я думаю, что есть два способа сделать это. Либо я могу преобразовать весь гиперссылочный текст в файле Excel в соответствующие URL-адреса, либо я могу использовать C #, чтобы каким-то образом извлечь значение URL из ячейки, а не из текста.

Я не знаю, как это сделать, но любая помощь будет принята с благодарностью.

Код C # на данный момент:

Excel.ApplicationClass excelApp = new Excel.ApplicationClass();

//excelApp.Visible = true;

Excel.Workbook excelWorkbook = 
excelApp.Workbooks.Open("C:\\Users\\use\\Desktop\\list.xls",
0, false, 5, "", "",false, Excel.XlPlatform.xlWindows, "", 
true, false, 0, true, false, false);

Excel.Sheets excelSheets = excelWorkbook.Worksheets;

string currentSheet = "Sheet1";
Excel.Worksheet xlws = (Excel.Worksheet)excelSheets.get_Item(currentSheet);

string myString = ((Excel.Range)xlws.Cells[2, 1]).Value.ToString();

Что касается файла Excel, это всего лишь один длинный ряд имен с гиперссылками. Например, ячейка A2 будет содержать текст:

Вкусный рецепт печенья

И я хочу извлечь строку:

http://allrecipes.com//Recipes/desserts/cookies/Main.aspx

Ответы [ 8 ]

9 голосов
/ 13 апреля 2011

Вы можете использовать макрос vba:

Нажмите Alt + F11 , чтобы открыть редактор VBA и вставить следующее:

Function URL(rg As Range) As String
  Dim Hyper As Hyperlink
  Set Hyper = rg.Hyperlinks.Item(1)
  URL = Hyper.Address
End Function

И затем вы можете использовать его в своем рабочем листе, например так:

=URL(B4)

5 голосов
/ 29 мая 2013

Функция VBA:

  1. Хит Alt + F11 (открывает редактор Visual Basic)
  2. Нажмите Вставить -> Модуль (добавляет модуль в файл Excel)
  3. Вставьте приведенный ниже код для функции GETURL
  4. Hit Alt + Q (закрывает Visual BasicРедактор)

Теперь используйте =GETURL(<i>cell</i>) для получения URL
Пример: =GETURL(A1) вернет URL для гиперссылки, отображаемой в ячейке A1

Function GETURL(HyperlinkCell As Range)
    GETURL = HyperlinkCell.Hyperlinks(1).Address
End Function

Источник

3 голосов
/ 27 апреля 2011

В вашем коде просто добавьте

string myString = ((Excel.Range)xlws.Cells[2, 1]).Cells.Hyperlinks[1].Address;

Я, очевидно, рекомендую выполнить некоторые проверки перед доступом к свойству "Гиперссылки".

1 голос
/ 13 апреля 2011

Используйте инструменты Visual Studio Tools for Office (VSTO), чтобы открыть книгу Excel и извлечь все гиперссылки.


Я поместил гиперссылку на А1 Sheet1 в Book1.xlsx: text = "example.com, address =" http://www.example.com"

_Application app = null;
try
{
    app = new Application();

    string path = @"c:\temp\Book1.xlsx";
    var workbook = app.Workbooks.Open(path, 0, true, 5, "", "", true, XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

    var sheets = workbook.Worksheets;
    var sheet = (Worksheet)sheets.get_Item("Sheet1");

    var range = sheet.get_Range("A1", "A1");
    var hyperlinks = range.Cells.Hyperlinks.OfType<Hyperlink>();

    foreach (var h in hyperlinks)
    {
        Console.WriteLine("text: {0}, address: {1}", h.TextToDisplay, h.Address);
    }
}
finally
{
    if (app != null)
        app.Quit();
}

Выход:

text: example.com, address: http://www.example.com/
0 голосов
/ 09 октября 2018

Попробуйте это:

Excel.Application appExcel = new Excel.Application();
Excel.Workbooks workBooks = appExcel.Workbooks;
Excel.Workbook excelSheet = workBooks.Open("......EditPath", false, ReadOnly: true);

foreach (Excel.Worksheet worksheet in excelSheet.Worksheets)
{
    Excel.Hyperlinks hyperLinks = worksheet.Hyperlinks;
    foreach (Excel.Hyperlink lin in hyperLinks)
    {
        System.Diagnostics.Debug.WriteLine("# LINK: adress:" + lin.Address);
    }
}
0 голосов
/ 21 сентября 2016

Я только что столкнулся с этой проблемой, и вот что у меня сработало:

Я использовал метод расширения FormulaR1C1 для диапазона. Итак, мой код выглядел так:

                    for (int r = 2; r <= sheetRange.Rows.Count; r++)
                    {
                        documentRecord = new List<string>();
                        for (int c = 1; c <= wkCol; c++)
                        {
                            documentRecord.Add(sheetRange.Cells[r, c].FormulaR1C1); 
                        }
                        AllRecords.Add(documentRecord);
                    }

Когда запись добавляется в список записей, значение любого диапазона ячеек форматируется в гиперссылку clickable.

0 голосов
/ 20 ноября 2013

Вы можете использовать код VBA для достижения этой цели. Нажмите Alt + F11, чтобы открыть редактор VB, вставьте Module и вставьте следующий код:

Sub run()    
    On Error Resume Next    

    For Each hLink In Selection    
        Range(hLink.Address).Offset(0, 1) = hLink.Hyperlinks(1).Address    
    Next    
End Sub

Сохраните файл Excel [в Excel 2007 и выше, сохраните как макрос включен ...]

0 голосов
/ 13 апреля 2011

почему бы не использовать класс Uri для преобразования строки в URL:

Uri uri = new Uri("http://myUrl/test.html");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...