Добрый день!
При экспорте данных из MSSQL при помощи php в Excel, не заполняются ячейки информацией, которая состоит из более 255 символов. Как убрать ограничение на на данный размер ячейки? Как мне известно в ячейку Excel можно вставить более 32000 символов.
Ниже приведен, рабочий код:
<?php
if( !defined( "ExcelExport" ) ) {
define( "ExcelExport", 1 );
class ExportToExcel {
var $xlsData = "";
var $fileName = "";
var $countRow = 0;
var $countCol = 0;
var $totalCol = 6;//общее число колонок в Excel
//конструктор класса
function __construct (){
$this->xlsData = pack( "ssssss", 0x809, 0x08, 0x00,0x10, 0x0, 0x0 );
}
// Если число
function RecNumber( $row, $col, $value ){
$this->xlsData .= pack( "sssss", 0x0203, 14, $row, $col, 0x00 );
$this->xlsData .= pack( "d", $value );
return;
}
//Если текст
function RecText( $row, $col, $value ){
$len = strlen( $value );
$this->xlsData .= pack( "s*", 0x0204, 8 + $len, $row, $col, 0x00, $len);
$this->xlsData .= $value;
return;
}
// Вставляем число
function InsertNumber( $value ){
if ( $this->countCol == $this->totalCol ) {
$this->countCol = 0;
$this->countRow++;
}
$this->RecNumber( $this->countRow, $this->countCol, $value );
$this->countCol++;
return;
}
// Вставляем текст
function InsertText( $value ){
if ( $this->countCol == $this->totalCol ) {
$this->countCol = 0;
$this->countRow++;
}
$this->RecText( $this->countRow, $this->countCol, $value );
$this->countCol++;
return;
}
// Переход на новую строку
function GoNewLine(){
$this->countCol = 0;
$this->countRow++;
return;
}
//Конец данных
function EndData(){
$this->xlsData .= pack( "ss", 0x0A, 0x00 );
return;
}
// Сохраняем файл
function SaveFile( $fileName ){
$this->fileName = $fileName;
$this->SendFile();
}
// Отправляем файл
function SendFile(){
$this->EndData();
header ( "Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT" );
header ( "Cache-Control: no-store, no-cache, must-revalidate" );
header ( "Pragma: no-cache" );
header ( "Content-type: application/x-msexcel" );
header ( "Content-Disposition: attachment; fileName=$this->fileName.xls" );
print $this->xlsData;
}
}
}
if (isset($_GET['test'])) {
// подключаемся к базе
include('inc/db.php');
$db = new db();
// никогда не доверяйте входящим данным! Фильтруйте всё!
$id =$_GET['test'];
//фильтруем данные
$filename = 'выгрузка_по_'.$id; // задаем имя файла
$excel = new ExportToExcel(); // создаем экземпляр класса
$sql="select * from dbo.PROBSUMMARYM1 where INCIDENT_ID LIKE '%" . $id. "%' or NUMBER LIKE '%" . $id . "%'";//запрос к базе
mssql_query("set names cp1251");
$rez=mssql_query($sql);
$excel->InsertText(iconv("utf-8", "windows-1251",'Количество'));
$excel->InsertText(iconv("utf-8", "windows-1251",'Номер обращения'));
$excel->InsertText(iconv("utf-8", "windows-1251",'Номер инцидента'));
$excel->InsertText(iconv("utf-8", "windows-1251",'Назначенный'));
$excel->InsertText(iconv("utf-8", "windows-1251",'Полное описание'));
$excel->InsertText(iconv("utf-8", "windows-1251",'Решение'));
$excel->GoNewLine();
While($row=mssql_fetch_assoc($rez)){
$excel->InsertNumber('1');
$excel->InsertText($row['INCIDENT_ID']);
$excel->InsertText($row['NUMBER']);
$excel->InsertText($row['ASSIGNEE_NAME']);
$excel->InsertText($row['ASSIGNMENT']);
$excel->InsertText($row['RESOLUTION']);
$excel->GoNewLine();
}
$excel->SaveFile($filename);
}
?>