excel截断从html中提取的非常大的整数

时间:2017-05-05 19:12:30

标签: html excel vba excel-vba

我有一个VBA脚本,可以成功从html中提取数据并将其转储到Excel工作表中。当一些数据是一个非常大的整数(30位+数字)时,我的问题就出现了。默认情况下,microsoft excel将其存储为科学记数法,并且我会遭受数据丢失。
所以数据存储在html中,如下所示:

<tr>
<td>
      11111111111111111111111111
</td>
</tr>  

所以我的脚本循环遍历行(tr),每个单元格(td)将值拉入我的工作表,如下所示:

Set mydata = appIE.Document.getelementsbytagname("tr")
x=1
        For Each e In mydata
            Set mytd = e.getelementsbytagname("td")
            For Each c In mytd

                    Cells(x, 2).Value2 = e.Cells(1).innerText
                    x = x + 1

            Next c
        Next e  

所以我认为错误正在发生,因为我使用.value2将数据存储在我的单元格中,所以我尝试切换到.value,它重现了错误,而.text却无法运行。如何在不丢失数据的情况下将此数据类型设置为长或文本正确?

1 个答案:

答案 0 :(得分:1)

您在Excel VBA中能够做的最好的事情是使用变量并显式声明Decimal类型转换。这允许最多29个数字存储(我只使用1来测试它。它与其他数字一样无关紧要,但把它放在那里)。

你会想做这样的事情:

Sub Test()
    Dim InputString As String
    Dim DecimalHolder As Variant

    ' Put the string representation of your number into a string variable
    ' For my purposes, this was mostly to verify the input since the editor
    ' will convert this number to Scientific Notation otherwise.
    InputString = "11111111111111199999999999999"

    ' Using the variant variable, store the number by converting the string to a decimal.
    DecimalHolder = CDec(InputString)

    ' This now works, and is accurate
    DecimalHolder = DecimalHolder + 1
End Sub

如果您的任何输入数字长度超过29个字符,则需要创建一种将其修剪为29个字符限制的方法。如果不这样做,在尝试将数字存储在DecimalHolder变量中时会出现溢出错误。

所有这一切的原因是VBA授予每种数据类型的字节数。我们在这里使用变体,因为变体有16个字节可以使用(转换为十进制时减少到12)而double类型有8个,long类型有4个,int类型有2个。

如果你最终不需要这个数字,但你需要一个数字的字符表示(例如,如果这些'数字'正在提供Id的功能),那么你可以将数字存储为字符串。你不能在没有转换的情况下对字符串进行数值运算(虽然隐式转换可能就是这样做,而不是告诉你)。