Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как справиться с Excel?
 
 автор: Владимир55   (04.10.2012 в 00:49)   письмо автору
 
 

Файл в формате csv создается с помощью РНР-скрипта (разделитель точка с запятой или табуляция – пробовал и так, и эдак). Проблема в том, что программа формирует артикулы товаров, некоторые из которых могут иметь вот такой вид:
7.500
000428

Если открыть созданный файл текстовым редактором, то можно убедиться в том, что все эти артикулы записаны верно. Но если открыть программой Excel, то упомянутые примеры воспроизводятся так:
7.5
428

По умолчанию при открытии получается формат ячеек «Общий». Изменение его на «Текстовый» ничего не дает. И даже если просто открыть файл через Microsoft Excel и затем сохранить его в этом же файле, то нули уже оказываются потерянными! И если сохранить файл в формате xls, то потерянные нули не восстанавливаются.

Каким образом можно создать файл средствами РНР так, чтобы в дальнейшем работать с ним как с книгой Microsoft Excel?

  Ответить  
 
 автор: Sfinks   (04.10.2012 в 01:17)   письмо автору
 
   для: Владимир55   (04.10.2012 в 00:49)
 

Примените уже в Экселе к первому столбцу формулу:
=СЦЕПИТЬ(ЛЕВСИМВ(A1;НАЙТИ(".";A1));ЛЕВСИМВ(СЦЕПИТЬ(ПСТР(A1;НАЙТИ(".";A1)+1;3);"000");3))
а ко второму
=ПРАВСИМВ(СЦЕПИТЬ("000000";B1);6)

  Ответить  
 
 автор: Владимир55   (04.10.2012 в 08:56)   письмо автору
 
   для: Sfinks   (04.10.2012 в 01:17)
 

Спасибо!

С первой проблемой удалось справиться, заменив десятичную точку другим знаком. А вот со второй сложнее - знаков может быть не только шесть, но и гораздо больше (максимум, который я пока что встретил - 42 знака, из которых 35 нулей, стоящих впереди).

Как быть в этих случаях? Универсальной формулы нет?

Может быть, можно в РНР для ячеек артикула задать какой-то невидимый код, переводящий их в режим "Текстовый"? Или нет такого кода?

  Ответить  
 
 автор: Sfinks   (04.10.2012 в 09:57)   письмо автору
 
   для: Владимир55   (04.10.2012 в 08:56)
 

Можете перед нулями поставить любой символ - поле будет строковым. Потом в экселе формулой удалить этот символ.

  Ответить  
 
 автор: confirm   (04.10.2012 в 09:59)   письмо автору
 
   для: Владимир55   (04.10.2012 в 08:56)
 

MDSN вам надо посетить, там все описано. Если конечно, вы хотите именно на стороне сервера что-то делать для клиента.

  Ответить  
 
 автор: Sfinks   (04.10.2012 в 10:11)   письмо автору
 
   для: confirm   (04.10.2012 в 09:59)
 

"Ответ на ваш вопрос есть в библиотеке имени Ленина" - по информативности примерно такой же ответ.

  Ответить  
 
 автор: confirm   (04.10.2012 в 10:18)   письмо автору
 
   для: Sfinks   (04.10.2012 в 10:11)
 

Что вы говорите!? Вы вообще-то посещали ресурс данный, имеете представление о нем, и для чего он?

  Ответить  
 
 автор: Sfinks   (04.10.2012 в 16:23)   письмо автору
 
   для: confirm   (04.10.2012 в 10:18)
 

Да. База знаний обо всем, что делает микрософт. Т.е мегатонны информации, в которых не понятно что где и как искать. Я только это имел ввиду. Т.е. ответы есть на все.... Но как их найти?....

  Ответить  
 
 автор: confirm   (04.10.2012 в 17:42)   письмо автору
 
   для: Sfinks   (04.10.2012 в 16:23)
 

Там все по разделам, как собственно у любого производителя. Я же ведь тоже не знаю, чего конкретно хочет и делает Владимир, но ели речь идет о MS документе для клиента, то хочется, не хочется, а изучать методы и свойства детищей MS придется. Ведь совсем не обязательно для этого оперировать xls, а тем более куцым csv, Excel прекрасно может импортировать, понимать, другие форматы, тем более, что их совсем не обязательно создавать на сервере с помощью COM-объектов, можно создать их в обычном выходном потоке данных, но для этого опять таки нужно знать формат.
Возможно, что Владимир создает интерфейс администрирования, то сам бог велел, в этом случае, забыть об удаленном интерфейсе, а иметь локальный, а сервер только выдает данные по запросу. Вот в этом случае hta в самую точку, и не сложно, и возможностей на клиенте хоть отбавляй. Но опять таки, нужно знать методы и свойства исходника.
Что конкретно не знаю, потому так, а поиск непосредственно офисных приложений, их описаний, там не сложен, к тому же, как и у всех культурных, у них есть поиск.

  Ответить  
 
 автор: Лена   (04.10.2012 в 18:51)   письмо автору
 
   для: Владимир55   (04.10.2012 в 00:49)
 

В Сети есть хорошая библиотека PHPExcel.
Насколько я помню, с ней таких проблем, как у вас, не было.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования