X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> 1C, Excel, php
pomp
pomp
Topic Starter сообщение 10.1.2009, 3:24; Ответить: pomp
Сообщение #1


Сегодня на работе была поставлена задача:

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

Какие я вижу решения: файл формируеться ежедневно через некий (пока не извесный) промежуток времени. В файле будут поля магазин, сумма и дата формирования отчета. Сам файл имеет название XXXXYYZZ.xls (год месяц число). Тоесть подтягивать в скрипт файл не ппроблема. Тут же можно выстраивать по дате, строить график и т.д.

Вопрос: никогда плотно не сталкивался с подтягиванием Excel файлов в веб. Удобно вообще организовывать вывод из файла по определенным полям? Может стоит делать отчет в текстовом документе или XML файле? Кикие кто видит решения? Как сделать лучше?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ElektrinO
ElektrinO
сообщение 10.1.2009, 9:54; Ответить: ElektrinO
Сообщение #2


Чтение Excel-файлов средствами PHP
Если вам необходимо читать файлы Excel (.xls) средствами PHP, то библиотека PHP-ExcelReader создана специально для вас. Для работы необходима поддержка iconv или mbstring. Вот пример того, как можно оформить вывод xls-документа в HTML-таблицу с использованием этой библиотеки:
[PHP]<?php
require_once ('Excel/reader.php');

$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('CP1251');
$data->read('filename.xls');

echo '<table>';
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
echo '<tr>';
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
echo '<td>'.$data->sheets[0]['cells'][$i][$j].'</td>';
}
echo '</tr>';
}
echo '</table>';
?>[/PHP]
Альтернативный вариант - PHP Excel PARSER. Вот что написано в файле Help_rus.txt:

Вам нужен скрипт, который может читать [B][COLOR="#ff0000"]MS файлы Excel[/COLOR][/B] и сохранять данные в базе данных, HTML страницах и и т.д.? Вы хотите делать это используя [B]PHP [/B]под[B] Unix[/B] и [B]Linux[/B], но без того, чтобы использовать инструментальные средства Windows напоподобии COM? Тогда [B][COLOR="#ff0000"]PHP Excel PARSER[/COLOR][/B] - для вас. Все, в чем вы будете нуждаться - это только наш [B][COLOR="#ff0000"]excel.php[/COLOR][/B] и [COLOR="#ff0000"][B]PHP [/B][/COLOR]сервер без установки дополнительных инструментальных средств.


В файле документации Help_rus.txt довольно подробно описано, как использовать PHP Excel PARSER. Кроме того, дистрибутив содержит примеры работы с Excel-файлом:
PHP Excel Parser/Setup/SAMPLE/XLS2HTML/SAMPLE.PHP - вывод Excel-файла в браузер
PHP Excel Parser/Setup/SAMPLE/xls2mysql/INDEX.PHP - запись Excel-файла в базу данных

Пример вывода Excel-файла в браузер в формате HTML:
[PHP]<?php
include ("excel.php");

$exc = new ExcelFileParser ("log.txt", ABC_NO_LOG);
$res = $exc->ParseFromFile("test.xls");

switch ($res) {
case 0: break;
case 1: die ("Невозможно открыть файл");
case 2: die ("Файл, слишком маленький чтобы быть файлом Excel");
case 3: die ("Ошибка чтения заголовка файла");
case 4: die ("Ошибка чтения файла");
case 5: die ("Это - не файл Excel или файл, сохраненный в Excel < 5.0");
case 6: die ("Битый файл");
case 7: die ("В файле не найдены данные Excel");
case 8: die ("Неподдерживаемая версия файла");
default: die ("Неизвестная ошибка");
}

// цикл по рабочим листам
for( $ws_num=0; $ws_num<count($exc->worksheet['name']); $ws_num++ )
{
echo "<h3>Рабочий лист: ";
if( $exc->worksheet['unicode'][$ws_num] ) {
echo uc2cp1251($exc->worksheet['name'][$ws_num]);
} else
echo $exc->worksheet['name'][$ws_num];

echo "</h3>\n";
$ws = $exc->worksheet['data'][$ws_num];

// если рабочий лист не пустой
if ( is_array($ws) && isset($ws['max_row']) && isset($ws['max_col']) ) {
echo "<table border=1 cellspacing=0 cellpadding=2>\n";

echo "<tr><td>&nbsp;</td>\n";
for( $j=0; $j<=$ws['max_col']; $j++ ) {
echo "<td class=index>&nbsp;";
if( $j>25 ) echo chr((int)($j/26)+64);
echo chr(($j % 26) + 65)."&nbsp;</td>";
}
// начало цикла по строкам
for( $i=0; $i<=$ws['max_row']; $i++ ) {
echo "<tr><td class=index>".($i+1)."</td>\n";
// начало цикла по столбцам
if( isset($ws['cell'][$i]) && is_array($ws['cell'][$i]) ) {
for( $j=0; $j<=$ws['max_col']; $j++ )
{
if( isset($ws['cell'][$i][$j]) ) {

// Печать данных ячейки
echo "<td>";
$data = $ws['cell'][$i][$j];

switch ($data['type'])
{
// строка
case 0:
$ind = $data['data'];
if( $exc->sst['unicode'][$ind] )
$s = uc2cp1251($exc->sst['data'][$ind]);
else
$s = $exc->sst['data'][$ind];
if( strlen(trim($s))==0 )
echo "&nbsp;";
else
echo $s;
break;
//целое число
case 1:
echo (int)($data['data']);
break;
//вещественное число
case 2:
echo (float)($data['data']);
break;
// дата
case 3:
$ret = $exc->getDateArray($data['data']);
printf ("%s-%s-%s",$ret['day'], $ret['month'], $ret['year']);
break;
default:
echo "&nbsp;";
break;
}
echo "</td>\n";

} else {
echo "<td>&nbsp;</td>\n";
}
}
} else {
// все ячейки стрки пустые
for( $j=0; $j<=$ws['max_col']; $j++ ) {
echo "<td>&nbsp;</td>\n";
}
}
echo "</tr>\n";

}

echo "</table>\n";
} else {
// пустой рабочий лист
echo "<p>Пустой рабочий лист</p>\n";
}
}

