2013-06-27 3 views
0

나는 올바른 장소에 있기를 바랍니다. SQL에서 XLSX로 데이터를 내보내는 PHP가 있습니다. XLS로 내보낼 때출력 된 Excel 파일을 열 때 PHPExcel 오류가 발생했습니다.

<?php 



$conexion=odbc_connect("syb_master","sa","server"); 

$sql = "Here's the query"; 

    $exec = odbc_exec($conexion,$sql); 

$resultado = odbc_result_all($exec); 
$registros = odbc_num_rows ($resultado); 
require_once '../Classes/PHPExcel.php'; 


if ($registros > 0) { 

    $objPHPExcel = new PHPExcel(); 

    //Informacion del excel 
    $objPHPExcel-> 
    getProperties() 
     ->setCreator("ingenieroweb.com.co") 
     ->setLastModifiedBy("ingenieroweb.com.co") 
     ->setTitle("Exportar excel desde mysql") 
     ->setSubject("Ejemplo 1") 
     ->setDescription("Documento generado con PHPExcel") 
     ->setKeywords("ingenieroweb.com.co con phpexcel") 
     ->setCategory("ciudades");  

    $i = 1;  
    while ($registro = odbc_fetch_object ($resultado)) { 

     $objPHPExcel->setActiveSheetIndex(0) 
      ->setCellValue('A'.$i, $registro->name); 

     $i++; 

    } 
    $objPHPExcel->getActiveSheet()->setTitle('Simple'); 
} 

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); 
header('Content-Disposition: attachment;filename="ejemplo1.xlsx"'); 
header('Cache-Control: max-age=0'); 



$objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007'); 
$objWriter->save('php://output'); 
exit; 
odbc_close($conexion); 
?> 

그것은 작동하지만 내가 XLS로 내보낼 때, 모든 것이 완료되면, 엑셀 파일을 열 수 없다는 사실을 제외하고 올바른 것으로 보인다. 오류 : "파일 형식 또는 파일 확장명이 유효하지 않기 때문에 Excel에서 파일을 열 수 없습니다."

쿼리에 많은 양의 데이터가 포함되어 있기 때문에 생각합니다. 확실하지 않습니다. 나는 phpexcel을 처음 사용합니다. 네가 나를 도울 수 있기를 바랍니다. 감사!

+0

텍스트 편집기에서 파일 (탭, 공백, 새로운 라인), 어떤 BOM 마커, 또는 명백한 일반 텍스트를 선행 또는 후행 공백 문자를 찾습니다 파일 본문에 PHP 오류 메시지가 있습니다. –

+0

또한 php : // output 대신 서버의 파일에 저장해보십시오. MS 엑셀에서 열면 –

답변

1

이것은 내 코드입니다. 그것은 너무 좋지 않아,하지만 난 그런 문제가 없습니다 :

/** Error reporting */ 
error_reporting(E_ALL); 
ini_set('display_errors', TRUE); 
ini_set('display_startup_errors', TRUE); 
date_default_timezone_set('Europe/London'); 

define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />'); 

/** Include PHPExcel */ 
require_once 'Classes/PHPExcel.php'; 


// Create new PHPExcel object 
//echo date('H:i:s') , " Create new PHPExcel object" , EOL; 
$objPHPExcel = new PHPExcel(); 

// Rename worksheet 
$objPHPExcel->getActiveSheet()->setTitle('Simple'); 
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(50);  
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(50);  
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(50);  
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(50); 

$objPHPExcel->getProperties()->setCreator("Ketov Alexandr") 
          ->setLastModifiedBy("Ketov Alexandr") 
          ->setTitle("PHPExcel Test Document") 
          ->setSubject("PHPExcel Test Document") 
          ->setDescription("Test document for PHPExcel, generated using PHP classes.") 
          ->setKeywords("office PHPExcel php") 
          ->setCategory("Test result file"); 

//$objPHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(-1); 

$query = "SELECT * FROM `lang`"; 
$result = mysql_query($query) or die(mysql_error()); 


$objPHPExcel->setActiveSheetIndex(0) 
      ->setCellValue('A1', 'Ключ') 
      ->setCellValue('B1', 'На русском') 
      ->setCellValue('C1', 'На казахском') 
      ->setCellValue('D1', 'Портлет'); 

$styleArray = array(
    'font' => array(
     'bold' => true, 
     'color' => array('rgb' => '000000'), 
     'size' => 11, 
     'name' => 'Verdana' 
    )); 


$objPHPExcel->getActiveSheet()->getStyle('A1')->applyFromArray($styleArray)->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 
$objPHPExcel->getActiveSheet()->getStyle('B1')->applyFromArray($styleArray)->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 
$objPHPExcel->getActiveSheet()->getStyle('C1')->applyFromArray($styleArray)->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 
$objPHPExcel->getActiveSheet()->getStyle('D1')->applyFromArray($styleArray)->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 

$n = 2; 
while ($row = mysql_fetch_object($result)) 
{ 
    $objPHPExcel->setActiveSheetIndex(0) 
      ->setCellValue('A'.$n, $row->id) 
      ->setCellValue('B'.$n, $row->ru) 
      ->setCellValue('C'.$n, $row->kz) 
      ->setCellValue('D'.$n, $row->module); 
    $objPHPExcel->getActiveSheet()->getStyle('A'.$n)->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 
    $objPHPExcel->getActiveSheet()->getStyle('B'.$n)->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 
    $objPHPExcel->getActiveSheet()->getStyle('C'.$n)->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 
    $objPHPExcel->getActiveSheet()->getStyle('D'.$n)->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 
    $n++; 
} 

// Set active sheet index to the first sheet, so Excel opens this as the first sheet 
$objPHPExcel->setActiveSheetIndex(0); 


// Redirect output to a client’s web browser (Excel5) 
header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="01simple.xls"'); 
header('Cache-Control: max-age=0'); 
// If you're serving to IE 9, then the following may be needed 
header('Cache-Control: max-age=1'); 

// If you're serving to IE over SSL, then the following may be needed 
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past 
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified 
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1 
header ('Pragma: public'); // HTTP/1.0 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
$objWriter->save('php://output'); 
exit; 
관련 문제