从UCS-2 Little Endian编码文本文件读取VBA
我有一大堆从Photoshop导出的文本文件,需要导入Excel文档。我写了一个宏来完成这项工作,它似乎对我的测试文档很好,但当我尝试加载Photoshop Excel生成的一些实际文件时,开始将所有数据放在一个单独的列中,第一行除外 读取文本文件的我的代码:从UCS-2 Little Endian编码文本文件读取VBA,vba,excel,Vba,Excel,我有一大堆从Photoshop导出的文本文件,需要导入Excel文档。我写了一个宏来完成这项工作,它似乎对我的测试文档很好,但当我尝试加载Photoshop Excel生成的一些实际文件时,开始将所有数据放在一个单独的列中,第一行除外 读取文本文件的我的代码: Open currentDocPath For Input As stream Do Until EOF(stream) Input #stream, currentLine columnConte
Open currentDocPath For Input As stream
Do Until EOF(stream)
Input #stream, currentLine
columnContents = Split(currentLine, vbTab)
For n = 0 To UBound(columnContents)
ActiveSheet.Cells(row, Chr(64 + colum + n)).Value = columnContents(n)
Next n
row = row + 1
Loop
Close stream
我正在阅读的文本文件如下所示,只是包含了更多的数据:
"Name" "Data" "Info" "blah"
"Name1" "Data1" "Info1" "blah1"
"Name2" "Data2" "Info2" "blah2"
这个问题看起来很简单,但当我将它加载到excel中时,看起来就像上面的一样,它看起来是这样的:
ÿþ"Name" "Data" "Info" "blah"
Name1
Data1
Info1
blah1
Name2
Data2
Info2
blah2
现在我不知道为什么会这样。第一行中的前两个字符似乎在那里,因为这些字节声明了文本编码。不知何故,这些字符保持了第一行的正确格式,而其余的行则丢失了引号,并全部移动到新行
了解UCS-2 Little Endian文本编码的人能解释一下我如何解决这个问题吗?当我将文件转换为ASCII时,它工作正常
干杯
编辑:好的,我现在明白了编码是UTF-16(我对字符编码不太了解)。我的主要问题是,它的格式奇怪,我不明白为什么或如何修复它。谢谢 正如我在评论中提到的,您试图导入的文件似乎是用UTF-16编码的 在一个案例中,有人建议以下措施应该奏效:
Dim GetOpenFile As String
Dim MyData As String
Dim r As Long
GetOpenFile = Application.GetOpenFilename
r = 1
Open GetOpenFile For Input As #1
Do While Not EOF(1)
Line Input #1, MyData
Cells(r, 1).Value = MyData
r = r + 1
Loop
Close #1
显然,我自己无法测试它,但它可能会帮助您。为什么不让excel导入该文件呢。微软可能已经在这段代码中投入了数十万人小时。记录输入以获取简单代码 请记住,Excel是非程序员进行编程的工具。使用它,而不是试图替换它 这些是用于新代码的替换文件函数。添加对Microsoft脚本运行时的引用 打开指定的文件并返回可用于读取、写入或附加到文件的TextStream对象
object.OpenTextFile(filename[, iomode[, create[, format]]])
论据
对象
必修的。对象始终是FileSystemObject的名称
文件名
必修的。标识要打开的文件的字符串表达式
iomode
可选。可以是三个常量之一:用于读取、用于写入或用于显示
创造
可选。布尔值,指示如果指定的文件名不存在,是否可以创建新文件。如果创建了新文件,则该值为True;如果未创建,则该值为False。如果省略,则不会创建新文件
格式
可选。三个三态值之一,用于指示打开文件的格式。如果省略,文件将以ASCII格式打开。
format参数可以具有以下任意设置:
Constant Value Description
TristateUseDefault
-2
Opens the file using the system default.
TristateTrue
-1
Opens the file as Unicode.
TristateFalse
0
Opens the file as ASCII.
这两个有趣的角色是UTF-16的主角。啊,你完全正确!我的代码中缺少的只是“行输入”,而不仅仅是“输入”。它现在很有魅力,谢谢你!