本文只写针对.xls文件的问题解决!
详细理论讲解还是看原文:C#读取Excel的内容和图片及图片位置, 本文在其基础上解决其只适用于.xlsx文件,并不适用于.xls文件的问题:
有同学会说,用Excel转成xlsx不就行啦?你可以试试hh
不出意外的话会在这条语句报错
// 找节点中的r的命名空间,如果找不到返回默认命名空间
r = nPic.FirstAttribute.IsNamespaceDeclaration ? nPic.FirstAttribute.Value :"http://schemas.openxmlformats.org/officeDocument/2006/relationships";
报错内容:
System.NullReferenceException:“Object reference not set to an instance
of an object.”
经观察调试后我发现,由 .xls 转成的 .xlsx解压后,drawing1.xml文件会有不同,
对于 .xlsx文件,每一个node应该是像下面这样的:
其中标红第三个子节点 xdr:pic 就是我们代码中要寻找的目标。
但 .xls 转成的 .xlsx第三子节点也可能不是xdr:pic:
于是要解决这个问题,我们需要在 private List<Tuple<int, int, string>> FindPicCell() 函数的图片链接获取前加入如下判断即可:
// 由于转换后xls与xlsx的xml格式不仅相同
// 加入如下判断后可解决该问题
var nPic = (XElement)nTo.NextNode;
if (nPic.Name.LocalName != "pic") {
continue;
}
nPic = ((XElement)((XElement)((XElement)nTo.NextNode).FirstNode.NextNode).FirstNode);
//var nPic = ((XElement)((XElement)((XElement)nTo.NextNode).FirstNode.NextNode).FirstNode);
相关代码也进行了命令行运行相关的修改,请大家按需下载:
https://download.csdn.net/download/weixin_48592526/25865815