// конвертим в нужную кодировку
function uc2cp1251($str) {
return iconv('UNICODELITTLE','cp1251',$str);
}
?>[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ElektrinO
ElektrinO
сообщение 10.1.2009, 10:06; Ответить: ElektrinO
Сообщение #3


Если хотите сами прочитайте ссылки по теме:
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
pomp
pomp
Topic Starter сообщение 11.1.2009, 20:02; Ответить: pomp
Сообщение #4


ElektrinO, Содрал с первой ссылки в гугле)))) ай, яй, яй :hihi:

Насколько я знаю, в этой библиотеки проблемы с криилицей. Ладно, пойдем другим путем. Не столь важно что бы это был Excel (.xls) файл. Там не так много строк, это не прайс. 5 строк, 3 ячейки. Просто хочеться делать все автономно. Может делать формировать отчет в текстовый файл или XML?

Может у кого-то есть мысли по этому поводу? Записывать в БД или сразу выводить в документ? Как быть с разделением строк?


Сколько не гуглил - 100% решения не нашел :(
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Webmaster_hb
Webmaster_hb
сообщение 12.1.2009, 2:40; Ответить: Webmaster_hb
Сообщение #5


pomp, так а в чем проблема? в 1С можно сделать экспорт в текстовый файл с разделителями
ну а импорт или отображение сразу в браузер их текстового файла не проблема... да и в чем проблема вообще смотреть этот файл напрямую в браузере ?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
pomp
pomp
Topic Starter сообщение 12.1.2009, 2:56; Ответить: pomp
Сообщение #6


Да то я расказал оболочку. Далее еще нужно делать выборку, сортировку по датам. График строить.... Я то вообщем уже разобрался с этой библиотекой. Нашел такой метод:

[PHP]
<?php
require_once ('Excel/reader.php');

$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('CP1251');
$data->read('test.xls');

echo '<table>';
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
echo '<tr>';
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
echo '<td>'.$data->sheets[0]['cells'][$i][$j].'</td>';
}
echo '</tr>';
}
echo '</table>';
?>
[/PHP]

Теперь возникает вопрос. Как лучше организовывать вывод документа? Задать имя одному - это понятно. А вот то вынимать из папки последний по дате формата XXXXYYZZ.xls? Массивчик что ли делать.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Sunshine_hb
Sunshine_hb
сообщение 28.10.2009, 15:27; Ответить: Sunshine_hb
Сообщение #7


Vobshem niznaju na kakom dvizhke ty eto delaesh, no ja naprimer dlja Joomla sdelal komponent kotorij zagruzhaet xml v sql. pered etim sdelal plagin v 1c kotorij konvertiruet vsjo v xml. Nu a na Front End chaste otobrazhaetsja sql

В общем не знаю на каком движке ты это делаешь, но я, например, для Joomla сделал компонент, который загружает xml в SQL. Перед этим сделал плагин в 1С, который конвертирует все в xml. Ну а на Front End части отображается SQL.
Licoric.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Witu
Witu
сообщение 28.10.2009, 18:54; Ответить: Witu
Сообщение #8


pomp, чем поще тем лучше
чтение экселя явно худший вариант
через включение txt файла будет самое простое

еслиб еще глянуть на файл формируемый 1С

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) СОЗДАНИЕ : / САЙтЫ / ЛЕНДЫ / БОТЫ ТГ / ВАЙТЫ / КРЕО / СОФТЫ / ДИЗАЙН [PHP, JS, HTML/CSS] и другое
5 CULA 3416 19.12.2023, 18:55
автор: CULA
Открытая тема (нет новых ответов) Услуги по созданию и доработке скриптов PHP, MySQL, JavaScript, jQuery
Разработка сайтов и сервисов под-ключ
0 alexey 1243 24.11.2023, 14:46
автор: alexey
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыВеб-разработка (HTML5, CSS3, JavaScript, jQuery, Ajax, PHP)
56 qpPeW 44918 19.7.2023, 10:03
автор: qpPeW
Открытая тема (нет новых ответов) Есть спецы по php/laravel?
3 Mixatraider 1890 26.5.2023, 20:48
автор: Mixatraider
Открытая тема (нет новых ответов) Опытный PHP\Python разработчик в поиске интересных задач
6 daikzlex 3403 25.5.2023, 13:55
автор: daikzlex


 



RSS Текстовая версия Сейчас: 23.4.2024, 21:49
Дизайн