如何将多个excel文件合并?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将多个excel文件合并?相关的知识,希望对你有一定的参考价值。

1、首先将这些excel文件都复制到一个文件夹下。

2、切换到【数据】菜单,点击【新建查询】,选择【从文件】下的【从文件夹】。

3、输入刚刚的文件夹路径,点击【确定】。

4、点击【合并】下的【合并和加载】选项。

5、选择要合并的工作表名称,最后点击【确定】。

6、这就完成了多个excel文件的合并。我们从筛选菜单中可以看到本例中的4个文件都这一份表格中啦。

参考技术A 可以使用 Python 的第三方库 pandas 将多个 excel 文件合并。
首先需要安装 pandas 库,在命令行中输入:
pip install pandas
然后可以使用 pandas 库中的 read_excel 函数读取 excel 文件,使用 concat 函数将多个 DataFrame 数据结构合并,再使用 to_excel 函数将合并后的 DataFrame 保存为新的 excel 文件。
示例代码:
import pandas as pd
# 读取第一个 excel 文件
df1 = pd.read_excel("file1.xlsx")
# 读取第二个 excel 文件
df2 = pd.read_excel("file2.xlsx")
# 将两个文件合并
df = pd.concat([df1, df2])
# 使用 to_excel 函数将合并后的 DataFrame 保存为新的 excel 文件
df.to_excel("merged_file.xlsx")
这样就可以在当前目录下生成一个名为 merged_file.xlsx 的 excel 文件,里面包含了 file1.xlsx 和 file2.xlsx 两个文件的数据。
如果需要合并的文件很多的话,可以使用 for 循环读取文件并进行合并。
合并多个 excel 文件时,如果文件中的表格列不一样,可以使用 merge 或 join 来进行合并,同时需要指定 key 列来进行关联。

Perl如何将两个或多个excel文件合并为一个(多个工作表)?

【中文标题】Perl如何将两个或多个excel文件合并为一个(多个工作表)?【英文标题】:Perl How to merge two or more excel files in one (multiple worksheets)? 【发布时间】:2012-10-14 13:52:49 【问题描述】:

我需要将几个 excel 文件合并为一张,多张。 我不太关心新文件上的工作表名称。

我计划运行它的计算机上没有 Excel。所以我不能使用 Win32 OLE。 我试图运行此代码https://sites.google.com/site/mergingxlsfiles/,但它不起作用,我得到一个新的空 excel 文件。

我尝试运行http://www.perlmonks.org/?node_id=743574,但我只获得了新excel文件中的一个文件。

我输入的 excel 文件有一些法语字符(例如 é)我相信这些是 cp1252。

使用的代码:

    #!/usr/bin/perl -w
    use strict;
    use Spreadsheet::ParseExcel;
    use Spreadsheet::WriteExcel;
    use File::Glob qw(bsd_glob);
    use Getopt::Long;
    use POSIX qw(strftime);

    GetOptions(
        'output|o=s' => \my $outfile,
        'strftime|t' => \my $do_strftime,
    ) or die;

    if ($do_strftime) 
        $outfile = strftime $outfile, localtime;
    ;

    my $output = Spreadsheet::WriteExcel->new($outfile)
        or die "Couldn't create '$outfile': $!";

    for (@ARGV) 
        my ($filename,$sheetname,$targetname);
        my @files;
        if (m!^(.*\.xls):(.*?)(?::([\w ]+))$!) 
            ($filename,$sheetname,$targetname) = ($1,qr($2),$3);
            warn $filename;
            if ($do_strftime) 
                $filename = strftime $filename, localtime;
            ;
            @files = glob $filename;
         else 
            ($filename,$sheetname,$targetname) = ($_,qr(.*),undef);
            if ($do_strftime) 
                $filename = strftime $filename, localtime;
            ;
            push @files, glob $filename;
        ;

        for my $f (@files) 
            my $excel = Spreadsheet::ParseExcel::Workbook->Parse($f);
            foreach my $sheet (@$excel->Worksheet) 
                if ($sheet->Name !~ /$sheetname/) 
                    warn "Skipping '" . $sheet->Name . "' (/$sheetname/)";
                    next;
                ;
                $targetname ||= $sheet->Name;
                #warn sprintf "Copying %s to %s\n", $sheet->Name, $targetname;

                my $s = $output->add_worksheet($targetname);
                $sheet->MaxRow ||= $sheet->MinRow;
                foreach my $row ($sheet->MinRow .. $sheet->MaxRow) 
                    my @rowdata = map 
                        $sheet->Cells->[$row]->[$_]->Val;
                     $sheet->MinCol ..  $sheet->MaxCol;
                    $s->write($row,0,\@rowdata);
                
            
        ;
    ;

    $output->close;

我有 2 个名为的 excel 文件:2.xls(其中只有一张名为 2 的工作表)、3.xls(只有一张名为 3 的工作表)

我是这样启动脚本的:

xlsmerge.pl -s -o results-%Y%m%d.xls 2.xls:2 3.xls:3

结果:results-20121024.xls 中没有任何内容。

然后我尝试了

xlsmerge.pl -s -o results-%Y%m%d.xls 2.xls 3.xls 

它奏效了。 我不确定为什么在添加 Sheetname 时会失败

【问题讨论】:

也许您可以显示您尝试过的确切代码,或者您使用 PerlMonks 脚本运行的确切命令?这两个脚本大概可以工作 - 所以它一定是特定于您的案例的东西导致了问题。 @dan1111 我添加了代码,并重新测试,看起来没有工作表名称。 【参考方案1】:

这行脚本好像有bug:

if (m!^(.*\.xls):(.*?)(?::([\w ]+))$!) 
     ($filename,$sheetname,$targetname) = ($1,qr($2),$3);
     ...

在我看来,该行的目标是允许表单中的参数

spreadsheet.xls:source_worksheet

或以其他形式允许指定目标工作表的名称:

spreadsheet.xls:source_worksheet:target_worksheet

最后一个分组似乎旨在捕获最后一个可选参数:(?::([\w ]+))。唯一的问题是,这个分组不是可选的。因此,当您只指定源工作表而不指定目标时,正则表达式无法匹配,它会落入备份行为,即将整个参数视为文件名。但这也失败了,因为您没有名为 2.xls:2 的文件。

解决方案是在正则表达式的最后一组之后引入? 修饰符,使其成为可选:

if (m!^(.*\.xls):(.*?)(?::([\w ]+))?$!) 
     ($filename,$sheetname,$targetname) = ($1,qr($2),$3);
     ...

当然,这可能不是唯一的问题。如果脚本发布时出现错误,则也可能存在其他错误。我目前没有可用的 Perl 来测试它。

【讨论】:

以上是关于如何将多个excel文件合并?的主要内容,如果未能解决你的问题,请参考以下文章

Perl如何将两个或多个excel文件合并为一个(多个工作表)?

如何将rtf文件合并

怎么把几个Excel合并成一个文件?

如何使用python合并多个excel文件

如何将bin文件合并

linux中怎么将文件合并