在写入文本时打印问号
Posted
技术标签:
【中文标题】在写入文本时打印问号【英文标题】:Getting question mark printed while writting to text 【发布时间】:2012-05-26 07:21:01 【问题描述】:我正在使用 openoffice calc 宏写入文本文件,在将十六进制转换为十进制后,然后对结果使用 char 函数。当我使用函数在 openoffice 中转换时见下文 - 将 '88' 转换为十六进制。在论坛结果中正确显示。
但是,如果我们在运行下面的宏后打开文本文件,它会做同样的事情,'?'被陈列。如何更正此问题并获得文本文件中打印的确切值?
Sub Sheet2
Dim AsciiString As String
Dim t As String
Dim DataArray As Variant
intFH = FreeFile()
Open "e:\Temp.txt" For Output As intFH
t= "&H" & "88"
AsciiString = AsciiString & chr(cdec(t))
Print #intFH, AsciiString
close #intFH
End Sub
【问题讨论】:
【参考方案1】:您需要Openoffice(根据您的问题的文本和标签)或Excel(根据功能和vba代码)的解决方案吗?
关于 OpenOffice/LibreOffice:您的宏只需要稍作修改即可工作:
只需将变量t
的类型更改为Long
,然后
删除 cdec()
函数调用 - OpenOffice Calc 中没有这样的函数,它显然是 Excel VBA 宏的人工制品。
现在,如果您使用 ASCII 代码(十六进制 5E
/ 十进制 94
表示 ^
,它会将 ^
写入文件:
Sub Sheet2
Dim AsciiString As String
Dim t As Long
intFH = FreeFile()
Open "/tmp/Temp.txt" For Output As intFH
t= "&H" & "5E"
AsciiString = chr(t)
Print #intFH, AsciiString
close #intFH
End Sub
【讨论】:
嗨,这个公式的结果是“^”。公式为 =CHAR(HEX2DEC("88"))。但是,即使我在原始代码中将 t 的类型更改为 long,我也会在文本文件中得到一个问号。 我想这是由于您应用于十六进制字符串的cdec()
函数。 AFAIK openoffice 中没有这样的公式 - 这就是我问的原因:您需要基于 excel 的解决方案还是基于 openoffice 的解决方案?我的解决方案(没有cdec()
)适用于openoffice。下一点是:您需要plain ASCII 编码还是ISO 编码? &H5E
是 ^
的 ASCII 十六进制数。
您使用/显示的字符是 =CHAR(94)。我说的是 =CHAR(136),应该使用 openoffice 在文本文件中以 ascii 编码打印。
是的,因为 94 是十六进制的 5E,它是您问题中使用的字符。 Char(136)
没有说明使用哪种编码是没有意义的,因为 Char(x)
和 x > 127
depends on the individual environment 的结果:“CHAR 使用您系统的字符映射(例如 iso-8859-1、iso-8859-2、Windows-1252、Windows-1250)来确定要返回的字符。大于 127 的代码可能不可移植。“这就是为什么你应该更喜欢 7-bt ASCII 替代品。
再说一遍:请注意HEX2DEC 是 Excel 函数,而不是 OpenOffice 函数。使用 Calc 打开 xls 文件时,可能出于兼容性原因,但要定义与 openoffice 相关的问题,您应该坚持使用 openoffice。以上是关于在写入文本时打印问号的主要内容,如果未能解决你的问题,请参考以下文章
从旧的 Access 数据库导出时,希腊字符显示为问号或方框