Как извлечь ссылку URL из ячейки Excel

У меня есть aC# webjob, который загружает, а затем читает файл Excel. Один из столбцов содержит ссылки, которые я хотел бы сохранить в своей базе данных. В настоящее время я использую ExcelDataReader для преобразования файла Excel в набор данных, а затем циклически перебираю строки, чтобы получить данные. После преобразования рассматриваемый столбец на данный момент представляет собой только строку, содержащую текст ссылки.

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

Я не настроен на использование ExcelDataReader, но хотел бы найти решение для извлечения этих URL-адресов ссылок без необходимости платить за какое-либо программное обеспечение третьей стороны.

Вот простой код, который я имею в качестве ссылки:

FileStream stream = File.Open(fileLocation, FileMode.Open, FileAccess.Read);
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
excelReader.IsFirstRowAsColumnNames = true;

DataSet result = excelReader.AsDataSet();

int count = 0;

foreach (DataRow row in result.Tables["WorkSheetName"].DataTable.Rows)
{
    var item = new myObject();

    item.Prop1 = long.Parse(row["Column3"].ToString());
    item.Prop2 = row["Column7"].ToString(); //The link, currently only seeing link text

    this.myDbContext.myTable.Add(item);
    await this.myDbContext.SaveChangesAsync();

    count += 1;
}

1 ответ

Я смог получить данные гиперссылки с помощью 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;
Другие вопросы по тегам