Excel 用于将文本文件解析为列的选项

Excel 用于将文本文件解析为列的选项,excel,parsing,text,Excel,Parsing,Text,我正在寻找一些输入和可能的示例,用于解析具有以下格式的文本文件:(抱歉,不确定如何在此文本中保留文件的格式) 第一行(名称、ID、格式和短名称)始终只包含一行。描述文本可以跨越多行。在某些情况下,只有名称、ID等的第一行,而没有相应的描述行 下面是数据在文件中的外观示例: NAME ID FORMAT SHORT NAME DESCRIPTION ABC 01 xx AB

我正在寻找一些输入和可能的示例,用于解析具有以下格式的文本文件:(抱歉,不确定如何在此文本中保留文件的格式)

第一行(名称、ID、格式和短名称)始终只包含一行。描述文本可以跨越多行。在某些情况下,只有名称、ID等的第一行,而没有相应的描述行

下面是数据在文件中的外观示例:

NAME          ID         FORMAT         SHORT NAME  
    DESCRIPTION
ABC          01          xx           AB
    abcdefg
    hijklm
    nopqrs
DEF          02          xx           DE
    abcedfg
    hijklmnopqrst
GHI          03          xx.x         GH
JKL          001         xx           JKL
    abcdef
    ghijk
    lmnopq
    rstu
    vwxyz
我想在csv或excel文件中将名称、ID、格式、短名称和描述解析为5个单独的列,以便进行其他分析。我不在乎描述字段是否跨多行断开,但它也可以连接成一个较长的字符串


希望这一切都有意义。提前谢谢

提供名称、ID、格式和短名称的数据是一致的 在标题下,使用第一行的单词 计算每个字段的起始位置和长度,然后拆分 使用Mid()将行插入字段。连接描述行并写出 新记录开始之前的上一个记录。比如说

选项显式
子ParseTextFile()
Const infle=“c:\temp\testfile.txt”
Const OUTFILE=“c:\temp\testfile.xlsx”
将wbOut设置为工作簿,ws设置为工作表,iRow设置为长
Dim txt作为字符串,ff作为整数,i作为整数,desc作为字符串
起始尺寸(4)为整数,长度(4)为整数
Dim计数为整数,msg为字符串
设置wbOut=工作簿。添加
设置ws=wbOut.Sheets(“Sheet1”)
ws.Range(“A1:E1”)=数组(“名称”、“ID”、“格式”、“短名称”、“说明”)
ws.Columns(“A:E”).NumberFormat=“@”
iRow=1
ff=FreeFile()
打开填充以作为#ff输入
而不是EOF(ff)
计数=计数+1
行输入#ff,txt
如果计数=1,则
开始(1)=指令(1,txt,“名称”,vbTextCompare)
开始(2)=指令(1,txt,“ID”,vbTextCompare)
开始(3)=指令(1,txt,“格式”,vbTextCompare)
开始(4)=指令(1,txt,“短名称”,vbTextCompare)
对于i=1到3
长度(i)=开始(i+1)-开始(i)
下一个
其他的
如果左(txt,1)=“”,则
描述=描述和修剪(txt)和“”
其他的
'保存上一条记录中的描述
ws.Cells(iRow,5)=修剪(desc)
desc=“”
“新的一排
iRow=iRow+1
长度(4)=长度(txt)-开始(4)+1
对于i=1到4
ws.Cells(iRow,i)=中间(txt,开始(i),长度(i))
下一个
如果结束
如果结束
温德
关闭#ff
"最后说明,
ws.Cells(iRow,5)=修剪(desc)
'保存结果
ws.Columns(“A:E”).AutoFit
wbOut。关闭True,输出文件
msg=计数和“读取的行数”&infle&vbCr&_
iRow-1&“写入的行”&输出文件
MsgBox msg,vb信息
端接头

到目前为止,您尝试过什么?问题到底出在哪里?我尝试过使用excel导入,但描述行位于第一行之后的多行上,并且不作为第一行的一部分导入。我无法在帖子中显示格式,但实际上记录包含第一行(名称、ID、格式、简称和描述),但缩进的描述可能跨越多行。然后,下一条记录再次以名称、ID、格式、短名称开头,然后在下一行或几行上进行描述。请提供您到目前为止的情况和预期结果。我相信我所做的编辑使文本的格式接近它的样子,但它已经被删除,使问题变得比以前更不清楚。我认为使用一个好的文本编辑器在
描述
行的开头添加所需数量的选项卡可能是一种方法。这是否回答了您的问题?谢谢,我现在有了文件的正确格式。这将有助于描述问题。非常感谢您提供了这个示例。它在ws.Cells(iRow,i)=Mid(txt,start(i),length(i))调用时在循环内部生成错误。此时起点(i)和长度(i)为=0。我正在使用mac excel,因此不确定这是否是问题所在。似乎开始和长度变量正在重置?再次感谢!@它是否适用于您发布的示例。错误消息是什么?标题必须是第1行,这是设置start变量的唯一位置。它可能是文本文件上的CR/LF行结尾。是来自windows的文本文件吗?。是ASCII还是Unicode UTF-8?我的文件没有标题。现在大部分情况下,名称会在ID和格式字段之间拆分,因此我只需要调整字段长度。再次感谢这是伟大的!!!
NAME          ID         FORMAT         SHORT NAME  
    DESCRIPTION
ABC          01          xx           AB
    abcdefg
    hijklm
    nopqrs
DEF          02          xx           DE
    abcedfg
    hijklmnopqrst
GHI          03          xx.x         GH
JKL          001         xx           JKL
    abcdef
    ghijk
    lmnopq
    rstu
    vwxyz