【发布时间】:2015-01-23 16:28:18
【问题描述】:
我创建了一个程序来动态创建文件。它工作正常。当我添加代码以提示用户保存文件的位置时,它会保存,但是当我尝试打开文件时,我收到错误“无法打开文件,因为文件格式或文件扩展名无效”。当我在没有提示的情况下保存它时,它可以正常打开。
代码的相关部分是:
if(isset($_POST['esd']))
{
$sqlcust = "SELECT * FROM compliance_customers WHERE Customer_ref = " . $_REQUEST['cust'];
$sqlcustresult = mysqli_query($conn, $sqlcust);
while($row_sqlcustresult = mysqli_fetch_array($sqlcustresult))
{
$name = $row_sqlcustresult['Customer_name'];
}
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$name.'_'.$date.'.xlsx"');
}
#use php excel to create a spreadsheet of the customers current subscription
if( (isset($_REQUEST['esd'])) && (!isset($noEsd)) )
{
// Set properties for the excel file
$objPHPExcel = new PHPExcel();
$objPHPExcel->getProperties()->setCreator($_SESSION['username']);
$objPHPExcel->getProperties()->setLastModifiedBy($_SESSION['username']);
$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Customer export_" . $customername);
$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Customer export_" . $customername);
$objPHPExcel->getProperties()->setDescription($customername . "_" . $date);
$cnt_current_record = 2;
$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Content Name');
$objPHPExcel->getActiveSheet()->SetCellValue('B1', 'Content Type');
$objPHPExcel->getActiveSheet()->SetCellValue('C1', 'Content Description');
$sql_excelfile = "SELECT * FROM compliance_changes ORDER BY change_type";
$result_sql_excelfile = mysqli_query($conn, $sql_excelfile);
while($row_sql_excelfile = mysqli_fetch_array($result_sql_excelfile))
{
if(in_array($row_sql_excelfile['change_name'], $excel_array))
{
#echo "<tr class='subscriptiondetails'><td>" .$row_sql_excel['change_name']."</td><td>" .$row_sql_excel['change_type']."</td><td>". $row_sql_excel['change_description']."</td></tr>";
#$objPHPExcel->setActiveSheetIndex($cnt_current_record);
$objPHPExcel->getActiveSheet()->SetCellValue('A' . $cnt_current_record, $row_sql_excelfile['change_name']);
$objPHPExcel->getActiveSheet()->SetCellValue('B' . $cnt_current_record, $row_sql_excelfile['change_type']);
$objPHPExcel->getActiveSheet()->SetCellValue('C' . $cnt_current_record, $row_sql_excelfile['change_description']);
$cnt_current_record++;
}
}
#rename sheet
$sheet_title = $customername;
$objPHPExcel->getActiveSheet()->setTitle($sheet_title);
#write the xls file
#$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$filename = $customername . "_" . $date . ".xlsx";
#$objWriter->save(str_replace('customerdetail2.php', $filename, __FILE__));
$objWriter->save('php://output');
#echo the file has been written
echo $filename . " has been created";
我对PHPexcel不太熟悉,不知道为什么如果我只是保存它,文件打开很好,但是当我使用 $objWriter->save('php://output'); 输出代码,它失败了。任何人都可以帮忙吗?
【问题讨论】:
-
嗨@Len_D,感谢您发布。我已经尝试过那个解决方案,给了我同样的错误。
-
每当您看到此错误时,您应该做的第一件事是在文本编辑器中打开文件并在文件的开头或结尾查找空白字符(空格、制表符、换行符等),或 BOM 标记,或文件内容中任何明显的 PHP 人类可读错误消息
-
@MarkBaker 嗨,马克,非常感谢您的评论,您肯定强调了这个问题。但我不知道如何解决它。由于某种原因,我意识到导出不是输出数据,而是导出网页。这是我的标题有问题吗?
-
不,这可能意味着您还在脚本的其他地方输出页面标记....只需更改标题不会影响这一点,您需要确保没有其他内容输出/echoed/printed 当您尝试将文件发送到客户端浏览器时