MNB PHPExcelDeveloper Guide

Imports examples

Imports Excel examples, explained clearly.

Open a focused example to see the implementation path, copy-ready PHP, expected workbook behavior, and the production boundary that matters.

6examples in this category
21focused categories
5implementation paths
01
Preview import quality

Inspect missing columns, unexpected columns, duplicate candidates, empty values, and sample rows before validation or database writes.

EasyDirect API
MnbExcel::previewImport()ReadSession::previewImport()
preview-import-quality.php
<?php

use Mnb\PHPExcel\MnbExcel;

$rows = MnbExcel::read(__DIR__ . '/fixtures/students.csv')
    ->withHeaderRow()
    ->toArray();

$preview = MnbExcel::previewImport($rows, [
    'required_columns' => ['student_id', 'name', 'email'],
    'allowed_columns' => ['student_id', 'name', 'email', 'phone'],
    'strict_columns' => true,
    'duplicate_by' => ['student_id'],
]);

print_r([
    'status' => $preview['status'],
    'total_rows' => $preview['total_rows'],
    'total_columns' => $preview['total_columns'],
    'warnings' => $preview['warnings'],
]);
02
Suggest a column map

Build an import-screen mapping proposal from source headings, canonical database fields, and known aliases with confidence scores.

MediumDirect API
MnbExcel::suggestColumnMap()
suggest-a-column-map.php
<?php

use Mnb\PHPExcel\MnbExcel;

$map = MnbExcel::suggestColumnMap(
    ['Student Number', 'Full Name', 'Email Address', 'Mobile No'],
    ['student_id', 'name', 'email', 'phone'],
    [
        'student_id' => ['student number', 'registration no'],
        'email' => ['email address', 'mail'],
        'phone' => ['mobile', 'mobile no', 'phone number'],
    ],
    minConfidence: 0.60
);

print_r($map);
03
Validate rows and export failures

Validate imported rows with reusable rules and create a filterable XLSX containing source row numbers and human-readable errors.

MediumDirect API
MnbExcel::validateImport()MnbExcel::fromFailedRows()freezeHeader()autoFilter()
validate-rows-and-export-failures.php
<?php

use Mnb\PHPExcel\MnbExcel;

$rows = MnbExcel::read(__DIR__ . '/fixtures/students.xlsx')
    ->withHeaderRow()
    ->toArray([
        'preserve_original_row_numbers' => true,
    ]);

$result = MnbExcel::validateImport($rows, [
    'student_id' => 'required|string|max:30',
    'name' => 'required|string|max:100',
    'email' => 'required|email|unique_in_file',
    'marks' => 'nullable|numeric|min:0|max:100',
], [
    'row_number_key' => '_mnb_original_row_number',
]);

MnbExcel::fromFailedRows($result['failed'])
    ->freezeHeader()
    ->autoFilter()
    ->autoWidth(['min' => 12, 'max' => 48])
    ->save(__DIR__ . '/output/failed-students.xlsx');
04
Detect duplicate records

Find repeated records using one or more business-key columns and report the source row positions involved.

EasyDirect API
MnbExcel::duplicateRows()ReadSession::duplicateRows()
detect-duplicate-records.php
<?php

use Mnb\PHPExcel\MnbExcel;

$rows = MnbExcel::read(__DIR__ . '/fixtures/contacts.csv')
    ->withHeaderRow()
    ->toArray([
        'preserve_original_row_numbers' => true,
    ]);

$duplicates = MnbExcel::duplicateRows($rows, ['email']);

print_r($duplicates);
05
Import products and update by SKU

Use the built-in product schema to map aliases, normalize values, validate rows, and update existing records by SKU.

AdvancedDirect API
MnbExcel::previewDomainImport()MnbExcel::importProducts()
import-products-and-update-by-sku.php
<?php

use Mnb\PHPExcel\MnbExcel;

$pdo = new PDO('sqlite:' . __DIR__ . '/storage/catalog.sqlite');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec(
    'CREATE TABLE IF NOT EXISTS products (' .
    'sku TEXT PRIMARY KEY, name TEXT, price REAL, quantity INTEGER, image_url TEXT' .
    ')'
);

$preview = MnbExcel::previewDomainImport(
    'products',
    __DIR__ . '/fixtures/products.xlsx',
    ['sheet' => 'Products', 'limit' => 25]
);

if (($preview['failed_rows'] ?? 0) === 0) {
    $result = MnbExcel::importProducts(
        __DIR__ . '/fixtures/products.xlsx',
        $pdo,
        'products',
        [
            'duplicate_strategy' => 'update',
            'unique_by' => ['sku'],
            'batch_size' => 500,
            'failed_rows_csv' => __DIR__ . '/output/failed-products.csv',
        ]
    );

    print_r($result);
}
06
Generate a validated import template

Create a product import workbook from the same canonical field metadata used by preview and import validation.

EasyDirect API
MnbExcel::domainImportTemplate()freezeHeader()autoWidth()save()
generate-a-validated-import-template.php
<?php

use Mnb\PHPExcel\MnbExcel;

MnbExcel::domainImportTemplate('products', [
    'title' => 'Product Catalog Import',
    'instructions' => 'Keep the SKU unique. Price and quantity must be numeric.',
    'sample_rows' => 2,
])
    ->freezeHeader()
    ->autoWidth(['min' => 12, 'max' => 42])
    ->save(__DIR__ . '/output/product-import-template.xlsx');