PHPExcel无法正常工作
我使用PHPExcel无法正常工作,php,mysql,phpexcel,Php,Mysql,Phpexcel,我使用PHPExcellibrary from创建excel文件扩展名.xlsx 为此,我使用php和mysql这个excel文件的数据来自mysql数据库 创建代码后,我收到以下消息: Excel无法打开文件,因为文件格式或文件扩展名不正确 无效。验证文件是否已损坏,以及 文件扩展名与文件的格式匹配 要解决此问题,我使用: ob_start(); ob_end_clean(); 之后,我下载文件并尝试打开excel文件,我收到以下消息: 我们发现您文件中的某些内容有问题。是否要我们解决 尽可
PHPExcel
library from创建excel文件扩展名.xlsx
为此,我使用php
和mysql
这个excel文件的数据来自mysql
数据库
创建代码后,我收到以下消息:
Excel无法打开文件,因为文件格式或文件扩展名不正确
无效。验证文件是否已损坏,以及
文件扩展名与文件的格式匹配
要解决此问题,我使用:
ob_start(); ob_end_clean();
之后,我下载文件并尝试打开excel文件,我收到以下消息:
我们发现您文件中的某些内容有问题。是否要我们解决
尽可能多地恢复?如果你相信这件事的来源
请单击“是”
单击“是”时,我收到以下消息:
Excel已完成文件级验证和修复。这其中的一些部分
工作簿可能已被修复或丢弃
我单击“关闭”打开excel文件,但在该excel文件中,我的数据有一些空行
这是我使用PHPExcel
ob_start();
include("includes/connect.php");
require_once'PHPExcel/Classes/PHPExcel.php';
//Create PHPExcel object
$excel=new PHPExcel();
//selecting active sheet
$excel->setActiveSheetIndex(0);
$row=21;
while($data=mysqli_fetch_object($query)){
$excel->getActiveSheet()->setCellvalue('A'.$row,$data->db_maid)
->setCellvalue('B'.$row,$data->db_date)
->setCellvalue('C'.$row,$data->db_client)
->setCellvalue('D'.$row,$data->db_esid)
->setCellvalue('E'.$row,$data->db_type)
->setCellvalue('F'.$row,$data->db_phone)
->setCellvalue('G'.$row,$data->db_mobile)
->setCellvalue('H'.$row,$data->db_contactperson)
->setCellvalue('I'.$row,$data->db_competetivecompany)
->setCellvalue('J'.$row,$data->db_category)
->setCellvalue('K'.$row,$data->db_process)
->setCellvalue('L'.$row,$data->db_status)
->setCellvalue('M'.$row,$data->db_rate)
->setCellvalue('N'.$row,$data->db_doc)
->setCellvalue('O'.$row,$data->nextDate)
->setCellvalue('P'.$row,$data->db_ndstatus)
->setCellvalue('Q'.$row,$data->db_pnote)
->setCellvalue('R'.$row,$data->meetingStatus)
->setCellvalue('S'.$row,$data->db_ncam)
->setCellvalue('T'.$row,$data->medit)
->setCellvalue('U'.$row,$data->name);
//incriment the row
$row++;
}
//set column width
$excel->getActiveSheet()->getColumnDimension('A')->setWidth(10);
$excel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('D')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('E')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('F')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('G')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('H')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('I')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('J')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('K')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('L')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('M')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('N')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('O')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('P')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('Q')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('R')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('S')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('T')->setWidth(20);
$excel->getActiveSheet()->getColumnDimension('U')->setWidth(20);
//make table headers
$excel->getActiveSheet()
->setCellValue('A1','List Of Marketing')
->setCellValue('A3','#')
->setCellValue('B3','Date')
->setCellValue('C3','Client')
->setCellValue('D3','ES')
->setCellValue('E3','Type')
->setCellValue('F3','Phone')
->setCellValue('G3','Mobile')
->setCellValue('H3','Contact Person')
->setCellValue('I3','Competetive Company')
->setCellValue('J3','Categoty')
->setCellValue('K3','Process')
->setCellValue('L3','Status')
->setCellValue('M3','Rate')
->setCellValue('N3','Date Of Calling')
->setCellValue('O3','Next Date')
->setCellValue('P3','Next Date Status')
->setCellValue('K3','Phone Note')
->setCellValue('R3','Meeting Status')
->setCellValue('S3','Next Call After Meeting')
->setCellValue('T3','Edit Date')
->setCellValue('U3','Staff');
//Margin The title
$excel->getActiveSheet()->mergeCells('A1:U1');
//aligning
$excel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal('center');
//styling
$excel->getActiveSheet()->getStyle('A1')->applyFromArray(
array(
'font'=>array(
'size'=>24,
)
)
);
$excel->getActiveSheet()->getStyle('A3:U3')->applyFromArray(
array(
'font'=>array(
'bold'=>true
),
'borders'=>array(
'allborders'=>array(
'style'=>PHPExcel_Style_Border::BORDER_THIN
)
)
)
);
//give border to data
$excel->getActiveSheet()->getStyle('A4:U'.($row-1))->applyFromArray(
array(
'borders'=>array(
'outline'=>array(
'style'=>PHPExcel_Style_Border::BORDER_THIN
),
'vertical'=>array(
'style'=>PHPExcel_Style_Border::BORDER_THIN
)
)
)
);
//write the result to a file
$file=PHPExcel_IOFactory::createWriter($excel,'Excel2007');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="marketing.xlsx"');
header('Cache-Control:max-age=0');
ob_end_clean();
//output to php output instead of filename
$file->save('php://output');
我的问题是如何解决这个问题我不希望出现这个消息我也不希望excel中出现空行
ob\u end\u clean()
?你的做法正好相反。您需要进入缓冲区的唯一部分是$file->save(“php://output");代码>。如果出于任何原因,仅在保存到输出后退出是不够的,请删除第一个ob_start()代码>和最后一行,然后尝试以下操作:
ob_start();
$file->save("php://output");
$content = ob_get_contents();
ob_end_clean();
die($content);
尝试删除
break;
在libraries/PHPExcel/Calculation/Functions.php中(第1161行)
在公共静态函数类型中($value=NULL){}
在elseif(is_数组($value)){
它解决了我的问题 这样使用ob_start()
和ob_end_clean()
意味着PHP输出的任何错误都将被丢弃。如果删除这两个调用并将文档保存到实际文件中,会发生什么情况?你看到错误了吗?那么,如果你下载并打开保存的文件会发生什么情况?@rickdenhaan如果我删除这两个调用,我就无法打开文件,我会收到上面的第一条消息,你所说的将文档保存到实际文件是什么意思?我的意思是代替$file->save('php://output');
保存到实际文件,例如$file->save('/tmp/marketing.xlsx')
并删除头()
调用(暂时,仅用于测试)@rickdenhaan好的,当我使用你建议我有这个错误时,我会测试它致命错误:未捕获的异常“PHPExcel\u Writer\u exception”,消息是“无法关闭zip文件/tmp/marketing.xlsx”。在C:\wamp\www\eiwms\PHPExcel\Classes\PHPExcel\Writer\Excel2007.php的第389行PHPExcel\u Writer\u exception:无法关闭zip文件/tmp/marketing.xlsx。在第389行的C:\wamp\www\eiwms\PHPExcel\Classes\PHPExcel\Writer\Excel2007.php中