从Excel单元格中的超链接文本中提取URL

我在excel中有一个超链接文本,所以基本上是一堆名字,但是当我点击一个时,它会把我带到默认浏览器中的一些URL。

所以我从我的程序中的excel表中提取文本,但是我从这些超链接单元格中提取的值是string里面的值,当我想要将string链接到的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将包含文本:

美味的cookies食谱

我想提取string:

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

你可以使用vbamacros:

按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 

然后你可以在你的Worksheet中使用它,就像这样:

=URL(B4)

VBAfunction:

  1. 按Alt + F11 (打开Visual Basic编辑器)
  2. 点击插入 – >模块(添加一个模块到你的Excel文件)
  3. 将下面的代码粘贴到GETURL的函数中
  4. 按Alt + Q (closuresVisual Basic编辑器)

现在使用=GETURL( cell )来获取URL
示例: =GETURL(A1)将返回单元格A1中显示的超链接的URL

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

资源

在你的代码中只需添加

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

我显然build议在访问“超链接”属性之前进行一些检查。

使用Visual Studio Tools for Office(VSTO)打开Excel工作簿并提取所有超链接。


我把一个超链接放入Book1.xlsx中Sheet1的A1: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/ 

为什么不使用Uri类将string转换为URL:

 Uri uri = new Uri("http://myUrl/test.html"); 

您可以使用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及以上保存为启用macros…]

我刚碰到这个问题,这对我来说是有效的:

我在一个范围内使用了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); } 

当logging被添加到logging列表时,无论单元格范围的值被格式化为可点击超链接。