问题描述
$("#Export").on('click',function() {
$.ajax({
type: "POST",data: {
export:"excel",headers : tableHeaders,columns : columnsValues,where : whereConditions },success: function() { alert("done"); }
});
});
在我的 PHP
页面顶部,我检查发布请求是否存在,然后我从数据库中获取数据并使用 PHPspreadsheet 库将其粘贴到一个 excel 文件中,如下所示:
if( isset($_POST['export']) ){
require 'PHPspreadsheet/vendor/autoload.PHP';
use PHPOffice\PHPSpreadsheet\IOFactory;
use PHPOffice\PHPSpreadsheet\Spreadsheet;
use PHPOffice\PHPSpreadsheet\Writer\Xlsx;
require 'config/dbConnection.PHP';
// create my query and fetch the data from database
$sql = 'SELECT '. $_POST['columns'] .' FROM mytable WHERE '. $_POST['where'];
$stmt = $conn->query($sql);
$data = [];
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
$dataHeader = explode(',',$_POST['headers']);
// create my excel file
$spreadsheet = new Spreadsheet();
// rename sheet
$spreadsheet->getActiveSheet()->setTitle('data');
// set sheet first line header
$spreadsheet->getActiveSheet()
->fromArray(
$dataHeader,NULL,'A1');
// paste fetched data after header
$spreadsheet->getActiveSheet()
->fromArray(
$data,'A2');
// customize the file,bold header,autofit,zoom level,file name...
$sheet = $spreadsheet->getActiveSheet();
$highestColumn = $sheet->getHighestColumn();
$sheet->getStyle('A1:'. $highestColumn .'1')->getFont()->setBold(true);
$sheet->getSheetView()->setZoomScale(80);
$sheet->setAutoFilter('A1:'. $highestColumn .'1');
foreach( $sheet->getColumnIterator() as $col ) { $sheet->getColumnDimension( $col->getColumnIndex() )->setAutosize( true ); }
$filename = 'exportedData.xlsx';
// download the file on browser
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-disposition: attachment;filename="'. $filename .'"');
header('Cache-Control: max-age=0');
$writer = IOFactory::createWriter($spreadsheet,'Xlsx');
$writer->save('PHP://output'); }
我看到文件是在ajax调用完成后创建的,但没有下载到浏览器上。我尝试添加 $file = fopen('PHP://output','w');
或 readfile('PHP://output');
,但没有用。
我知道可以在 ajax 调用中将 url 设置为另一个 PHP 文件,然后成功后我可以调用 window.open('myURL','_blank' );
并且文件将下载到新打开的选项卡中,但我不想要那样。
任何建议请我的代码中缺少在同一页面上进行ajax调用并在同一页面上下载文件的内容?谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)