powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Экспорт из SQL в Excel используя php pack()
4 сообщений из 4, страница 1 из 1
Экспорт из SQL в Excel используя php pack()
    #38881303
More_Beer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Помогите, пожалуйста, разобраться со следующей проблемой:
Есть база данных на SQL, необходимо выгрузить из нее данные в excel средствами php.
Для этих целей использую pack(), и здесь возникают затруднения: в excel записываются только числа, все буквенные значения зануляются.
Примеры: есть поле со значением "юр.лицо", в excel запишется 0. Есть поле со значением "1-DKJNL", в excel запишется только 1.
Возможно, нужно поиграться с форматами pack()?
При попытке изменить в echo pack("d", $Value) формат "d" (double) на любой другой, файл excel не открывается, пишет "файл поврежден, поэтому его нельзя открыть"

Код: php
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.
$cont = get_connect()            //коннект к базе
$query = "SELECT ClientID, ClientName, ClientType FROM dbo.t#Clients where ClientID = '1-JKBHN'"
$qry_data = sqlsrv_query($cont, $query);

function xlsBOF() {                 //начало файла excel
echo pack("ssssss", 0×809, 0×8, 0×0, 0×10, 0×0, 0×0);
return;
}
function xlsEOF() {                 //конец файла excel
echo pack("ss", 0x0A, 0×00);
return;
}
function xlsData($data, $Col, $Value) {               //запись в файл
echo pack("sssss", 0×203, 14, $data, $Col, 0×0);
echo pack("d", $Value);
return;
}
function xlsLabel($data, $Col, $Value ) {       //заголовок
$L = strlen($Value);
echo pack(“ssssss”, 0×204, 8 + $L, $data, $Col, 0×0, $L);
echo $Value;
return;
}

//загрузка пустого xls
header(“Pragma: public”);
header(“Expires: 0″);
header(“Cache-Control: must-revalidate, post-check=0, pre-check=0″);
header(“Content-Type: application/force-download”);
header(“Content-Type: application/octet-stream”);
header(“Content-Type: application/download”);;
header(“Content-Disposition: attachment;filename=employee.xls “);
header(“Content-Transfer-Encoding: binary “);

xlsBOF();

xlsLabel(0,0,”Excel Data”);

xlsLabel(2,0,”ClientID”);
xlsLabel(2,1,”ClientName”);
xlsLabel(2,2,”ClientType”);


$xlsRow = 3;

while($data=sqlsrv_fetch_array($qry_data, SQLSRV_FETCH_ASSOC)){
xlsData($xlsRow,0,$data['ClientID']);
xlsData($xlsRow,1,$data['ClientName']);
xlsData($xlsRow,2,$data['ClientType']);

$xlsRow++;
}

xlsEOF();
exit();
...
Рейтинг: 0 / 0
Экспорт из SQL в Excel используя php pack()
    #38881309
More_Beer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения, код не совсем корректно скопировался

Код: php
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.
$cont = get_connect()            //коннект к базе
$query = "SELECT ClientID, ClientName, ClientType FROM dbo.t#Clients where ClientID = '1-JKBHN'"
$qry_data = sqlsrv_query($cont, $query);

function xlsBOF() {                 //начало файла excel
echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
return;
}
function xlsEOF() {                 //конец файла excel
echo pack("ss", 0x0A, 0x00);
return;
}
function xlsData($data, $Col, $Value) {               //запись в файл
echo pack("sssss", 0x203, 14, $data, $Col, 0x0);
echo pack("d", $Value);
return;
}
function xlsLabel($data, $Col, $Value ) {       //заголовок
$L = strlen($Value);
echo pack(“ssssss”, 0x204, 8 + $L, $data, $Col, 0x0, $L);
echo $Value;
return;
}

//загрузка пустого xls
header(“Pragma: public”);
header(“Expires: 0");
header(“Cache-Control: must-revalidate, post-check=0, pre-check=0");
header(“Content-Type: application/force-download”);
header(“Content-Type: application/octet-stream”);
header(“Content-Type: application/download”);;
header(“Content-Disposition: attachment;filename=employee.xls “);
header(“Content-Transfer-Encoding: binary “);

xlsBOF();

xlsLabel(0,0,”Excel Data”);

xlsLabel(2,0,”ClientID”);
xlsLabel(2,1,”ClientName”);
xlsLabel(2,2,”ClientType”);


$xlsRow = 3;

while($data=sqlsrv_fetch_array($qry_data, SQLSRV_FETCH_ASSOC)){
xlsData($xlsRow,0,$data['ClientID']);
xlsData($xlsRow,1,$data['ClientName']);
xlsData($xlsRow,2,$data['ClientType']);

$xlsRow++;
}

xlsEOF();
exit();
...
Рейтинг: 0 / 0
Экспорт из SQL в Excel используя php pack()
    #38883529
Фотография Areostar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть специальная библиотека ExelPHP - как раз для таких случаев
...
Рейтинг: 0 / 0
Экспорт из SQL в Excel используя php pack()
    #38883628
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
More_Beer,
У вас функция xlsData формирует число. А xlsLabel формирует строку.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Экспорт из SQL в Excel используя php pack()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]