【问题标题】:Format text file so I can import it into excel格式化文本文件,以便我可以将其导入 excel
【发布时间】:2013-10-24 12:38:05
【问题描述】:

我有一个庞大的地址和详细信息列表,需要将其转换为 Excel 电子表格,我认为最好的方法是读取数据,然后编写第二个文档,将这些行分开,以便它们在制表符分隔的同时识别空白行(数据条目之间)以保留每个单独的地址。

格式如下:

地址A1
地址B1
邮编1
名称1
电话号码1

地址A2
地址B2
邮编2
名称2
名称2
电话号码2

地址A3
地址B3
邮编3
名称3
电话号码3

因此,当一家公司有多个名称时也会遇到困难,但我可以在必要时手动格式化(理想情况下,他们希望彼此使用相同的地址)。

然后,生成的文本文档希望以制表符分隔: 姓名|地址A|地址B|邮编|电话号码

我认为这在一个简单的 .bat 命令中最容易做到吗?或者我应该在 excel 中打开列表并通过它运行脚本..?

我正在考虑是否可以通过将每个条目添加到数组($address $name 等)的位置运行,然后我可以通过编写 $name[i] tab来使用它来构建一个新的文本文件> $address[$i]

有数百个条目,事实证明手动输入......很困难。

我在 MEL(基本上是 C++)方面有一些经验,所以我总体上了解编程,但对 .bat 和 Excel (VB?) 如何处理和定义空行和制表符有些茫然。

【问题讨论】:

  • 我知道如何在 PHP 中执行此操作,但不确定是否同样适用于 VB 脚本。我将在双行返回(空行)时拆分字符串,然后迭代生成的数组,通过单行返回拆分每个项目,用逗号将它们连接在一起,然后将外部数组与行返回连接。在 PHP 中,行返回是用 \n 完成的,但我不确定同样的事情是否适用于 VB,对不起。
  • 一个文件/一次性任务?使用 word(甚至 write.exe 也可以),用“特殊字符串”(如##@@##)替换双换行符,然后用制表符替换单个换行符,然后用单个换行符替换所有特殊字符串。另存为.csv
  • 我设法使用 word 进入 excel(感谢 Stephan!)不幸的是,由于额外的名称和不同的地址长度(有些只是列出名称和邮政编码,有些有 5 行等)它仍然很大混乱,但没有其他方法可以解决 - 必须手动格式化表格的其余部分。无论如何,感谢您的所有帮助!问候,皮特
  • 问题不是将其读入电子表格,而是对齐列。纠正我,但看起来一条记录至少包含 4 行,最多 6 行。格式为(必填)地址 1,(可选)地址 2,(必填)邮政编码,(必填)姓名 1,(可选)姓名 2,(必填)电话。那正确吗?邮政编码是由数字、字母还是两者兼而有之?电话号码是否仅由数字、破折号、加号和括号组成?

标签: arrays vb.net excel batch-file text


【解决方案1】:

第一步是将数据导入 Excel 文件。导入数据后,我们可以重新打包以满足您的规格。第一步:

Sub BringFileIn()
    Dim TextLine As String, CH As String
    Close #1
    Open "C:\TestFolder\question.txt" For Input As #1
    Dim s As String
    Dim I As Long, J As Long
    J = 1
    I = 1
    Do While Not EOF(1)
        Line Input #1, TextLine
        Cells(I, J) = TextLine
        I = I + 1
    Loop
    Close #1
End Sub

【讨论】:

    【解决方案2】:

    任何可以跨多行进行正则表达式搜索和替换的文本编辑器都可以很好地完成这项工作。

    我写了一个hybrid JScript/batch utility called REPL.BAT,它在标准输入上执行正则表达式搜索和替换,并将结果写入标准输出。它是纯脚本,适用于 XP 以后的任何现代 Windows 机器 - 不需要 3rd 方可执行文件。完整的文档嵌入在脚本中。

    假设 REPL.BAT 在您的当前目录中,或者更好的是,在您的 PATH 中的某个位置,那么:

    type file.txt|repl "\r?\n" "\t" mx|repl "\t\t" "\n" x|repl "^(([^\t]*\t){4})([^\t]*)$" "$1\t$3" x >newFile.txt
    

    以上3步修改文件,将结果写入新文件,保持原样:

    • 将所有换行符转换为制表符
    • 将连续的制表符转换为换行符
    • 在任何仅包含 5 列的行的最后一列之前插入一个空列(制表符)。

    【讨论】:

      【解决方案3】:

      这是一种仅使用 Word 和 Excel 的方法。我使用了您发布的数据。我假设 Name2 是唯一的可选字段。

      • 将文本粘贴到 Word 中。
      • 用特殊的替换所有段落标记 人物。 (Ctrl-h,搜索 ^p,替换为 |)
      • 用不同的特殊字符替换所有换行符。 (Ctrl-h,特殊字符,搜索手动换行,替换为;)

      这是它在 Word 中的样子:

      AddressA1;AddressB1;Postcode1;Name1;PhoneNumber1|AddressA2;AddressB2;Postcode2;Name2;Name2;PhoneNumber2|AddressA3;AddressB3;Postcode3;Name3;PhoneNumber3||
      

      然后将文本转换为表格(插入->表格->将文本转换为表格),用;分隔。这给出了 1 列的 3 行(加上 2 个空白行)。

      然后复制表格。

      现在在 Excel 中:

      • 粘贴表格。 (每行占一行,所有字段都在 A 列中。)
      • 将文本转换为列(数据选项卡、文本到列、分隔、复选分号)
      • 按 E 列排序。电话号码应组合在一起。
      • 剪切 E 列中的电话号码并复制到 F 列。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-28
        • 1970-01-01
        • 2011-03-04
        相关资源
        最近更新 更多