Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从UCS-2 Little Endian编码文本文件读取VBA_Vba_Excel - Fatal编程技术网

从UCS-2 Little Endian编码文本文件读取VBA

从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

我有一大堆从Photoshop导出的文本文件,需要导入Excel文档。我写了一个宏来完成这项工作,它似乎对我的测试文档很好,但当我尝试加载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编码的

在一个案例中,有人建议以下措施应该奏效:

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的主角。啊,你完全正确!我的代码中缺少的只是“行输入”,而不仅仅是“输入”。它现在很有魅力,谢谢你!