首页新闻找找看学习计划

NPOI读取Excel2007中含有超链接的单元格会出错求解决该怎么处理

0
悬赏园豆:50 [已解决问题] 解决于 2019-10-24 10:27

using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read))
{
//XSSFWorkbook 适用XLSX格式,HSSFWorkbook 适用XLS格式
if (fileExt == ".xlsx")
{
workbook = new XSSFWorkbook(fs);//此处会报错提示The hyperlink for cell I2 references relation rId1, but that didn't exist!(单元格引用的超链接关系不存在!)
}
else if (fileExt == ".xls")
{
workbook = new HSSFWorkbook(fs);
}
else
{
workbook = null;
Console.WriteLine(string.Format("未选择正确的xlsx文件-{0}", DateTime.Now));
}
if (workbook == null)
{
return null;
}

            //得到excel的sheet数
            for (int k = 0; k < workbook.NumberOfSheets; k++)
            {

                if (workbook.IsSheetHidden(k))
                {
                    continue;
                }
                DataTable dt = new DataTable();
                ISheet sheet = workbook.GetSheetAt(k);
                //表头  
                IRow header = sheet.GetRow(sheet.FirstRowNum);
                List<int> columns = new List<int>();
                for (int i = 0; i < header.LastCellNum; i++)
                {
                    object obj = GetValueType(header.GetCell(i), workbook);
                    if (obj == null || obj.ToString() == string.Empty)
                    {
                        dt.Columns.Add(new DataColumn("Columns" + (i + 1).ToString()));
                        Console.WriteLine(string.Format("Excel文件{0}中{1}列表头不存在", sheet.SheetName, (i + 1).ToString()));
                    }
                    else
                    {
                        if (dt.Columns.Contains(obj.ToString()))
                        {
                            obj = obj + i.ToString();
                        }

                        dt.Columns.Add(new DataColumn(obj.ToString()));
                    }
                    columns.Add(i);
                }


                //数据  
                for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++)
                {
                    DataRow dr = dt.NewRow();
                    bool hasValue = false;
                    if (sheet.GetRow(i) != null)
                    {
                        foreach (int j in columns)
                        {
                            dr[j] = GetValueType(sheet.GetRow(i).GetCell(j), workbook);
                            if (dr[j] != null && dr[j].ToString() != string.Empty)
                            {
                                hasValue = true;
                            }
                        }
                        if (hasValue)
                        {
                            dt.Rows.Add(dr);
                        }
                    }
                    else
                    {
                        Console.WriteLine(string.Format("Excel文件{0}中{1}行数据为空", sheet.SheetName, i.ToString()));
                    }
                }
                dict.Add(sheet.SheetName, dt);
            }
        }

[(https://img2018.cnblogs.com/q/1244030/201910/1244030-20191023131850349-637510532.png)]
怎么去处理这个带有超链接格式的文本呢?求教求教

Mr_Height的主页 Mr_Height | 初学一级 | 园豆:152
提问于:2019-10-23 13:20

有没有大佬遇到过这问题?有没有解决方案呢

Mr_Height 3个月前

暂时的处理办法就是导入数据之前取消所有超链接文本的超链接。之后再导入数据了。哈哈谢谢啦各位

Mr_Height 3个月前

@Mr_Height: 我前几天处理了 NPOI 读取execl的 File 超链接 和文本 ,我觉得 应该对你有帮助

烟雨画江南 3个月前

@烟雨画江南: 现在的问题是这样的 如果你导入的数据内容比如是 12345678@ 并且带着超链接下划线,而且编辑这个超链接的时候打开的那个页面也是@结尾,这时候IIWorkbook workbook = new XSSFWorkbook(stream); 这个里就是空的了,在这时候还没有开始循环读取数据

Mr_Height 3个月前

@Mr_Height: 没处理过这种情况,我处理的是 某列单元格为文本超链接

烟雨画江南 3个月前

@烟雨画江南: 所以啊 现在的问题就是如果超链接地址的最后一个字符是@,那就没法创建IworkBook 对象了

Mr_Height 3个月前

@Mr_Height: 你的超链接 是电子邮箱?地址

烟雨画江南 3个月前

@烟雨画江南: 对啊 公司的测试在测试的时候乱输入的。。就以@结尾了,很烦哈哈

Mr_Height 3个月前

@Mr_Height: 看我下面截图 读取的内容 文字和链接用 && 拼接

烟雨画江南 3个月前
< >
分享
最佳答案
0

npoi 貌似没有办法解决,java版本 3.9以上fix了这个问题。
可以考虑从source code打一个包 fix。
https://github.com/tonyqus/npoi/blob/master/ooxml/XSSF/UserModel/XSSFHyperlink.cs#L77

收获园豆:25
czd890 | 大侠五级 |园豆:8035 | 2019-10-24 10:21
其他回答(2)
0

你可以尝试使用Spire.XLS来读取

收获园豆:25
ms_doudou | 园豆:546 (小虾三级) | 2019-10-23 15:46

除了这个使用其他的组件,在NPOI上有没有解决方法呢

支持(0) 反对(0) Mr_Height | 园豆:152 (初学一级) | 2019-10-23 16:02
0

烟雨画江南 | 园豆:234 (菜鸟二级) | 2019-10-24 15:58

支持(0) 反对(0) 烟雨画江南 | 园豆:234 (菜鸟二级) | 2019-10-24 16:30

读取的内容 文字和链接用 && 拼接

支持(0) 反对(0) 烟雨画江南 | 园豆:234 (菜鸟二级) | 2019-10-24 16:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册