Открытие excel файла на сервере, его обработка, сохранение и отправка копии на e-mail

martensit

Новичок
Открытие excel файла на сервере, его обработка, сохранение и отправка копии на e-mail

Всем доброго времени.

Столкнулся с непростой задачей по обработке xls файла методами php.
Основная сложность в том, что я не знаю PHP и всех его возможностей (какие-то знаю), поэтому заказываю обработку "на стороне".

Суть задачи: есть интернет магазин с базой данных mysql, после оформления заказа, на ящики пользователя и админа сваливается письмо с заказом.
В общем все стандартно.

В одной из папок на сервере лежит прайс-лист.xls (около 5Мб). В нем те же товары, что и на сайте, артикулы одинаковые.
Требуется, чтобы при формировании заказа на ящик админа приходила копия заказа "оформленная" в этом прайсе.
Т.е. должна происходить "идентификация по артикулу" товара с сайта и товара в прайс-листе,
затем "подставлялось" заказанное количество единиц товара в заданную ячейку прайс-листа,
затем файл сохранялся под новым именем и отправлялся на почту вместе со стандартным письмом о подтверждении заказа.

Два программиста сказали, что это будет очень долго и почти невозможно, т.к. PHP не поддерживает изменение уже готового ексель-файла
и кроме того файл весит 5Мб.

Я хотел бы узнать, как можно выполнить эту задачу...и можно ли вообще.

Спасибо за ответы.
 

martensit

Новичок
Спасибо, но я писал, что я не программист. Я подозревал о существовании Excel Writer, но не я же с ним буду работать.

Мне сказали, что проделать все вышеописанное с готовым файлом - это геморрой.
Нужно создавать новый с чистого листа и только с ним работать.
А с готовым excel файлом типа "трудно".

Вот я и спрашиваю, насколько это соответствует действительности.

Т.е. мне нужно искать другого программера или задача в таком виде нерешаема. Что верно?
 

Lakr

Новичок
Позвольте уточнить, зачем вносить изменения в ексель и при каждом заказе его пересылать? мне просто непонятен стратегический смысл... зачем вообще хранить базу товаров в екселе, даже если представить что вам его предоставляют оптовики только в екселе, вы её загружаете в базу мускла и всё, ексельник можно отправлять на заслуженный покой кудато в архив. При любом заказе если это действительно необходимо можно создавать какойто ексельный файл с нужными данными товаров из базы данных и пересылать куда надо, причём генерировать ексель можно по любому событию вам необходимому в котором будут содержаться любые нужные вам данные. Зачем гонять весь прайс в 5метров?
 

martensit

Новичок
Автор оригинала: Lakr
Позвольте уточнить, зачем вносить изменения в ексель и при каждом заказе его пересылать? мне просто непонятен стратегический смысл... зачем вообще хранить базу товаров в екселе, даже если представить что вам его предоставляют оптовики только в екселе, вы её загружаете в базу мускла и всё, ексельник можно отправлять на заслуженный покой кудато в архив. При любом заказе если это действительно необходимо можно создавать какойто ексельный файл с нужными данными товаров из базы данных и пересылать куда надо, причём генерировать ексель можно по любому событию вам необходимому в котором будут содержаться любые нужные вам данные. Зачем гонять весь прайс в 5метров?
Предполагал, что возникнет такой вопрос.

Существует склад, под него заточен удобный бланк заказа (он же прайс на 5Мб), товаров около 7000шт.
Этот бланк автоматически грузится в 1С по своему внутреннему артикулу.
Отдельно запустили интернет магазин с отличной от прайса структурой расположения товаров, т.к. магазин для розницы, а прайс-бланк для оптовиков.

В итоге из магазина приходят заказы, в которых товары расположены в хаотичном порядке
(вариант, чтобы товары в заказе располагались в заданном порядке не подходит, говорю сразу).
Собрать такой заказ проблематично, тем более, когда заказано 1000 товаров из разных категорий.

А прайс, как и говорилось, полностью повторяет структуру склада.
Вот и стоит задача, чтобы по артикулу товары идентифицировались и подставлялись в этот xls и отправлялись на почту админу.
Заказ оформленный в прайс-листе собирается в 5 раз быстрее.

Вот в этом и логика.

Ничего в базу из прайса не грузится, товары в магазин вносятся в ручную (не будем касаться сложности движка).

Заказ должен быть именно в прайс листе.
Можно это сделать, PHP это доступно?
 

Lakr

