Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С Битрикс
Войти
Регистрация
Восстановить пароль
 
[FENIX]
1 / 1 / 2
Регистрация: 09.10.2009
Сообщений: 251
1

Экспорт таблицы в Excel

11.01.2019, 12:03. Просмотров 366. Ответов 13
Метки нет (Все метки)

Всем привет! Народ, помогите столкнулся вот с такой проблемой:

Есть страница. На ней есть таблица. Нужно как то эту таблицу выгрузить в Excel.
Гуглил. Предлагаются варианты использовать PHPExcel и другие варианты.
Я использовал вот такой:

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
?>
 
 
<?
   global $DB;
   $query = "Sel ect DISTINCT nps.dep_id , nps.dep_name As 'Отдел', score as 'Оценка', CONCAT(LAST_NAME,' ', NAME, ' ', SECOND_NAME) as 'ФИО' ,comment as 'Комментарий' Fr om nps, b_user Where nps.user_id=b_user.ID Order By nps.dep_name";
 
   $results = $DB->Query($query);
 
   if($results->fetch()!=false){?>
      <table cellpadding="0" cellspacing="0" border="1">
         <thead>
            <tr>
               <th>Отдел</th><th>Оценка</th><th>ФИО</th><th>Комментарий</th>
            </tr>
         </thead>
         <tbody>
   <?
      while($row = $results->fetch()){?>
         <tr>
            <td><?=$row['Отдел']?></td><td><?=$row['Оценка']?></td><td><?=$row['ФИО']?></td><td><?=$row['Комментарий']?></td>
         </tr>
      <?}?>
 
         </tbody>
      </table>
   <?}
 
 
   $file="demo.xls";
   header("Content-type: application/vnd.ms-excel");
   header("Content-Disposition: attachment; filename=$file");
 
 
?>
 
 
 
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Если перезагрузить страницу, то появится окно для скачивания Excel-файла. Я его скачиваю, но там ещё помимо самой таблицы зачем то добавились данные из Header'a и Footera, надписи с админ-панели и прочие ненужные вещи. Подскажите пожалуйста, каким образом можно сделать экспорт ТОЛЬКО самой таблицы, без лишних данных?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2019, 12:03
Ответы с готовыми решениями:

Экспорт цен
Добрый день! Есть сайт на редакции &quot;Бизнес&quot;, есть инфоблок с товарами и инфоблок с торговыми...

Экспорт данных из таблицы Excel в шаблон Excel
Добрый день! Проблемка заключается в следующем: В папке debug во вложении есть файл...

Экспорт таблицы в Excel
Есть пример http://www.cyberforum.ru/cpp-builder/thread53349.html на Delphi и BC++ но не как не...

Экспорт таблицы в Excel
Скажите пожалуйста, как отобразить столбец или строку из dbgrid (adotable) в ворд или ексел?...

Экспорт таблицы в Excel
Добрый день, друзья Нужна ваша помощь так как сам не справляюсь. Пытаюсь экспортнуть результат...

13
voral
917 / 614 / 135
Регистрация: 16.03.2008
Сообщений: 2,920
11.01.2019, 12:43 2
А так любой версии эксель открывает? Не легче сформировать csv, который откроется гарантировано. (Вам же, как я понимаю, не нужна разметка).


А вообще болванка такая:
PHP
1
2
3
4
5
6
7
8
9
<?php
define("NO_KEEP_STATISTIC", true);
define("NO_AGENT_STATISTIC", true);
require_once($_SERVER["DOCUMENT_ROOT"] . '/bitrix/modules/main/include/prolog_before.php');
// здесь ваш код формирующий вывод
$file="demo.xls";
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=$file");
die();
die() обеспечивает что дальше ни чего не попадет в вывод. Однако, если вам необходимо, чтобы срабатывали обработчики событий заверешения формирования страницы (поймете когда чего то не будет хватать, для файлов чаще всего не требуется). Надо будет перед die добавить
PHP
1
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");
Если ни чего такого не требуется, но в этом скрипте ставите какую то куку (через АПИ битрикс) то в конце обязательно надо сделать

PHP
1
Bitrix\Main\Application::getInstance()->getContext()->getResponse()->flush('');
Добавлено через 1 минуту
Это, кстати, можно использовать в качестве шаблона для скриптов обрабатывающих AJAX запросы (естественно только надо header`ы правильные ставить)
0
[FENIX]
1 / 1 / 2
Регистрация: 09.10.2009
Сообщений: 251
11.01.2019, 16:05  [ТС] 3
2016 версии точно открывает. В CSV не очень удобно. Там символы-разделители добавляются. Мне нужна простая Excel-таблица. С этой таблицей потом уже другие люди будут работать, сортировать, строить графики, и т.д.

Добавлено через 2 часа 2 минуты
voral спасибо, твой вариант работает. А подскажешь, как сделать ссылку, чтобы при клике на неё открывалось диалоговое окно для скачивания Excel-файла? А то сейчас сразу при загрузке страницы это окно появляется, а хотелось бы, чтобы при клике по ссылке оно появлялось.
0
[FENIX]
1 / 1 / 2
Регистрация: 09.10.2009
Сообщений: 251
14.01.2019, 15:35  [ТС] 4
Update
0
voral
917 / 614 / 135
Регистрация: 16.03.2008
Сообщений: 2,920
14.01.2019, 15:42 5
На странице обычная html ссылка (тег "a") на этот скрипт, который будет отдавать файл. Если необходимо диалоговое окно - это уже надо верстать и javascript писать (но суть будет та же - в диалоговом окне обычная ссылка)
0
[FENIX]
1 / 1 / 2
Регистрация: 09.10.2009
Сообщений: 251
14.01.2019, 15:48  [ТС] 6
Как мне на php написать, чтоб при клике по ссылке сработал вот этот кусок кода?

PHP
1
2
3
4
5
6
$file="demo.xls";
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=$file");
 
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");
die();
0
voral
917 / 614 / 135
Регистрация: 16.03.2008
Сообщений: 2,920
14.01.2019, 15:50 7
При чем тут php?
На странице
HTML5
1
<a href="/myscript.php">Скачать файл</a>
где myscript.php - это тот php скрипт который обсуждаем.
0
[FENIX]
1 / 1 / 2
Регистрация: 09.10.2009
Сообщений: 251
14.01.2019, 15:56  [ТС] 8
Сделал всё как ты написал.
Браузер пишет "Не удается получить доступ к сайту". Права на файл 777 стоят.
0
voral
917 / 614 / 135
Регистрация: 16.03.2008
Сообщений: 2,920
14.01.2019, 16:06 9
Ни когда не делай 777. Это табу.

Скорее всего 500ая ошибка - ошибка PHP в скрпипте какая то.
0
[FENIX]
1 / 1 / 2
Регистрация: 09.10.2009
Сообщений: 251
14.01.2019, 16:09  [ТС] 10
Вот код самого скрипта:

PHP
1
2
3
4
5
6
7
8
<?
$file="demo.xls";
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=$file");
 
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");
 
?>
Я не знаю где тут ошибка
0
voral
917 / 614 / 135
Регистрация: 16.03.2008
Сообщений: 2,920
14.01.2019, 16:11 11
а что он должен делать?
Он вообще ни чего не делает.
Этот должен быть всесь скрипт который отдает файл, а не его кусок
0
[FENIX]
1 / 1 / 2
Регистрация: 09.10.2009
Сообщений: 251
14.01.2019, 16:26  [ТС] 12
Да, точно, спасибо, теперь код файла вот такой:

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?
 
//require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
define("NO_KEEP_STATISTIC", true);
define("NO_AGENT_STATISTIC", true);
require_once($_SERVER["DOCUMENT_ROOT"] . '/bitrix/modules/main/include/prolog_before.php');
 
global $USER;
$user_groups = $USER->GetUserGroupArray();//Получаем группы, в которых состоит пользователь
 
 
global $DB;
 
$query = "Select DISTINCT nps.dep_id , nps.dep_name As 'Отдел', score as 'Оценка', CONCAT(LAST_NAME,' ', NAME, ' ', SECOND_NAME) as 'ФИО' ,comment as 'Комментарий' From nps, b_user Where nps.user_id=b_user.ID Order By nps.dep_name";
$results = $DB->Query($query);
 
if($results->fetch()!=false){?>
    <table cellpadding="0" cellspacing="0" border="1">
        <thead>
            <tr>
                <th>Отдел</th><th>Оценка</th><th>ФИО</th><th>Комментарий</th>
            </tr>
        </thead>
        <tbody>
<?
    while($row = $results->fetch()){?>
        <tr>
            <td><?=$row['Отдел']?></td><td><?=$row['Оценка']?></td><td><?=$row['ФИО']?></td><td><?=$row['Комментарий']?></td>
        </tr>
    <?}?>
 
        </tbody>
    </table>
 
    
 
    <?
    $file="demo.xls";
    header("Content-type: application/vnd.ms-excel");
    header("Content-Disposition: attachment; filename=$file");
 
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");
    die();
    ?>
    
<?}
 
 
/*$file="demo.xls";
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=$file");
 
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");
*/
 
 
?>
Excel-файл скачивается, но данные в заголовке таблицы отображены не в Кириллице, т.е. нечитаемы. Сейчас думаю как кодировку сменить можно. На скриншоте подробнее.
0
Миниатюры
Экспорт таблицы в Excel  
voral
917 / 614 / 135
Регистрация: 16.03.2008
Сообщений: 2,920
15.01.2019, 07:57 13
Вероятно кодировка самого скрипта не совпадает.
0
[FENIX]
1 / 1 / 2
Регистрация: 09.10.2009
Сообщений: 251
15.01.2019, 10:15  [ТС] 14
Да, действительно. поменял с UTF-8 на windows-1251 и всё нормально стало. Спасибо !!!
0
15.01.2019, 10:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2019, 10:15

Экспорт из таблицы БД в Excel
Private Sub Кнопка52_Click() Dim ExcelApp As Object, ExcelWorkbook As Object, ExcelSheet As...

Экспорт таблицы AdvStringGrid в Excel
Всем привет!!! Делаю экспорт своей таблицы AdvStringGrid в Excel с помощью компонента...

Экспорт таблицы из MSSQL в Excel
Здравствуйте, ребята! Требуется экспортировать таблицу из MSSQL в Excel. Я поняла, что это можно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru