@sibspace

При экспорте данных из MSSQL при помощи php в Excel, не заполняются ячейки информацией(более 255 символов), как убрать ограничение длины ячейки?

Добрый день!
При экспорте данных из 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);
} 
?>
  • Вопрос задан
  • 2564 просмотра
Решения вопроса 1
@servekon
Попробуйте использовать эту библиотеку. Иногда прописать байт-коды не всегда достаточно.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы