Як в php робити імпорт

Багато, працюючи з PHP і MySQL, стикалися з проблемою експорту / імпорту даних в CSV файл, зрозумілий для Excel. Функції fputcsv () і fgetcsv () працюють не так, як нам хотілося б. І відкриваючи отриманий CSV-файл в Ексель ми бачимо половину рядка в одній комірці, а іншу частину рядка в другій. Іноді такі помилки інтерпретації даних Ексель пов'язані з його обмеженням кількості даних в одній комірці - 50 000 символів. якщо більше, то що залишилися дані відображаються в новому рядку.

Опис формату CSV для Excel

Програма Microsoft Excel розуміє CSV-файли як розділені осередки, розділені символом крапка з комою (;), а рядок закінчується символом переведення рядка. Якщо ж в самій комірці містяться символи крапка з комою (;) або переходу на новий рядок, то такий осередок обрамляється символом лапок ( ").

Наприклад.
ячейка1; "Ячейка2 з символом; або в кілька рядків"; ячейка3;

Якщо ж в самій комірці зустрічаються лапки ( "), то вони подвоюються.

Наприклад.
Це "лапки; => Це" "лапки;

Що робить стандартна функція експорту в CSV в PHP

Функція fputcsv ($ csv_file. $ Array, $ delimiter = ',', $ enclosure = ' "') виконує експорт масиву $ array в файл $ csv_file. При цьому в якості роздільника за замовчуванням використовуючи кому ($ delimiter = ',') , а в якості обрамляє символу - лапки ($ enclosure = ' "').

Здавалося б, щоб записати дані в формат CSV для MS Excel потрібно всього лише встановити $ delimiter = ';', а $ enclosure залишити рівним лапок ( "), але в реальності трапляються помилки інтерпретації файлу Ексель.

Ось у чому підступ: функція fputcsv як екрануючого символу - зворотний слеш (\). І це змінити ніяк не можна. Тобто, якщо ви будете писати дані види Лала \ "лала, то при записі в файл цей символ лапок не подвоїться, тому що він екранований зворотним слешем, а значить, Ексель вважатиме його кордоном осередки, хоча це не так.

Вихід. використовувати свою функцію експорту в CSV, далі буде наведено її текст.

Що робить стандартна функція імпорту в CSV в PHP

У PHP функція імпорту з CSV-фала fgetcsv ($ csv_file, $ length = 0, $ delimiter = ',', $ enclosure = ' "', $ escape = '\\') імпортує з CSV-файлу $ csv_file рядок максимальної довжини $ length, якщо = 0, значить, вона може бути будь-хто. За замовчуванням як роздільник використовує символ коми (,), як обрамляє символу - лапки ( "), і символ екранування - зворотний слеш (\).

Починаючи з PHP версії 5.3 символ екранування в цій функції можна задавати свій.

Щоб експортувати дані з допомогою PHP в формат CSV для Ексель, досить до всього іншого в якості екрануючого символу встановити лапки. Тобто $ delimiter = ';', $ enclosure = ' "', $ escape = '"'.

Підсумкові функції роботи з CSV

Як відкрити Ексель CSV-файл в кодуванні UTF-8

Щоб Excel нормально відкривав CSV-файли в кодуванні UTF-8 не достатньо просто записувати туди дані цьому кодуванні. Щоб "підказати" Ексель використовувати юнікод прийнято в початок файлу вставляти 3х байтную послідовність: EF BB BF. Це не є офіційне рішення, це просто особливість відкриття Ексель CSV-файлів.

Для наочності наведемо шматок коду для PHP:

Далі вже експортуємо дані в кодуванні UTF-8 за допомогою функції my_fputcsv (). Excel відмінно відкриває такі файли.

Важливо! Незважаючи на те, що файл відкриється в кдіровке utf-8, Excel його збереже все одно в кодуванні windows-1251.

Як в php робити імпорт

Схожі статті