PHPExcel 无法正常工作

标签 php mysql phpexcel

我使用 PHPExcel来自 here 的图书馆创建 excel 文件扩展名 .xlsx 为此,我使用 phpmysql这个excel文件的数据来自mysql数据库。

创建代码后,我收到此消息:

Excel can't open the file because the file format or file extension is not valid. Verify that the file has not been corrupted and that the file extension matches the format of the file

为了解决这个问题,我使用:

ob_start(); ob_end_clean();

之后,我下载了文件并尝试打开 excel 文件,我收到了这条消息:

We found a problem with some content in your file.Do you want to us to try to recover as much as we can?if you trust the source of this workbook,click yes.

当我单击"is"时,我收到此消息:

Excel completed file level validation and repair. Some parts of this workbook may have been repaired or discarded.

我单击关闭打开的 excel 文件,但在这个 excel 文件中,我的数据有一些空行。

这是我使用 PHPExcel 下载 excel 文件的代码

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_end_clean()是第一条消息的真正解决方案,因为我在互联网上看到了一个教程,他的代码在不使用 ob_end_clean() 的情况下也能正常工作。或 ob_start()

最佳答案

你正在做相反的事情。您唯一需要进入缓冲区的部分是 $file->save("php://output");。如果出于任何原因在保存到输出后简单地 exiting 对您来说还不够,请删除第一行 ob_start(); 和最后一行,然后试试这个:

ob_start();
$file->save("php://output");
$content = ob_get_contents();
ob_end_clean();
die($content);

关于PHPExcel 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46054805/

相关文章:

mysql - 这有意义吗/如何在(MySQL)数据库之间共享数据?

php - 有没有办法使用 PHPExcel 从 20MB 以上的 Excel 文件中获取工作表名称?

PHPExcel 功能问题

php - 在类 __construct() 中间返回是否可以接受

php - 调用未定义的方法 MDB2_Error::setFetchMode()

mysql - SQL 本地数据库设置了吗?

PHPExcel读取单元格的格式

php:空数组元素什么时候不为空?

php - PHP 数组中最大值的位置

mysql - Elastic Search 使用 River-jdbc 与远程 mysql 服务器同步数据