VBA从UCS-2小端编码文本文件读取

我有一大堆从Photoshop导出的文本文件,需要导入到Excel文档中。 我写了一个macros来完成工作,它似乎对我的testing文档工作得很好,但是当我尝试加载一些由Photoshop生成的实际文件时Excel开始将所有数据放在除第一行以外的单独列中。

我的代码读取文本文件:

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编码。

在这个vbaexpress.com文章 ,有人build议,以下应该工作:

 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 

显然我不能自己testing,但也许会帮助你。

为什么不告诉excel导入文件。 MS可能已经把数十万人的时间放到了这个代码中。 logginginput以获得简单的代码。

记住Excel是非程序员编程的工具。 使用它而不是试图取代它。

这些是您用于新代码的replace文件函数。 添加对Microsoft Scripting Runtime的引用。

打开指定的文件并返回一个TextStream对象,该对象可用于读取,写入或附加到文件。

 object.OpenTextFile(filename[, iomode[, create[, format]]]) 

参数object必需。 对象始终是FileSystemObject的名称。

文件名必需。 用于标识要打开的文件的stringexpression式。

iomode可选。 可以是三个常量之一:ForReading,ForWriting或ForAppending。

创build可选。 布尔值,指示如果指定的文件名不存在,是否可以创build新文件。 如果创build了新文件,则值为True,如果未创build则为False。 如果省略,则不会创build新文件。

格式可选。 三个三位值之一,用于指示打开文件的格式。 如果省略,则文件以ASCIIforms打开。

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.