Найти в Дзене
ITnyasha

PHP/Excel скрипт для объединения данных по общему значению

Оглавление

Предположим, что у нас есть эталонная Excel таблица под № 1 с наименованиями и инвентарными номерам и есть Excel таблица под № 2 с инвентарными номерами и штрих кодами. Вам необходимо дополнить таблицу под № 1 штрих кодами из таблицы под № 2.

Если таблицы полностью идентичны, тогда ничего делать не надо. Просто берем таблицу под № 2, а про таблицу под № 1 забываем.

Хорошо, но предположим, что в таблице под № 2 есть промежуточные (неактуальные) данные, которые после сортировки никак не совпадают с таблицей под № 1 и предположим, что таких строк 250, а всего, переносимая информация имеет больше 10 000 строк. В таком случае метод с сортировкой уже не подойдет, да и стандартных функций Excel для подобной операции уже не хватит. Для решения этой задачи есть 3 варианта.

-2

Вариант 1: Вручную перелопатить 10 000 строк, сравнивая их и занося руками штрих коды.

Вариант 2: Написать VBA скрипт, если у вас есть навыки программирования.

Вариант 3: Воспользоваться PHP скриптом, который я написал для сопоставления тысячи инвентарных номеров для терминалов сбора данных, но позже нашел ему применение в огромном количестве вариантов своей работы по сверке документов, заполнению реестров и т.д. Скрипт пакетно обрабатывает целевые файлы, то есть может брать информацию из эталона и заносить ее сразу в несколько целевых Excel файлов по совпадающим колонкам.

Как работает?

На примере изображения выше и строки 1: скрипт берет значение ячейки "B1" из таблицы под № 1 и совершает поиск значения во всей колонке "B" в таблице под № 2. Когда совпадающее значение будет найдено, скрипт возьмет значение в колонке "Сn" (где n - это найденная строка в колонке B) и перенесет его в колонку С1 в соответствующую строку таблицы под № 1. Это будет проделано с каждой строкой в файле (будь их 100 или

20 000 - неважно, работа будет завершена за пару секунд).

Кроме того данный скрипт может быть полезен при сверке двух больших реестров документов. Предположим у нас есть Excel файл, который содержит в себе 340 строк с реквизитами документов (воображаемая таблица "A" (эталон)) и мы хотим узнать какие документы из таблицы "A" присутствуют в другом реестре (воображаемая таблица "B").

В обеих таблицах у нас есть колонка с номерами документов и для решения этой задачи нам необходимо в таблице "A", в пустой колонке, проставить какой-либо символ / слово и протянуть его вниз на всю таблицу. Далее запускаем PHP скрипт, который проставит данный символ в таблицу "В", когда будут найдены совпадения. Строки в таблице "В",

в которых символа не будет, и будут являться отличными от эталона.

Настройка

Обработчик работает на библиотеке PHPExcel и для запуска скрипта вам понадобится сервер Apache+PHP. Как их настроить и где взять вы можете найти в интернете (самый простой вариант установить OpenServer).

Загрузка и запуск

Исходные файлы для запуска и конфигурации вы можете скачать c Github.

  1. В корневой каталог помещаем таблицу (эталон), из которой берется столбик для поиска совпадений, и столбик, из которого будет заноситься информация в целевую таблицу(ы).
  2. В папку "files" помещаем целевые(ой) файлы(л), в которые(ый) будем переносить информацию из эталона.
  3. Открываем файл pack.php с помощью notepad++ или любого другого редактора кода и вносим необходимые изменения в порядковые номера колонок и меняем имя эталонного файла при необходимости.
-3

4. Запускаем сервер и открываем браузер.

5. Если вы не меняли наименования каталогов и папок, тогда вводите в строку браузера адрес http://sapp/pack.php и ждете пару секунд до завершения процесса обработки. Продолжительность обработки может меняться в зависимости от размера файлов (например, обработка файла в 12 250 строк занимает всего 5 секунд).