我有一大堆从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(我不太了解字符编码)。我的主要问题是它的格式奇怪,我不明白为什么或如何解决它。谢谢!
答案 0 :(得分:1)
正如我在评论中提到的,您尝试导入的文件似乎以UTF-16编码。
在this vbaexpress.com article中,有人建议以下内容应该有效:
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
显然我不能自己测试,但也许它会帮助你。
答案 1 :(得分:0)
为什么不告诉excel导入文件。 MS可能已经将数十万个小时放入该代码中。记录输入以获得简单的代码。
记住Excel是非程序员编程的工具。使用它而不是试图替换它。
这些是您用于新代码的替换文件函数。添加对Microsoft Scripting Runtime
的引用。
打开指定的文件并返回一个TextStream对象,该对象可用于读取,写入或附加到文件。
object.OpenTextFile(filename[, iomode[, create[, format]]])
参数 宾语 需要。 Object始终是FileSystemObject的名称。
文件名 需要。用于标识要打开的文件的字符串表达式。
IOMODE 可选的。可以是三个常量之一:ForReading,ForWriting或ForAppending。
创建 可选的。布尔值,指示如果指定的文件名不存在,是否可以创建新文件。如果创建新文件,则值为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.