悠悠楠杉
PHP使用PHPExcel读取excel数据并批量上传到数据库
首先,确保你已经安装了 PHPExcel。如果还没有安装,可以通过 Composer 来安装:
bash
composer require phpoffice/phpspreadsheet
步骤 2: 创建数据库连接
使用 PDO 或 mysqli 扩展来连接你的数据库。这里以 PDO 为例:
php
$dsn = 'mysql:host=your_host;dbname=your_dbname;charset=utf8';
$username = 'your_username';
$password = 'your_password';
$dbh = new PDO($dsn, $username, $password);
步骤 3: 读取 Excel 文件
使用 PHPExcel 的 Reader
类来读取 Excel 文件。由于 PHPExcel 已被弃用,这里我们使用 PHP Spreadsheet:
```php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Reader\IReader;
use PhpOffice\PhpSpreadsheet\Cell\Cell;
use PhpOffice\PhpSpreadsheet\Cell\DataType;
$reader = IOFactory::createReader('Xlsx'); // 如果是 XLSX 文件
$spreadsheet = $reader->load('pathtoyourexcelfile.xlsx'); // 指定文件路径
$worksheet = $spreadsheet->getActiveSheet();
$data = []; // 存储数据数组
foreach ($worksheet->getRowIterator() as $row) {
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false); // 遍历所有单元格,即使它们是空的
$rowData = [];
foreach ($cellIterator as $cell) {
$rowData[] = $cell->getValue(); // 获取单元格值并添加到数组中
}
$data[] = $rowData; // 添加到数据数组中
}
```
步骤 4: 数据处理和格式化
对读取的数据进行必要的处理和格式化,以适应你的需求:
php
foreach ($data as &$row) {
// 假设第一列是标题,第二列是关键词,第三列是描述,第四列是正文...可以根据实际调整索引或使用更明确的方法如 $row['title'] 访问
$row['title'] = trim($row[0]); // 标题
$row['keywords'] = trim($row[1]); // 关键词(可能需要进一步处理以分词或去重)
$row['description'] = trim($row[2]); // 描述(可能需要进一步处理)
$row['content'] = trim($row[3]); // 正文(可能需要进一步处理)
// 根据需要添加更多的处理逻辑...例如内容长度限制、Markdown 格式化等...(此例略)
}
php
foreach ($data as $item) { // 对每条记录进行 Markdown 格式化(假设仅做简单示例):: // 以下代码仅为示例,具体实现需根据实际需求调整 $item['content'] = "### " . $item['title'] . "\n" . $item['description'] . "\n" . $item['content']; // Markdown格式化 // 保存到数据库 $sql = "INSERT INTO your_table (title, keywords, description, content) VALUES (?, ?, ?, ?)"; $stmt = $dbh->prepare($sql); $stmt->bindParam(1, $item['title']); $stmt->bindParam(2, $item['keywords']); $stmt->bindParam(3, $item['description']); $stmt->bindParam(4, $item['content']); $stmt->execute(); }