我有一个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);
}
}
答案 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;