Инструменты пользователя

Инструменты сайта


csv

XLSX, CSV в MySQL с помощью PHP

CSV (Comma-Separated Values — значения, разделённые запятыми) — текстовый формат, предназначенный для представления табличных данных. Каждая строка файла — это одна строка таблицы. Значения отдельных колонок разделяются разделительным символом (delimiter). Под CSV, как правило, понимают набор значений, разделенных какими угодно разделителями, в какой угодно кодировке с какими угодно окончаниями строк.

CSV и PHP.

  • fgetcsv — Читает строку из файла и производит разбор данных CSV. Эта функция принимает во внимание настройки локали. К примеру, если LANG установлена в en_US.UTF-8, то файлы в однобайтовой кодировке будут неправильно прочитаны этой функцией.

Примеры импорта экспорта CSV

Формат файла .xlsx

Формат файла .xlsx основан на Open XML. Для уменьшения размера файла используется сжатие zip.

Файлы xlsx совместимы и с более старыми версиями Microsoft Office - 2000, XP, 2003. Но для этого необходимо установить специальный компонент.

Поскольку файл XLSX содержит несколько файлов, его нельзя импортировать непосредственно в MySQL. Поэтому рекомендуется преобразовать файл XLSX в CSV, а затем импортировать его в базу данных.

Пример импорта xlsx в MySQL

Используется PHP класс SimpleXLSX class 0.7.13 (Official)

  1. скачиваем класс SimpleXLSX
    git clone https://github.com/shuchkin/simplexlsx.git
  2. Код преобразующий xlsx в csv
    <?php
     
    include_once('simplexlsx.class.php');
     
    $file_out='output_file.csv';
     
    $xlsx = SimpleXLSX::parse('input_file.xlsx');
    $fp=fopen($file_out,'w');
    foreach( $xlsx->rows() as $fields ) {
    fputcsv($fp, $fields);
    }
    fclose($fp);
  3. Преобразуем файл XLSX в PHP массив и импортировать его в базу данных, используя расширения PDO PHP. Предварительно очищаем таблицу и после загрузки удаляем строку с названиями столбцов.
    try {
        $etdb = new PDO('mysql:host=' .
                ET_MYSQL_HOST .
                ';dbname=' . ET_MYSQL_DATABASE, ET_MYSQL_USER, ET_MYSQL_PASSWORD);
    } catch (PDOException $e) {
        print "Error!: " . $e->getMessage() . "<br />";
    }
    // Clear Table
    $etdb->query('TRUNCATE TABLE df_garne;');
     
    $xlsx = SimpleXLSX::parse('garne_prices_bags.xlsx');
     
    // Insert rows from xlsx
    $stmt = $etdb->prepare( "INSERT INTO df_garne
    (sku, name, color, price_opt, price_retail, size, type, category, brand, url_to_shop, consist,
    description, fotos, sex)
    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
        $stmt->bindParam( 1, $sku);
        $stmt->bindParam( 2, $name);
        $stmt->bindParam( 3, $color);
        $stmt->bindParam( 4, $price_opt);
        $stmt->bindParam( 5, $price_retail);
        $stmt->bindParam( 6, $size);
        $stmt->bindParam( 7, $type);
        $stmt->bindParam( 8, $category);
        $stmt->bindParam( 9, $brand);
        $stmt->bindParam( 10, $url_to_shop);
        $stmt->bindParam( 11, $consist);
        $stmt->bindParam( 12, $description);
        $stmt->bindParam( 13, $fotos);
        $stmt->bindParam( 14, $sex);
     
     
        foreach ($xlsx->rows() as $fields)
        {
            $sku = $fields[1];
            $name = $fields[2];
            $color = $fields[3];
            $price_opt = $fields[4];
            $price_retail = $fields[5];
            $size = $fields[6];
            $type = $fields[7];
            $category = $fields[8];
            $brand = $fields[9];
            $url_to_shop = $fields[10];
            $consist = $fields[11];
            $description = $fields[12];
            $fotos = $fields[13];
            $sex = $fields[14];
     
            $stmt->execute();
        }
     
    // Delete row with names of field
    $etdb->query("DELETE FROM df_garne WHERE sku='Артикул';");        
загрузка...
csv.txt · Последние изменения: 2018/08/12 10:56 — darkfire