如何从Excel单元格中提取链接URL

时间:2017-01-18 19:10:59

标签: c# asp.net excel dataset exceldatareader

我有一个c#webjob下载然后读取一个Excel文件。其中一列包含我要保存在数据库中的链接。我目前正在使用ExcelDataReader将Excel文件转换为DataSet,然后循环遍历行以获取数据。转换后,此时有问题的列只是一个包含链接文本的字符串。

从其他一些阅读中,它听起来像在Excel中,超链接存储在别处,并且在将Excel文件转换为数据集时不会保留这些信息。

我没有开始使用ExcelDataReader,但希望找到一个解决方案来提取这些链接网址,而无需支付某些第三方软件的费用。

以下是我参考的简单代码:

var regex = new RegExp(r"foo_(\d+)");
var str = "text foo_123 more text foo_456 foo_789 end text";

void main() {
  for (var match in regex.allMatches(str)) {
    print(match);
    print(match.start);
    print(match.end);
  }
}

1 个答案:

答案 0 :(得分:2)

我最终能够使用EPPLUS获取超链接数据来读取我的excel文件。

代码:

var pck = new ExcelPackage(excelFileStream);
ExcelWorksheet ws = pck.Workbook.Worksheets.First();

DataTable dt = new DataTable(ws.Name);
int totalCols = ws.Dimension.End.Column;
int totalRows = ws.Dimension.End.Row;
int startRow = 3;
ExcelRange wsRow;
DataRow dr;
foreach (var firstRowCell in ws.Cells[2, 1, 2, totalCols])
{
    dt.Columns.Add(firstRowCell.Text);
}

for (int rowNum = startRow; rowNum <= totalRows; rowNum++)
{
    wsRow = ws.Cells[rowNum, 1, rowNum, totalCols];
    dr = dt.NewRow();
    int rowCnt = 0;
    foreach (var cell in wsRow)
    {
        if (rowCnt == 7)
        {
            if (cell.Hyperlink != null)
            {
                dr[cell.Start.Column - 1] = cell.Hyperlink.AbsoluteUri;
            }
        }
        else
        {
            dr[cell.Start.Column - 1] = cell.Text;
        }

        rowCnt++;
    }

    if (!String.IsNullOrEmpty(dr[7].ToString()))
    {
        dt.Rows.Add(dr);
    }
}

return dt;