我用HTML创建了一个按钮
该按钮调用Jquery函数on('click')
现在,ajax被触发以从PHP中获取数据
PHP脚本应该输出一个excel文件,并打开一个save dialog
供用户下载excel文件
所以我有三个文件:主PHP,JS和后端PHP
如果我把标题放在Main PHP中,save dialog
就会在我进入页面时出现。(按下按钮时不会)
如果我把头放在"后端PHP"中,什么都不会发生
那么,我应该把"标题"放在哪里呢
我不能这样做吗
标题
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header("Content-Disposition: attachment; filename='"file.xlsx'"");
header("Cache-Control: max-age=0");
主PHP中的HTML按钮
<button class="btn btn-default" id="btnExportElementdata"><span class="glyphicon glyphicon-save" title="Spara"></span></button>
JS
//Btn Save
$('#btnExportElementdata').on('click', function(){
//Fetch selected ObjNr
objNr = $('#selectObjekt').val();
//Send objNr to php and fetch elementData
$.ajax({
url: '../phpexcel/php/exportElementData.php',
method: 'POST',
data: {objNr : objNr},
success: function(result){
$('#elementData').append(result);
}
})
})
后端PHP
<?php
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header("Content-Disposition: attachment; filename='"results.xlsx'"");
header("Cache-Control: max-age=0");
//Load db connection
require("conf.php");
//Check if usr is logged in
if(empty($_SESSION['user'])){
header("Location: index.php");
die("Redirecting to index.php");
}
//Check IF post
if(!empty($_POST['objNr'])){
//Store post in var
$objNr = $_POST['objNr'];
/** Error reporting */
error_reporting(E_ALL);
//Load phpexcel includes
require '../Classes/PHPExcel.php';
/** PHPExcel_Writer_Excel2007 */
include '../Classes/PHPExcel/Writer/Excel2007.php';
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
// Set properties
$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.");
// Add some data
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Nr');
$objPHPExcel->getActiveSheet()->SetCellValue('B1', 'Höjd');
$objPHPExcel->getActiveSheet()->SetCellValue('C1', 'Typ');
$objPHPExcel->getActiveSheet()->SetCellValue('D1', 'Längd');
$objPHPExcel->getActiveSheet()->SetCellValue('E1', 'AV');
$objPHPExcel->getActiveSheet()->SetCellValue('F1', 'Öppningar');
$objPHPExcel->getActiveSheet()->SetCellValue('G1', 'Vikt');
//Fetch data from DB
$query = "SELECT * FROM element WHERE objekt_nr = '$objNr' ORDER BY length(element_nr), element_nr ASC";
try{
$stmt = $db->prepare($query);
$result = $stmt->execute();
}
catch(PDOException $ex){
die("Failed to run query: " . $ex->getMessage());
}
//Insert on first row after heading
$row = 2;
while($value = $stmt->fetch()){
//Set start Column
$column = "A";
$objPHPExcel->getActiveSheet()->SetCellValue($column++.$row, $value['element_nr']);
$objPHPExcel->getActiveSheet()->SetCellValue($column++.$row, $value['hojd']);
$objPHPExcel->getActiveSheet()->SetCellValue($column++.$row, $value['typ']);
$objPHPExcel->getActiveSheet()->SetCellValue($column++.$row, $value['langd']);
$objPHPExcel->getActiveSheet()->SetCellValue($column++.$row, $value['avdrag']."");
$objPHPExcel->getActiveSheet()->SetCellValue($column++.$row, $value['oppningar']."");
$objPHPExcel->getActiveSheet()->SetCellValue($column++.$row, $value['vikt']);
//INCREASE Row Nr
$row++;
}
// Rename sheet
$objPHPExcel->getActiveSheet()->setTitle($objNr);
// Write file to the browser
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save('file.xlsx');
}
else{
echo 'Välj objektnummer..';
}
除了save dialog
之外的所有脚本都很好
如果我把文件保存在服务器上,它会完美工作
本期内容全部为headers
您需要从文件中删除这些标头。
如果需要,可以使用ajax,但必须只返回文件所在的链接并在浏览器中显示。当用户单击此链接时,将调用一个函数。您将在此函数中设置标题,这将强制下载保存的文件。我希望这对你有意义。