Форум программистов, компьютерный форум, киберфорум
1С Битрикс
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/47: Рейтинг темы: голосов - 47, средняя оценка - 5.00
 Аватар для [FENIX]
4 / 4 / 2
Регистрация: 09.10.2009
Сообщений: 524

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

11.01.2019, 12:03. Показов 9198. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.01.2019, 12:03
Ответы с готовыми решениями:

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

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

Экспорт таблицы в Excel
Есть пример https://www.cyberforum.ru/cpp-builder/thread53349.html на Delphi и BC++ но не как не получается реаизовать его в Visual C++....

13
3012 / 1446 / 262
Регистрация: 16.03.2008
Сообщений: 6,444
Записей в блоге: 2
11.01.2019, 12:43
А так любой версии эксель открывает? Не легче сформировать 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]
4 / 4 / 2
Регистрация: 09.10.2009
Сообщений: 524
11.01.2019, 16:05  [ТС]
2016 версии точно открывает. В CSV не очень удобно. Там символы-разделители добавляются. Мне нужна простая Excel-таблица. С этой таблицей потом уже другие люди будут работать, сортировать, строить графики, и т.д.

Добавлено через 2 часа 2 минуты
voral спасибо, твой вариант работает. А подскажешь, как сделать ссылку, чтобы при клике на неё открывалось диалоговое окно для скачивания Excel-файла? А то сейчас сразу при загрузке страницы это окно появляется, а хотелось бы, чтобы при клике по ссылке оно появлялось.
0
 Аватар для [FENIX]
4 / 4 / 2
Регистрация: 09.10.2009
Сообщений: 524
14.01.2019, 15:35  [ТС]
Update
0
3012 / 1446 / 262
Регистрация: 16.03.2008
Сообщений: 6,444
Записей в блоге: 2
14.01.2019, 15:42
На странице обычная html ссылка (тег "a") на этот скрипт, который будет отдавать файл. Если необходимо диалоговое окно - это уже надо верстать и javascript писать (но суть будет та же - в диалоговом окне обычная ссылка)
0
 Аватар для [FENIX]
4 / 4 / 2
Регистрация: 09.10.2009
Сообщений: 524
14.01.2019, 15:48  [ТС]
Как мне на 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
3012 / 1446 / 262
Регистрация: 16.03.2008
Сообщений: 6,444
Записей в блоге: 2
14.01.2019, 15:50
При чем тут php?
На странице
HTML5
1
<a href="/myscript.php">Скачать файл</a>
где myscript.php - это тот php скрипт который обсуждаем.
0
 Аватар для [FENIX]
4 / 4 / 2
Регистрация: 09.10.2009
Сообщений: 524
14.01.2019, 15:56  [ТС]
Сделал всё как ты написал.
Браузер пишет "Не удается получить доступ к сайту". Права на файл 777 стоят.
0
3012 / 1446 / 262
Регистрация: 16.03.2008
Сообщений: 6,444
Записей в блоге: 2
14.01.2019, 16:06
Ни когда не делай 777. Это табу.

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

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
3012 / 1446 / 262
Регистрация: 16.03.2008
Сообщений: 6,444
Записей в блоге: 2
14.01.2019, 16:11
а что он должен делать?
Он вообще ни чего не делает.
Этот должен быть всесь скрипт который отдает файл, а не его кусок
0
 Аватар для [FENIX]
4 / 4 / 2
Регистрация: 09.10.2009
Сообщений: 524
14.01.2019, 16:26  [ТС]
Да, точно, спасибо, теперь код файла вот такой:

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-файл скачивается, но данные в заголовке таблицы отображены не в Кириллице, т.е. нечитаемы. Сейчас думаю как кодировку сменить можно. На скриншоте подробнее.
Миниатюры
Экспорт таблицы в Excel  
0
3012 / 1446 / 262
Регистрация: 16.03.2008
Сообщений: 6,444
Записей в блоге: 2
15.01.2019, 07:57
Вероятно кодировка самого скрипта не совпадает.
0
 Аватар для [FENIX]
4 / 4 / 2
Регистрация: 09.10.2009
Сообщений: 524
15.01.2019, 10:15  [ТС]
Да, действительно. поменял с UTF-8 на windows-1251 и всё нормально стало. Спасибо !!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.01.2019, 10:15
Помогаю со студенческими работами здесь

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

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

Экспорт из таблицы в EXCEL напрямую
Private Sub cmdGenerate_Click(sender As Object, e As EventArgs) Handles cmdGenerate.Click Dim dtEnd As String Dim...

Экспорт таблицы из Word в Excel
Уважаемые, здравствуйте. Столкнулся с проблемой рутинизации обработки присылаемых файлов в Word и с необходимостью экспорта всего одной...

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru