Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHPExcel无法正常工作_Php_Mysql_Phpexcel - Fatal编程技术网

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中