Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel:映射的XML数据和;“存储为文本的数字”;错误_Xml_Excel - Fatal编程技术网

Excel:映射的XML数据和;“存储为文本的数字”;错误

Excel:映射的XML数据和;“存储为文本的数字”;错误,xml,excel,Xml,Excel,我的一位同事有一个XML文档,她使用“获取外部数据/从XML数据导入”在Excel2007中打开该文档 Excel会自动将XML映射到列。但是,某些元素存储数字数据,Excel拒绝将其视为数字: <SOME_NUMBER>68.12</SOME_NUMBER> 68.12 相反,单元格显示“数字存储为文本”错误 目前文档中没有附加XML模式,如果可能的话,我希望避免创建XML模式。还有什么其他选择 注意:尝试不同的区域设置失败。数据似乎总是被视为文本。您只需选择单元格

我的一位同事有一个XML文档,她使用“获取外部数据/从XML数据导入”在Excel2007中打开该文档

Excel会自动将XML映射到列。但是,某些元素存储数字数据,Excel拒绝将其视为数字:

<SOME_NUMBER>68.12</SOME_NUMBER>
68.12
相反,单元格显示“数字存储为文本”错误

目前文档中没有附加XML模式,如果可能的话,我希望避免创建XML模式。还有什么其他选择


注意:尝试不同的区域设置失败。数据似乎总是被视为文本。

您只需选择单元格,右键单击,格式化单元格,将格式类型更改为“数字”

编辑

使用此测试XML文件

<NODES>
<A>
   <B>1.23</B>
   <C>2.34</C>
   <D>3.45</D>
   <SOME_NUMBER>ASDF</SOME_NUMBER>
</A>
<A>
   <B>1.23</B>
   <C>2.34</C>
   <D>3.45</D>
   <SOME_NUMBER>4.56</SOME_NUMBER>
</A>
<A>
   <B>1.23</B>
   <C>2.34</C>
   <D>3.45</D>
   <SOME_NUMBER>4.56</SOME_NUMBER>
</A>
</NODES>

1.23
2.34
3.45
ASDF
1.23
2.34
3.45
4.56
1.23
2.34
3.45
4.56
除后两个数字外,所有列均显示为数字,因为 第一列中的文本

因此,我选择这两个单元格,高亮显示错误框(感叹号),然后选择第二个选项“转换为数字”


“单元格格式”这件事似乎有点愚蠢,因为它不会将格式应用于有错误的单元格,直到您点击该单元格

我相信默认情况下,单元格格式适用于整个列,因此在您的示例中,可能会有一些存储文本或数字的实例,但配额为“1.5”因此,默认的文本格式


当我测试XML数据导入时,它会将所有文本列格式化为文本,将数字列格式化为常规

我感觉到了您的痛苦,多年来我一直有同样的问题。这是我想出的唯一解决办法

Function ConvertText2Num(RangeToConvert As Range)
    RangeToConvert.ClearFormats
    RangeToConvert.TextToColumns
End Function
刚看到这个(老)问题,我想我还是可以回答:

当您说“当前没有XML模式附加到文档”时,您并不完全正确。始终存在XML模式,尽管大多数情况下是由Excel隐式创建的。在提取和调整这个模式时——这并不太困难——您可能会得到最简单的结果

关于如何执行此操作的提示(在本例中,问题是日期字段):

我首先想到的是区域设置,因为数字可以存储为68.12或68,12,具体取决于区域,但我知道您已经探讨了手动纠正错误的选择是可能的,但不可行的。;-)该文件相当大,据我所知,您必须为每个单元格分别执行此操作。该文件不能包含数字元素中的字符串,它是由数据库生成的。它也不包含空元素,只包含值0。不知何故,我仍然怀疑整个事件涉及到区域设置/系统区域设置……有趣的是,如果所有(或至少前n个)都包含一个非小数或0,那么Excel会正确地将该列解释为数字。如果包含一个像“68.12”这样的分数值(我在德国,这里写为“68,12”),Excel将开始将其视为字符串,显示错误。至少,将用户语言环境设置为美国英语并没有什么不同-我将尝试更改系统语言环境。事实上,这是不正确的。我刚刚发现Excel没有显示值“0”的错误。但该值显示为左对齐,表示它被视为字符串。这就是解决方案。我最终做了不同的事情,但这是很好的信息。谢谢