如何使用excel vba编辑文本文件

时间:2013-10-21 06:47:53

标签: excel-vba vba excel

我需要编辑一个文本文件,即使用宏添加和更新数据。我有一个包含数千条记录的文本文件,一个单独的Excel工作表,它提供了文本文件中数据的映射。例如,文本文件中的记录如下所示:

ABCDNew Delhi India

映射excel表格如下:

Name    4
City    10
Country 10

这意味着记录中的前四个字符给出了名称,接下来的10个给出了城市,接下来的10个给了特定人的国家,依此类推。现在,我必须编辑特定名称的记录(一个或两个字段)并将其保存在同一文件中。我还以上面指定的格式添加了一条新记录,然后保存文件。

excel表只提供文本文件中字段的映射。它只告诉字段长度。正如你在我的问题中看到的那样,文本是连续的,没有任何分隔符。因此excel表用于标识文本文件中的variuos字段。样本记录如下:

ABCDDelhiIndia1100019876543210

,映射是:

姓名4 城市5 国家5 PinCode 6 PhnNo 10

映射对于文件中的所有记录都是相同的。它只是提供了如何从文件中读取记录的方法。

关于如何以最简单的方式做到这一点的任何想法?

2 个答案:

答案 0 :(得分:2)

您可以在姓名,城市和国家之间设置一些分隔符,例如:ABCD:新德里:印度。 有分隔符可以让您分隔名称,城市和国家。现在您可以轻松确定每个字符串的长度。现在根据您的要求,您可以轻松编辑数据并写入文件。您可以参考以下代码以供参考: 文本文件:exceltest abcd:新德里:印度 测试:NY:USA

宏代码:

Sub readTextFile()

Dim oFSO As New FileSystemObject

Dim oFS

Dim objFSO As New FileSystemObject

Set myTemp = objFSO.CreateTextFile("C:\Users\Rohit\Desktop\exceltestTemp.txt", True)

Set oFS = oFSO.OpenTextFile("C:\Users\Rohit\Desktop\exceltest.txt")

Do Until oFS.AtEndOfStream

stext = oFS.ReadLine

Dim testarray() As String

testarray = Split(stext, ":")

Dim i As Integer 

i = Len(testarray(0)) 'determine length of each String, here as a sample only length of one string is determined

Cells(4, "a").Value = i 'writing a length to excel sheet, you can write to any location

Cells(1, "a").Value = testarray(0) 'writing contents to excel sheet

Cells(2, "a").Value = testarray(1) 'writing contents to excel sheet

Cells(3, "a").Value = testarray(2) 'writing contents to excel sheet

'Search for the Name

If testarray(0) = "test" Then

testarray(1) = "Mumbai"

End If

myTemp.WriteLine testarray(0) & ":" & testarray(1) & ":" & testarray(2) 'writing to a temp text file

Loop

End Sub

现在,根据您的要求,您可以搜索名称并编辑数据并写入文件。然后,您可以删除原始文件并将临时文件保存为原始文件。

PS:在Excel 2007上尝试过。您需要添加引用“Microsoft Scripting Runtime”。

答案 1 :(得分:0)

您所描述的是固定宽度数据。这很简单,可以使用导入对话框中的“固定宽度”选项将数据导入excel中的文本文件。然后,您可以为每个字段选择开始和结束。更棘手的部分是将其导出为相同的格式。我知道实现这一目标的唯一方法是通过VBA。虽然它似乎是直接的例行程序,但它可能已被写了很多次。