簡體   English   中英

如何將文本文件中的數據導入Excel?

[英]How can I import data from text files into Excel?

我有多個文件夾。 這些文件夾中有多個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

是。

(你可能想澄清你的問題)

你的問題不是很清楚,我想你想知道如何做到這一點。

您可能需要編寫遍歷文件夾的腳本,讀取單個文件,解析它們以獲取所需的值,並生成逗號分隔值 (CSV)文件。 CSV文件可以輕松導入Excel。

您可以使用兩種或三種基本方法將內容輸入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)

我選擇了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());

沒有。

只是確保你有50/50的機會得到正確的答案

(假設這是一個由是和否負責的問題)呵呵呵

文件未找到

必須有響應的所有三個二進制狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM