2017-01-18 1 views
0

Excel 파일을 다운로드 한 다음 읽는 C# webjob이 있습니다. 하나의 열에는 데이터베이스에 저장하고 싶은 링크가 있습니다. 현재 ExcelDataReader를 사용하여 Excel 파일을 DataSet으로 변환 한 다음 행을 통해 데이터를 가져옵니다. 변환 후 문제의 열은 링크 텍스트가 포함 된 문자열 일뿐입니다.Excel 셀에서 링크 URL을 추출하는 방법

다른 읽기에서는 Excel에서와 같이 들리지만 하이퍼 링크는 다른 곳에 저장되며 Excel 파일을 DataSet으로 변환 할 때 정보가 보존되지 않습니다.

ExcelDataReader를 사용하도록 설정되어 있지 않지만 일부 제 3 자 소프트웨어를 지불하지 않고도 이러한 링크 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")와 비슷할 것입니다 .Hyplinks (1) .address' URL에 대해. C#에서 비슷한 것을 할 수 있습니까? –

답변

1

내 엑셀 파일을 읽을 EPPLUS를 사용하여 하이퍼 링크 데이터를 얻을 수있는 결국 :

는 여기에 내가 참고로 지금까지이 간단한 코드입니다.

코드 : 이해 해달라고

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; 
관련 문제