Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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
如何使用excel vba编辑文本文件_Excel_Vba - Fatal编程技术网

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

如何使用excel vba编辑文本文件,excel,vba,Excel,Vba,我需要编辑一个文本文件,即使用宏添加和更新数据。我有一个包含数千条记录的文本文件,一个单独的excel表,它给出了文本文件中数据的映射。例如,文本文件中的记录如下所示: ABCDNew Delhi India 这方面的映射excel表如下所示: Name 4 City 10 Country 10 这意味着记录中的前四个字符表示姓名,接下来的10个字符表示城市,接下来的10个字符表示某个人的国家,依此类推。现在,我必须编辑一个特定名称的记录(一个或两个字段),并将其保存在同一个文件

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

ABCDNew Delhi India
这方面的映射excel表如下所示:

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


excel工作表仅给出文本文件中字段的映射。它只显示字段长度。正如你在我的问题中所看到的,文本是连续的,没有任何分隔符。因此,excel工作表用于识别文本文件中的变量字段。示例记录如下所示:

ABCDDelhiindia110019876543210

映射为:

名字4 城市5 国家5 共模6 PhnNo 10

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


关于如何用最简单的方法完成这项工作,您有什么想法吗?

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

宏代码:

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:在excel2007上试用。您需要添加参考“Microsoft脚本运行时”。

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

在我看来,OP想要编辑和更新txt文件,而不仅仅是创建一个新的。嗨。。。谢谢你的帮助。我真的很感谢你的支持,但我有一个问题。我不能在文件中的字段之间使用任何分隔符,因为我在一个文件中有50多个字段,并且有20多个文件。是否有其他方法可以使用我拥有的单独映射表中的字段长度和位置信息。嗨。。首先,我想知道如何将文本文件中的数据映射到excel工作表。是否有唯一标识映射的方法。例如:文本文件中的哪一行数据属于工作表中的哪一行。如果可能的话,你能给我一些样本数据,这样我就可以处理它了。非常感谢。excel工作表仅给出文本文件中字段的映射。映射对于文件中的所有记录都是相同的。它只是提供了一种从文件中读取记录的方法。希望这有帮助…对不起,我能准确地了解你的问题。需要更多描述或一些示例数据。谢谢。我已经用Microsoft access数据库试过了。我在access DB中加载了数据,并在那里编辑了记录。按照要求,这工作正常,但access DB占用了大约800 MB的空间。是否要直接对文件进行更改。