Помогите с Excel ом !!!

Muzaffar

Новичок
Помогите с Excel ом !!!

Добрый день!
Пользуюсь:
OS MS WIndows2003 (без SP1)
PHP 4.3.4
apache 1.3
MS SQL Server 2000 (+SP3)
MS Office 2003.

Проблема наверно не сложна.
При отправке прайст листа на Excel с помощью header'ом цифра 1.3 (цена) получается 01.03.2005.
Можно-ли как-то исправлять эту ошибку.

Спасибо за ранее.

Дайте хотя бы ссылочку что бы про читать.
 

deek

Новичок
чтобы исправить эту ошибку, нужно явно указать тип ячейки.

Если документ формируется через COM-объект Excel, то:
1) надо открыть пустой документ
2) запустить запись макроса в excel
3) поменять тип ячейки вручную
4) остановить запись макроса
5) открыть редактор VBA, посмотреть на код
6) портировать код с VBA на PHP.
 

Muzaffar

Новичок
К сожалению я использую header.

<php>
header("Content-type: application/x-msexcel");
header("Content-Disposition: attachment; filename=Price.xls");
header("Content-Description: PHP Generated XLS Data");
...
$q2= mssql_query("Select Prod_name, Prod_id, Kol_box, Kol_block, S_price, Tek_ostatok
from spr_products where Gr_pr_id='$r1[0]' and tek_ostatok != 0");
while ($r2 = mssql_fetch_row($q2))
{
...
settype ($r2[4], "string"); #Цена (S_Price)
printf ("<td class=price align=center>$r2[4]</td>");
...

Попробовал даже поменять тип. но не получается???
 

deek

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

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

Потом нужно открыть получившийся HTML в текстовом редакторе, найти HTML-код для своей тестовой ячейки, и обнаружить, что в в документе Excel, сохраненном в формате HTML тип ячейки задается при помощи собственных CSS-классов excel`я.

И, соответственно, переделать свой скрипт.
 

slach

Новичок
мда =))) чувак то ЖЖОт
Муззафар
ты разницу между header и COM ваще не понимаешь
ок, если ты выдаешь HTML подставляя неверный Content-type
с чего ты взял, что Excel должен правильно распарсить тебе твой HTML документ ??

с чего ты взял, что в этом HTML документе можно задавать "тип ячейки", также как это делается в Excel?
 

Muzaffar

Новичок
deek Спасибо я попробую...


slach
Я то не продвинутый пока но постараюсь разобратся...
 

deek

Новичок
Muzaffar,
попробуй, это работает

slach
> выдаешь HTML подставляя неверный Content-type

1. Чем неверен указанный content-type ?

> чего ты взял, что Excel должен правильно распарсить тебе твой HTML документ ??

2. не знаю, с чего он взял, но это работает потому, что, если заглянуть внутрь office xml документа, можно
увидеть, что он основан на HTML:
Код:
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="[b]http://www.w3.org/TR/REC-html40[/b]">
следовательно, мы можем использовать голый HTML для формирования документа, и специальные атрибуты o:xxx и s:xxx для задания каких-то свойств в документe.

> с чего ты взял, что в этом HTML документе можно задавать "тип ячейки", также как это делается в Excel?

это действительно можно делать:
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q271572
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnoffxml/html/ofxml2k.asp

или можно попробовать:
Код:
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1251">
<meta name=ProgId content=Excel.Sheet>
</head>
<body>
<table border=0 cellpadding=0 cellspacing=0>
 <col width=64 style='width:48pt'>
 <tr height=17 style='height:12.75pt'>
  <td height=17 style='mso-number-format:"dd\\ mmm\\ yy";'x:num="1234"></td>
 </tr>
</table>
</body>
</html>
 

slach

Новичок
deek хороший полезный ответ без шуток
ты бы с самого начала Muzzafar'у его дал...

Content-type: неверный
потому что надо было либо отдавать бинарный Excel
либо объявлять namespace так как показал ты


к сожалению мне в мою глупую голову эти мысли сразу не пришли
 
Сверху