Новичок
а уменьшеный файл со структурой прайса но только с теми данными что заказали неподходит? тоесть вырезали все позиции кроме заказанных такое 1С не схавает как заказ?
вообще конечно невозможного нет, всё можно придумать... у меня тут как раз есть рабочие инструменты работы с екселем я щас ради интереса попробую сделать похожее что вам надо и отпишу... самого заинтересовало =)
а в ручную данные перевбивать это конечно жесть... да и движок там не причём, создать отдельную базу и поправить к какой базе связываться... демагогирую =)

итого покопался поковырялся, проблем с простыми табличками в пару строк не возникло, но
единственный метод которым получилось зделать нужное это перечитать файл, сохранить данные в переменные или масивы, и создать новый используя теже данные плюс то что надо... единственное что смущает что я то оперировал мелкими файлами с парой данных, а как оно будет, и будет ли вообще, работать с файлами такого объёма неизвестно...
моё имхо проще было бы создать хоть и отдельную базу в которую можно автоматом подливать весь прайс и на основании этой базы генерить ексельник нужного формата, хоть сам прайс, если у него структура более мение вменяемая то трудностей с этим быть не должно, да и с этой же базы заливать товары в другую(базу магазина) базу просто ерунда дело(к вопросу о руками перевбивать)...
в общем дело это на пхп возможное но трудоёмкое
 

martensit

Новичок
Автор оригинала: Lakr
а уменьшеный файл со структурой прайса но только с теми данными что заказали неподходит? тоесть вырезали все позиции кроме заказанных такое 1С не схавает как заказ?
вообще конечно невозможного нет, всё можно придумать... у меня тут как раз есть рабочие инструменты работы с екселем я щас ради интереса попробую сделать похожее что вам надо и отпишу... самого заинтересовало =)
Кстати, в прайсе, стоит автофильтр, которым потом скрываются все пустые ячейки, и оставляются только строки с заказанной продукцией.
Коме того прописан макрос на VBA, который удаляет все скрытые ячейки после фильтрации. В итоге прайс с заказом и удаленными лишними элементами
весит всего 500кб.

Если всю эту последовательность действий можно прописать на PHP, то задача бы разрешилась.
 

Lakr

Новичок
так если в итоге всё равно получается маленький файл который содержит только строки заказа то написать под него шаблон для генерации нового файла несложно, главное иметь пару конечных файлов, тоесть понять что и как должно опускаться(вырезаться) и данные вставлять сразу туда куда нужно, а что бы избежать ситуаций когда сам исходный прайс будет изменяться то перед генерацией заказа его(прайс) перечитать и выяснить где этот товар находиться(срока, артикул не суть важно) и передать эти данные скрипту для генерации файла заказа. такой себе умный скрипт получается
 

martensit

Новичок
Автор оригинала: Lakr
так если в итоге всё равно получается маленький файл который содержит только строки заказа то написать под него шаблон для генерации нового файла несложно, главное иметь пару конечных файлов, тоесть понять что и как должно опускаться(вырезаться) и данные вставлять сразу туда куда нужно, а что бы избежать ситуаций когда сам исходный прайс будет изменяться то перед генерацией заказа его(прайс) перечитать и выяснить где этот товар находиться(срока, артикул не суть важно) и передать эти данные скрипту для генерации файла заказа. такой себе умный скрипт получается
Да, в итоге получается существенно меньший файл, в зависимости от заказа. Если закажут все 7000 позиций, то естественно останется тот же размер.

Еще сложность, что прайс имеет не совсем простую структуру, в нем есть "результирующие" ячейки,
в которых идет подсчет всего заказанного товара из категории. Т.е. это просто вспомогательные ячейки.
Вот с ними и сложность, у них нет ни артикула ни имени. А быть в итоговом файле они должны.

Ну, мне и предлагается делать новый файл со структурой старого файла. Но вопрос зачем?
Если можно изменить исходный прайс, все в нем проделать и отправить под новым именем на мыло.

Зачем создавать новый файл?
 

Lakr

Новичок
ну результирующие ячейки это вообще не проблема, это я уже на опыте точно знаю,
к сожалению я ненашёл вариантов изменения исходного файла прямо в нём без каких либо промежуточныйх вариантов, возможно есть какието комерческие решения, либо же попробовать, как говорилось ранее, поставить техническое задание за деньги
просто создать инструмент для генерации нового файла будет куда проще\дешевле чем искать какието решения за деньги или оное создавать с нуля
 

martensit

Новичок
Автор оригинала: Lakr

к сожалению я ненашёл вариантов изменения исходного файла прямо в нём без каких либо промежуточныйх вариантов, возможно есть какието комерческие решения,
Так значит все-таки проблематично "открыть, поправить, сохранить". Нужны промежуточные варианты...
 
Сверху