PHPExcel将HTML表导出到xlsx

时间:2017-09-13 10:16:55

标签: php excel export phpexcel xlsx

我需要将数据库中的数据导出HTML表格尽可能轻松地导出到 xlsx文件

我尝试了PHPExcel和一些JS插件,但失败了

有没有新的解决方案?

我发现的一切都差不多有10年了。

这就是我创造的:

我的HTML表单:

<form action="download.php">
    <input type="submit" value="Export" />
</form>

我的PHPExcel代码(文件:download.php):

<?php

require_once "../Classes/PHPExcel.php";

$objPHPExcel = new PHPExcel();
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'hello world!');
$objPHPExcel->getActiveSheet()->setTitle('Chesse1');

header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="helloworld.xlsx"');
header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');

?>

当我点击该按钮时,它会下载该文件,但我无法打开它,因为“格式错误”

我也试过这个视频教程: https://www.youtube.com/watch?v=4dc3a4isHNE&t

导出Excel文件但出现了另一个问题。

我遇到的问题是错误的字符集。 我需要使用以下字符:ě,š,č,ř,ž,ý,á,í等等,这些字符完全搞砸了。

3 个答案:

答案 0 :(得分:0)

更新回答:

<?php  
$conn = new mysqli('localhost', 'root', '');  
mysqli_select_db($conn, 'xlsexport');  
$setSql = "SELECT `ur_Id`,`ur_username`,`ur_password` FROM `tbl_user`";  
$setRec = mysqli_query($conn, $setSql);  
$columnHeader = '';  
$columnHeader = "Sr NO" . "\t" . "User Name" . "\t" . "Password" . "\t";  
$setData = '';  
while ($rec = mysqli_fetch_row($setRec)) {  
    $rowData = '';  
    foreach ($rec as $value) {  
        $value = '"' . $value['id'] . '"' . "\t".'"' . $value['ur_username'] . '"'."\t".'"' . $value['ur_password'] . '"';  
        $rowData .= $value;  
    }  
    $setData .= trim($rowData) . "\n";  
}  
header("Content-type: application/octet-stream");  
header("Content-Disposition: attachment; filename = User_Detail_Reoprt.xlsx");  
header("Pragma: no-cache");  
header("Expires: 0");  
echo ucwords($columnHeader) . "\n" . $setData . "\n";  
?>

答案 1 :(得分:0)

我在代码中更改了格式并添加了缓冲区清理。

<?php

require_once "../Classes/PHPExcel.php";

$objPHPExcel = new PHPExcel();

header('Content-Type: application/vnd.ms-excel; charset=utf-8');
header('Content-Disposition: attachment;filename="helloworld.xls"');

$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->getCell('A20')->setValue("TEST PHPEXCEL");
$objPHPExcel->getActiveSheet()->setTitle('Chesse1');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
ob_end_clean();
$objWriter->save('php://output');

?>

有时Excel2007Excel5发生冲突。它取决于PHPExcel中可用的库文件。下载后我有同样的文件无法打开的问题。所以我改为Excel5

已插入示例数据以检查是否在excelsheet中出现数据。您可以将其替换为数据库变量。

同样ob_end_clean()有助于避免缓存缓存。

希望这有帮助。

答案 2 :(得分:0)

<?php
if (function_exists('mb_internal_encoding')) {
    $oldEncoding=mb_internal_encoding();
    mb_internal_encoding('latin1');
}

require_once 'addons/PHPExcel/PHPExcel/IOFactory.php'; //Update your Path for PHPExcel Class
$objPHPExcel = new PHPExcel();

$sheet = $objPHPExcel->getActiveSheet();
$sheet->setTitle("Template Title");

$sheet->getColumnDimension('A')->setWidth(30);

$sheet->SetCellValue('A1', 'hello world!');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

if (function_exists('mb_internal_encoding')){
    mb_internal_encoding($oldEncoding); 
}

header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename=helloworld.xlsx");
header('Cache-Control: max-age=0');

$objWriter->save('php://output');
?>