在 Symfony 数据库中导入 Excel 数据

Posted

技术标签:

【中文标题】在 Symfony 数据库中导入 Excel 数据【英文标题】:Import Excel data in Symfony database 【发布时间】:2018-02-14 20:43:02 【问题描述】:

我正在做一个项目,我需要将 Excel 数据导入我的 Symfony 数据库。但问题是我不知道该怎么做。 我尝试使用 ExcelBundle。该项目是:用户必须使用表单按钮来发送他的 Excel 文件,我需要提取没有标题的数据来填充我的数据库。 你能帮帮我吗?

【问题讨论】:

how to use phpexcel to read data and insert into database?的可能重复 我已经检查过了,但我正在使用 Symfony。 不管你用什么fremework,都可以在Symfony项目中使用PHPExcel库并包含在服务中 【参考方案1】:

如果您可以将您的 excel 电子表格转换为 CSV 格式,那么有一个非常好的软件包可以处理它!

看看这个:http://csv.thephpleague.com/9.0/

这是他们的示例,展示了将表放入数据库是多么容易

<?php

use League\Csv\Reader;

//We are going to insert some data into the users table
$sth = $dbh->prepare(
    "INSERT INTO users (firstname, lastname, email) VALUES (:firstname, :lastname, :email)"
);

$csv = Reader::createFromPath('/path/to/your/csv/file.csv')
    ->setHeaderOffset(0)
;

//by setting the header offset we index all records
//with the header record and remove it from the iteration

foreach ($csv as $record) 
    //Do not forget to validate your data before inserting it in your database
    $sth->bindValue(':firstname', $record['First Name'], PDO::PARAM_STR);
    $sth->bindValue(':lastname', $record['Last Name'], PDO::PARAM_STR);
    $sth->bindValue(':email', $record['E-mail'], PDO::PARAM_STR);
    $sth->execute();

试一试!

【讨论】:

我现在使用 Symfony 5,对 foreach 进行必要的更改,但非常完美。谢谢【参考方案2】:

您可以使用fgetcsv PHP 函数,例如here。

必须将 Excel 文件更改为 CSV 文件。

【讨论】:

【参考方案3】:

正如评论中提到的,您可以使用 PHPExcel。使用 composer 安装库

composer require phpoffice/phpexcel

典型的读者可能看起来像

class GameImportReaderExcel


    public function read($filename)
    
        // Tosses exception
        $reader = \PHPExcel_IOFactory::createReaderForFile($filename);

        // Need this otherwise dates and such are returned formatted
        /** @noinspection PhpUndefinedMethodInspection */
        $reader->setReadDataOnly(true);

        // Just grab all the rows
        $wb = $reader->load($filename);
        $ws = $wb->getSheet(0);
        $rows = $ws->toArray();

        foreach($rows as $row) 
            // this is where you do your database stuff
            $this->processRow($row);
        

从您的控制器调用阅读器类

public function (Request $request)

    $file = $request->files->has('file') ? $request->files->get('file') : null;
    if (!$file) 
        $errors[] = 'Missing File';
    

    $reader = new GameImportReaderExcel();
    $reader->read($file->getRealPath());

这应该让你开始。是的,您可以转换为 csv,但为什么要麻烦。阅读原始文件同样容易,并为您的用户节省了额外的步骤。

【讨论】:

此包已存档,请改用 PHPspreadsheet:https://github.com/PHPOffice/PhpSpreadsheet

以上是关于在 Symfony 数据库中导入 Excel 数据的主要内容,如果未能解决你的问题,请参考以下文章

Symfony Doctrine 从数据库中导入“join”表

如果工作表包含下拉列表,则在访问中导入 Excel 数据时出现问题

在 laravel 5.8 中导入 excel 文件后无法管理文件数据

怎么往plsql表中导入excel数据

如何在数据库中导入excel文件内的数据

如何在EXCEL的数据中导入到我自己设定的EXCEL模板中!?