Добавление гиперссылок в Excel [2007] в C # - в Excel это само - PullRequest
10 голосов
/ 26 августа 2009

Может кто-нибудь сказать мне, как мы можем добавить гиперссылку в Excel (2007 или более поздней версии) из ячейка на одном листе к ячейке на другом листе с помощью Office Interop в .NET (c #)

Например: гиперссылка с ячейки Листа A1 на ячейку Листа B10

Ответы [ 4 ]

8 голосов
/ 26 августа 2009

Здесь вы хотите использовать метод Hyperlinks.Add .

Вы можете вызвать его с помощью кода, который выглядит примерно так:

Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
Excel.Range rangeToHoldHyperlink = worksheet.get_Range("A1", Type.Missing);
string hyperlinkTargetAddress = "Sheet2!A1";

worksheet.Hyperlinks.Add(
    rangeToHoldHyperlink,
    string.Empty,
    hyperlinkTargetAddress,
    "Screen Tip Text",
    "Hyperlink Title");

Вот полный пример автоматизации, который вы можете протестировать:

void AutomateExcel()
{
    Excel.Application excelApp = new Excel.Application();
    excelApp.Visible = true;

    Excel.Workbook workbook = excelApp.Workbooks.Add(Type.Missing);
    workbook.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    workbook.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);

    Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
    Excel.Range rangeToHoldHyperlink = worksheet.get_Range("A1", Type.Missing);
    string hyperlinkTargetAddress = "Sheet2!A1";

    worksheet.Hyperlinks.Add(
        rangeToHoldHyperlink,
        string.Empty,
        hyperlinkTargetAddress,
        "Screen Tip Text",
        "Hyperlink Title");

    MessageBox.Show("Ready to clean up?");

   // Cleanup:
    GC.Collect();
    GC.WaitForPendingFinalizers();
    GC.Collect();
    GC.WaitForPendingFinalizers();

    Marshal.FinalReleaseComObject(range);

    Marshal.FinalReleaseComObject(worksheet);

    workbook.Close(false, Type.Missing, Type.Missing);
    Marshal.FinalReleaseComObject(workbook);

    excelApp.Quit();
    Marshal.FinalReleaseComObject(excelApp);
}

Надеюсь, это поможет!

Mike

2 голосов
/ 18 апреля 2012

Я делаю это так:

        Excel.Application xlApp;
        Excel.Workbook xlWorkBook;
        Excel.Worksheet xlWorkSheet;
        xlApp = new Excel.ApplicationClass();
        xlWorkBook = xlApp.Workbooks.Add(System.Reflection.Missing.Value);
        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 
        Excel.Hyperlink link =
            (Excel.Hyperlink)
            xlWorkSheet.Hyperlinks.Add(xlWorkSheet.get_Range("L500", Type.Missing), "#Sheet1!B1", Type.Missing,
                                       "Go top",
                                       "UP");

        xlWorkSheet.Hyperlinks.Add(xlWorkSheet.get_Range("C5", Type.Missing), "www.google.com", Type.Missing, "Click me to go to Google ","Google.com");                                                     
        xlApp.Visible = true;

Важно вставить символ # в ссылку, которая ведет к ячейке внутри книги, если этот символ не вставлен, то ссылка не работает.

Я описал это решение в статье на русском языке, пример можно найти здесь

0 голосов
/ 05 мая 2016

Чтобы добавить ссылку на изображение (уже вставлено в лист):

Hyperlinks hyperlinks = ws.Hyperlinks;
Hyperlink hyperlink = hyperlinks.Add(picture.ShapeRange.Item(1), "http://stackoverflow.com");

Вы не добавляете его непосредственно к изображению, но первый элемент в его ShapeRange. (Что бы это ни было ...)

0 голосов
/ 21 июля 2015

Надеюсь, что ниже одного поможет вам.

xlNewSheet.Hyperlinks.Add(xlWorkRange, string.Empty, "'Detailed Testcase Summary'!A1", "Click Here", "Please click me to go to Detailed Test case Summary Result");    
...