몇 가지 질문을했을 수도 있지만이 문제에 대한 정확한 답변을 찾을 수 없었습니다. ExcelExcel (명백하게)을 생성하기 위해 PHPExcel을 사용하고 있으며 코드가 파일을 생성하기 위해 작동하지만 강제 다운로드 코드를 포함 할 때 파일을 손상시킵니다. 스크립트 내 최신 버전은 다음과 같습니다PHPExcel 강제 다운로드 문제
function make_xls_spreadsheet(){
/** Error reporting */
error_reporting(E_ALL);
/* Set the save path */
define('XLSX_SAVE_PATH', 'tmp/');
/** Include path **/
set_include_path(get_include_path() . PATH_SEPARATOR . 'Classes/');
/** PHPExcel */
include 'PHPExcel.php';
/** PHPExcel_Writer_Excel2007 */
include 'PHPExcel/Writer/Excel2007.php';
/* Create a new PHPExcel Object */
$objPHPExcel = new PHPExcel();
/* Add some metadata to the file */
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
$objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");
$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");
$objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
/* Set active worksheet to first */
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setTitle('Segments');
/* Add some data to the worksheet */
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Hello');
$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'world!');
$objPHPExcel->getActiveSheet()->SetCellValue('C1', 'Hello');
$objPHPExcel->getActiveSheet()->SetCellValue('D2', 'world!');
/* Write to server */
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$filename = "tony1.xlsx";
// Works fine up to here
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
//$objWriter->save('php://output');
$objWriter->save(XLSX_SAVE_PATH . $filename);
readfile(XLSX_SAVE_PATH . $filename);
echo "DONE!";
$objPHPExcel->disconnectWorksheets();
unset($objPHPExcel);
}
내가 힘 코드 섹션을 제거 할 때, 파일을 생성하고 난 괜찮아 내려 FTP 수 있습니다 기억하십시오. 그러나 파일을 생성하고 강제 실행하면 파일이 손상됩니다. 일반적으로 "Open & 복구"(Office2011 MacOSX)를 클릭 할 수 있지만 분명히 바람직하지 않습니다.
사람은 나를 이해하는 데 도움이 시겠어요 :
- 은이 부패로 생성되는 이유는 무엇입니까? 그리고 강제로 다운로드하지 않을 때 제대로 작동하는 이유는 무엇입니까?
- 적절한 저장/강제 순서는 무엇입니까 (PHP의 header() 함수 사용)
- 더 좋은 방법이 있다면.
많은 감사를드립니다! 내가 클릭 "& 수리를 해결"할 때
**** 업데이트 **** 여기에 코드입니다 :
readfile(XLSX_SAVE_PATH . $filename);
:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<logFileName>Repair Result to tony1 03178.xml</logFileName>
<summary>Errors were detected in file 'Macintosh HD:Users:tony.diloreto:Downloads:tony1.xlsx'</summary>
<additionalInfo><info>Excel completed file level validation and repair. Some parts of this workbook may have been repaired or discarded.</info></additionalInfo>
</recoveryLog>
파일에 저장하는 대신 로컬 복사본이 없으면'php : // output'에 저장하고,'$ objWriter-> save ('php : // output');' –
감사합니다 - do readfile() 줄이 필요합니까? 내가 그렇게하면 무엇이 들어갈 수 있을까요? –
'$ objWriter ='다음의 모든 것을 바꿉니다. –