现在我很困惑。我打算为this question创建一个答案。
通过运行一些测试,我注意到了
{
"ID": 2,
"Title": "It's a new UserGroup 1",
"Description": null,
"UserGroupMembers": [{
"ID": 1,
"UserID": null,
"User": null,
"UserGroupID": 2,
"UserGroup": ... // Pointing to UserGroup with ID = 2
"ChildUserGroupID": 1,
"ChildUserGroup": null
}]
}
完全清除表格。它ActiveSheet.Cells.Replace Chr(1), "", xlPart, , True, , False, False
Chr(42)
是有意义的,但为什么*
?
有谁知道原因?它是某种第二/隐藏占位符吗? (无法找到某些内容,但可能只使用了错误的搜索字词)
答案 0 :(得分:9)
从两者之间的差异可以推断出原因
NUL :无字符。它用于在没有数据的存储设备的表面(例如磁盘表面)上填充时间或填充空间。在为数据擦除器(破坏性和非破坏性的)进行编程时,将使用此字符以擦除未分配的空间,以便任何人或任何程序都无法恢复已删除的数据。
< / li>SOH :此字符用于指示标题的开始,其中可能包含地址或路由信息。
STX :此字符用于指示文本的开头,因此也用于指示标题的结尾。
各种注释已经指出,这些字符(前32个)被称为控制字符,因为这些字符执行各种打印机和显示控制操作,而不是显示符号。
在Hadoop中,SOH通常用作字段分隔符,尤其是在读取CSV文件时。同样,在记事本中打开Excel文件(不解压缩为普通xlsx,即二进制格式)并打印控制字符时,将看到很多SOH字符。由于具有安全性功能,因此无法看到实际数据。
chr(0)= SOH是指向所有包含TEXT的单元格的内存地址的指针
和
chr(1)= NUL是指向所有包含NULL或空白单元格的单元的内存地址的指针
让我们看一下上面的语句,以了解下图中显示的不同命令。 TOP-LEFT是原始数据范围,示例显示了如何使用Range.Replace函数替换SOH,NUL和ASTERISK(*)。
那么,如果Chr(0)和Chr(1)仅仅是地址指针,并且为什么chr(1)的行为不同于chr(42),为什么它们能够替换Excel单元格中的值?
由于Excel工作表的结构而发生这种情况。当您打开全新的Excel工作簿时,未标记Excel单元格。它完全在视觉上以及系统的硬内存和软内存中。
但是,一旦一个人在单元格B2中输入内容,那么直到B2的所有空白单元格都将被分配一个带有Chr(0)的指针,而单元格B2将会被分配一个带有Chr(1)的指针。
现在,如果删除一个单元格B2的内容,则将与其他单元格B2一起分配一个NUL或Chr(0)指针。
这也是为什么仅使用Cells.ClearContents清除内容时并不会清除内存和Excel工作簿膨胀中的单元格的原因,而使用了较远的单元格却没有使用Cells.Clear或Ctrl + Delete将其删除。
现在,很明显,为什么Excel用给定的命令替换了内容或清除了工作表。了解星号(*)和SOH [或Chr(0)]之间的区别也很重要。
星号(*)替换最小长度为0的单元格内容。
当Chr(0)标识具有SOH的单元格时,即包含值的单元格,然后在指针的目标位置替换该值。
差异不是结果,而是找到或识别要更换的电池的方式。
我创建了一个小宏来验证以下假设:我正在记录使用Chr(1)= SOH和Chr(42)= *替换半百万个单元格(A1至CZ5000)所花费的时间
事实证明,使用指针指向带有TEXT的单元格地址(即SOH)所花费的时间少于ASTERISK(*)。
Sub Replace_Timer()
Sheet3.Activate
Dim startTime, endTime
Dim i As Integer
Sheet3.Range("A1:CZ5000").Value = "A"
For i = 1 To 25
startTime = Timer
Sheet3.Cells.Replace Chr(1), "X", xlPart, xlRows, False
endTime = Timer
Sheet4.Cells(i + 1, 2).Value = endTime - startTime 'Execution time in miliseconds
startTime = Timer
Sheet3.Cells.Replace Chr(42), "Z", xlPart, xlRows, False
endTime = Timer
Sheet4.Cells(i + 1, 3).Value = endTime - startTime 'Execution time in miliseconds
Next
Sheet4.Activate
End Sub
答案 1 :(得分:0)
ASCII 1是&#39; SOH&#39; (标题的开头)和ASCII 2&#39; STX&#39;意味着标题的结尾,数据流的开始。 (这允许您在文件中的实际数据之前隐藏文件中的地址,注释等)。看起来Excel正在解释您的命令从文件的开头开始并包括一切。
答案 2 :(得分:0)
我想我找到了答案。
我怎么找到的。
我键入“Alt + 1”(来自num pad的1)然后我得到了这个“?” (问号)。
现在我键入下面的代码,清除工作表。
ActiveSheet.Cells.Replace "?", "", xlPart, , True, , False, False
答案 3 :(得分:-3)
ASCII 1,由许多人识别,它被应用程序解释为每个字符的标题的开头。但是,特殊字符可以被其他一些字符转义('〜'是Excel中的转义字符)check here
我相信,你应该避免在你的代码中用chr(1)替换。