gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 00:57:59 27 4
gpt4 key购买 nike

我有一个 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。如何在不丢失数据的情况下正确地将此数据类型设置为 long 或 text?

最佳答案

您在 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 的功能),那么您可以将数字存储为字符串。如果不进行转换,您将无法对字符串执行数字运算(尽管隐式转换可能只是这样做,而不是告诉您)。

关于html - excel截断从html中提取的非常大的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43812258/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com