Excel (XLS) <-> CSV конвертация с помощью javascript-а и php

Наверняка любой php программист сталкивался с ситуацией, когда заказчик просит “экспорт товара из экзеля” или чего бы то ни было. И стон идет по всей земле русской (и нерусской)…

Первое, что приходит в голову – это каждый раз запускать Excel и сохранять файл в формате CSV, с которым php уже намного легче работать. Это – замечательное решение, когда число файлов меньше 10 и все они состоят только из одной страницы (поскольку экзель может экспортировать в CSV только страницы, те результат конвертации файла из 10 страниц будет 10 CSV файлов).

Вторая мысль: скачать какую-нибудь софтину, которая бы преобразовывала набор Excel файлов в CSV, включая все страницы. Но, погуглив чуток, сразу видно, что софтины эти все сплошь коммерческие. Можно, конечно, сломать.

Но есть и другой пусть: написать самому. Это очень легко реализуется, если использовать javascript и ActiveX компонент Excel.Application:

xls2csv.js

Этот скрипт необходимо поместить в папку с набором XLS файлов, создать папку output и tmp и набрать в коммандной строке:

cscript xls2csv.js

По завершении работы скрипта в output у нас появятся искомые CSV файлы, папку tmp можно почистить.

Для генерации Excel файлов на сервере я предпочитаю легкий класс ExcelWriter, написанный индусом Harish Chauhan-ом, тяжелому PEAR-овскому пакету Spreadsheet Excel Writer-у.

Tags: , , , , , , ,

2 Responses to “Excel (XLS) <-> CSV конвертация с помощью javascript-а и php”

  1. dominoid says:

    а не могли бы разжевать чуток насчёт ActiveX компонент Excel.Application? или сказать где посмотреть информацию. я чтото ничево не добился с js-файликом, вообще ничево не выдаёт мне

  2. stillwaiting says:

    dominoid
    > а не могли бы разжевать чуток насчёт ActiveX компонент Excel.Application?

    э… что именно разжевать? Компонент предоставляет интерфейс для работы с экзелевскими файлами. Как с ним работать и пр. – гугль лучше расскажет.

    > я чтото ничево не добился с js-файликом

    Ошибки в студию? Кстати, содержимое файла нужно сделать содержимым функции и вызывать ее (там есть return, понятно, что в таком виде может и не заработать). А вообще эта статья – просто описание подхода, а не готовое решение.

Leave a Reply

You must be logged in to post a comment.