gpt4 book ai didi

c# - 如何从 Excel 单元格中提取链接 url

转载 作者:行者123 更新时间:2023-12-04 20:11:36 26 4
gpt4 key购买 nike

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

从其他一些阅读来看,这听起来像是在 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;
}

最佳答案

我最终能够使用 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;

关于c# - 如何从 Excel 单元格中提取链接 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41727557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com