2017-01-18 9 views
0

У меня есть веб-сайт C#, который загружает, а затем читает файл Excel. Один из столбцов содержит ссылки, которые я хотел бы сохранить в моей базе данных. В настоящее время я использую ExcelDataReader для преобразования файла Excel в DataSet, а затем цикл через строки для захвата данных. После преобразования рассматриваемый столбец в этот момент представляет собой только строку, содержащую текст ссылки.Как извлечь URL-адрес ссылки из ячейки 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; 
} 
+0

Я не понимаю, у вас есть строка, и вы хотите, чтобы преобразовать его в URL? –

+0

В файле Excel это гиперссылка. При чтении ячейки в виде строки она извлекает только текст ссылки, а не URL-адрес, к которому ведет ссылка. –

+0

В VBA свойство адреса гиперссылки, прикрепленной к ячейке, вернет URL. Объект гиперссылки, прикрепленный к ячейке, будет первым элементом в коллекции Hyperlinks. Таким образом, в VBA это выглядело бы как «Range (« A1 »). Гиперссылки (1) .address' для URL-адреса. Можете ли вы сделать что-то подобное в C#? –

ответ

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;