将大型Excel/Csv文件拆分为PHP或Javascript上的多个文件

Ken*_*nas 5 php csv excel

我有excel(file.xls)/ csv(file.csv)文件包含/将包含数十万个条目,甚至数百万我猜.是否可以将此分割为多个文件?像file.xls到file1.xls,file2.xls,file3.xls等.

有没有可以使用的库?这可能在PHP上吗?或者javascript怎么样?在哪里我可以指定每个文件中包含多少行?

谢谢

Mar*_*ker 22

将CSV文件拆分为多个CSV文件的快速而脏的方法

$inputFile = 'input.csv';
$outputFile = 'output';

$splitSize = 10000;

$in = fopen($inputFile, 'r');

$rowCount = 0;
$fileCount = 1;
while (!feof($in)) {
    if (($rowCount % $splitSize) == 0) {
        if ($rowCount > 0) {
            fclose($out);
        }
        $out = fopen($outputFile . $fileCount++ . '.csv', 'w');
    }
    $data = fgetcsv($in);
    if ($data)
        fputcsv($out, $data);
    $rowCount++;
}

fclose($out);
Run Code Online (Sandbox Code Playgroud)


hak*_*kre 4

是的,可以用 PHP 和 CSV 文件来做到这一点。您基本上迭代大文件并对每个 X 行进行分块,将这些行转发到另一个文件。

您可以在此答案中找到如何将大型 CSV 文件作为迭代器打开的信息:

然后您需要将迭代器的每个 X 行部分分块。这可以按照这里的概述来完成:

只需复制到<ul>...</ul>新文件中,而不是输出到多个 HTML 列表中。这基本上就像以下概述的那样工作:

不过这次你要使用SplFileObject::fputcsv方法。请注意为此使用最新的稳定 PHP,否则您需要做不同的事情,请参阅fputcsv()

如果原始文件的第一行包含列标题,您可能会对以下内容感兴趣:

它只是显示了一些扩展/处理传入文件的方法。您可能不需要在那里完成完整的抽象,只需保留第一行就可以了。