【问题标题】:Adding hyperlinks in Excel[2007] in C# - Within Excel it self在 C# 中的 Excel [2007] 中添加超链接 - 在 Excel 中它自己
【发布时间】:2009-08-26 10:34:50
【问题描述】:

谁能告诉我如何在 Excel(2007 或更高版本)中添加超链接 使用 .NET (c#) 中的 Office 互操作将一个工作表中的单元格转换为另一个工作表中的单元格

例如:从 Sheet1 单元格 A1 到 Sheet2 单元格 B10 的超链接

【问题讨论】:

    标签: c# excel office-interop excel-interop


    【解决方案1】:

    您要在这里使用的是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);
    }
    

    希望这会有所帮助!

    迈克

    【讨论】:

    • 我使用的是地址参数而不是子地址...第一个不起作用。
    • 我遗漏的关键点是超链接指向的单元格位于子地址中。我试图把它放在地址中
    • 谢谢,我能够将它翻译成 Delphi 并让它工作:
    【解决方案2】:

    我这样做:

            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;
    

    在指向书内单元格的链接中插入符号#很重要,如果没有插入此符号,则链接断开。

    我在一篇俄语文章中描述了这个决定,可以找到一个例子here

    【讨论】:

      【解决方案3】:

      希望以下对你有所帮助。

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

      【讨论】:

        【解决方案4】:

        添加图片链接(已插入工作表):

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

        您没有将其直接添加到图片中,而是将其添加到 ShapeRange 中的第一项。 (不管是什么……)

        【讨论】:

          【解决方案5】:

          @Mike Rosenblums 的答案翻译成也可以使用的 Delphi:

          uses
            Excel2000;
          
          {$R *.dfm}
          
          procedure TForm1.Button1Click(Sender: TObject);
          var
            AExcelApplication: ExcelApplication;
            AExcelWorkSheet: ExcelWorkSheet;
            ARange: Range;
            hyperlinkTargetAddress:String;
          begin
          
            AExcelApplication := CoExcelApplication.Create;
            AExcelApplication.Visible[0] := true;
            AExcelApplication.Workbooks.Add('',0);
            AExcelApplication.Worksheets.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam, 0);
            AExcelApplication.Worksheets.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam, 0);
            AExcelWorkSheet := AExcelApplication.Worksheets.Item[1] as ExcelWorkSheet;
            ARange := AExcelWorkSheet.Range['A1','A1'];
          
            hyperlinkTargetAddress := 'Sheet2!A1';
            AExcelWorkSheet.Hyperlinks.Add(
              ARange,
              '',
              hyperlinkTargetAddress,
              'Screen Tip Text',
              'Hyperlink Title1'
            );
          
            ARange := AExcelWorkSheet.Range['A2','A2'];
            AExcelWorkSheet.Hyperlinks.Add(
              ARange,
              '',
              'Sheet1!A1',
              'Screen Tip Text',
              'Hyperlink Title2'
            );
          
          end;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-06-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多