将数据从xml导入到Excel

本文介绍从xml文件向excel导入数据时,超过15位数字显示不全的解决方法。
在上一篇文章提及到,从xml文件向excel导入数据之后,由于Excel最多只能识别到15位的数值,由于身份证号码长度为18位,超过了15位,所以其后三位在Excel中会显示为0。本文将介绍两种解决思路。

1. 建立xsd文件对xml文件结构进行定义
该方法参考了stackoverflow上的提问“Importing XML files into excel with numbers of over 15 digits”,链接如下:
https://stackoverflow.com/questions/58028688/importing-xml-files-into-excel-with-numbers-of-over-15-digits
1.1 范例xml文件有如下内容
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <number>12345678901234567890</number>
(将以上内容复制进新建txt文档,保存后后缀改为.xml即可)
1.2 新建xsd文件,内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="number" type="xs:string" /> </xs:schema>
(方法同1.1,后缀名改为.xsd)
1.3 导入映射
新建xls文件,依次打开开发工具 — 源 — XML映射 — 添加,将xsd文件添加进来,点击确定

1.4 建立映射
选择A1单元格,双击红框内number,可见A1单元格出现蓝色方框


1.5 导入xml
进入开发工具 – 导入,导入xml数据

1.6 结果
可以看到数据已经完整导入

2.替换法
2.1 使用记事本打开xml文件,观察文件结构,可以看到,身份证号码均以“</身份证号码”标签结尾,使用替换功能,将“</身份证号码”全部替换为“A</身份证号码”,即,为每一个身份证号码的结尾添加字母A

2.2 直接用Excel打开该xml文件,可以看到,“身份证号码”+“A”的组合会被识别为字符串,所有的字符均得到保留

2.3 此时逐个删除“A”,就可以还原身份证号码。为便于批量操作,可以写一个VBA宏,绑定快捷键,即可批量对选中单元格的最后一位进行删除。
Sub 宏1()
'
' 宏1 宏
' 删除最后一位
'
' 快捷键: Ctrl+q
'
Dim a, b
For Each cell In Selection
a = cell.Value
If Len(a) < 1 Then
GoTo re
End If
b = Mid(a, 1, Len(a) - 1)
cell.Value = b
re:
Next
End Sub