如何将文本文件中的数据导入Excel?

时间:2009-08-06 20:55:37

标签: excel import

我有多个文件夹。这些文件夹中有多个txt文件。我需要从此文件夹中的特定类型的txt文件中提取数据(只有一个值:value ---> 554)。(individual_values.txt

No  100    Value   555      level match   0.443        top level  0.443       bottom 4343

将有许多文件夹具有相同的txt文件名但是diff值。可以将所有这些值复制到一个低于另一个。

我必须从上面提到的txt文件中提取一个值。它是一个同名的文本文件,位于不同的文件夹中。我想要做的就是从所有文本文件中提取此值,并将其粘贴到每行中的excel或txt中。

例如:上面是一个文本文件,我必须得到555的值,并且与其他diff值类似。

555

666

666

776

6 个答案:

答案 0 :(得分:8)

(您可能想澄清您的问题)

答案 1 :(得分:5)

你的问题不是很清楚,我想你想知道如何做到这一点。

您可能需要编写遍历文件夹的脚本,读取单个文件,解析它们以获取所需的值,并生成Comma Separated Values(CSV)文件。 CSV文件可以轻松导入Excel。

答案 2 :(得分:4)

您可以使用两种或三种基本方法将内容输入Excel电子表格。

  • 您可以使用OLE包装器来操作Excel。
  • 您可以以二进制形式编写文件
  • 您可以使用Excel的导入方法将分隔文本作为电子表格。

我选择了后一种方式,因为1)它是最简单的,2)你的问题陈述得很糟糕,因为它不需要更复杂的方式。下面的解决方案输出一个Excel可以轻松支持的制表符分隔的文本文件。

Perl:

use IO::File;

my @field_names = split m|/|, 'No/Value/level match/top level/bottom';
#' # <-- catch runaway quote

my $input    = IO::File->new( '<data.txt' );
die 'Could not open data.txt for input!' unless $input;

my @data_rows;
while ( my $line = <$input> ) { 
    my %fields = $line =~ /(level match|top level|bottom|Value|No)\s+(\d+\S*)/g;
    push @data_rows, \%fields if exists $fields{Value};
}

$input->close();

my $tab_file = IO::File->new( '>data.tab' );
die 'Could not open data.tab for output!' unless $tab_file;

$tab_file->print( join( "\t", @field_names ), "\n" );
foreach my $data_ref ( @data ) { 
    $tab_file->print( join( "\t", @$data_ref{@field_names} ), "\n" );
}

$tab_file->close();

注意: Excel的文本处理非常简洁。尝试打开下面的文字(用实际标签替换\t) - 甚至复制和粘贴它:

1\t2\t3\t=SUM(A1:C1)

答案 3 :(得分:1)

我选择了c#,因为我认为使用递归lambda会很有趣。这将创建包含与正则表达式模式匹配的csv文件。

    string root_path = @"c:\Temp\test";
    string match_filename = "test.txt";

    Func<string,string,StringBuilder, StringBuilder> getdata = null;

    getdata = (path,filename,content) => {
        Directory.GetFiles(path)
        .Where(f=>
            Path.GetFileName(f)
            .Equals(filename,StringComparison.OrdinalIgnoreCase))
        .Select(f=>File.ReadAllText(f))
        .Select(c=> Regex.Match(c, @"value[\s\t]*(\d+)",
            RegexOptions.IgnoreCase))
        .Where(m=>m.Success)
        .Select(m=>m.Groups[1].Value)
        .ToList()
        .ForEach(m=>content.AppendLine(m));
        Directory.GetDirectories(path)
            .ToList()
            .ForEach(d=>getdata(d,filename,content));
                return content;
    };
    File.WriteAllText(
        Path.Combine(root_path, "data.csv"),
        getdata(root_path, match_filename, new StringBuilder()).ToString());

答案 4 :(得分:0)

没有

确保您有50/50的机会获得正确的答案

(假设这是一个由是和否负责的问题)hehehe

答案 5 :(得分:0)

FILE_NOT_FOUND

要有响应的所有三个二进制状态。