【问题标题】:php spreadsheet- unable to view excel filephp电子表格-无法查看excel文件
【发布时间】:2018-11-03 12:38:20
【问题描述】:

您好,我在yii2 工作。我有一个函数,我正在通过我的mysql query 制作一个 excel 文件。

 $sql = "SELECT SUM(OGP_Created)  AS OGP_Created,SUM(UnVerifiedMSN) AS 
 Un_Verified_Meters,SUM(VerifiedMeters) AS Verified_Meters,SDCode AS 
 Sub_Div_Code
,SDName AS Sub_Div_Name FROM(
SELECT COUNT(DISTINCT od.`meter_id`) AS OGP_Created,0 AS UnVerifiedMSN,0 AS 
VerifiedMeters, sd.`sub_div_code` AS 'SDCode', sd.`name` AS 'SDName' 
FROM `ogp_detail` od
LEFT JOIN `survey_hesco_subdivision` sd ON od.`sub_div` = sd.`sub_div_code`
WHERE od.`meter_type` = '3-Phase'
GROUP BY sd.`name`

UNION ALL

SELECT 0 AS OGP_Created,COUNT(DISTINCT mp.`meter_id`) AS UnVerifiedMSN,0 AS 
VerifiedMeters, sd.`sub_div_code` AS 'SDCode', sd.`name` AS 'SDName'
FROM `meter_ping` mp 
INNER JOIN `meters` m ON mp.`meter_id` = m.`id`
INNER JOIN `survey_hesco_subdivision` sd ON mp.`sub_div_code` = 
sd.`sub_div_code`
WHERE mp.`meter_type`= '3-Phase' AND mp.`meter_status` = 'Un Verified'
GROUP BY sd.`name`

UNION ALL

SELECT 0 AS OGP_Created,0 AS UnVerifiedMSN,COUNT(DISTINCT m.`id`) AS 
VerifiedMeters, sd.`sub_div_code` AS 'SDCode', sd.`name` AS 'SDName'
FROM `meters` m
INNER JOIN `survey_hesco_subdivision` sd ON m.`sub_div` = sd.`sub_div_code`
WHERE m.`meter_type` = '3-Phase' AND m.`meter_status` = 'Installed'
GROUP BY sd.`name`
)z 
GROUP BY SDName";

    $result = Yii::$app->db->createCommand($sql)->queryAll();

传递$result

    //create a xlsx file
    $filename   =   $this->getAttachment($result);

getAttachment 函数

 $spreadsheet = new Spreadsheet();
    $sheet = $spreadsheet->getActiveSheet();
    $sheet->setCellValue('A1', 'OGP Created')
          ->setCellValue('B1','Un Verified Meters')
          ->setCellValue('C1','Verified Meters')
          ->setCellValue('D1','Sub Div Code')
          ->setCellValue('E1','Sub Div Name');

    foreach($results as $key => $result_data) {
        $x = $key + 2;
        $spreadsheet->setActiveSheetIndex(0)
            ->setCellValue("A$x", $result_data['OGP_Created'])
            ->setCellValue("B$x", $result_data['Un_Verified_Meters'])
            ->setCellValue("C$x", $result_data['Verified_Meters'])
            ->setCellValue("D$x", $result_data['Sub_Div_Code'])
            ->setCellValue("E$x", $result_data['Sub_Div_Name']);
    }
    $filename = 'Output.xlsx'; //save our workbook as this file name
    // Redirect output to a client’s web browser (Xlsx)
    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment;filename="'.$filename.'"');
    header('Cache-Control: max-age=0');
    // If you're serving to IE 9, then the following may be needed
    header('Cache-Control: max-age=1');

    die();

现在我在运行上面的代码时。文件已下载,但当我打开文件时它显示

如何制作正确的excel文件?任何帮助将不胜感激

【问题讨论】:

  • 你没有向浏览器发送任何内容 - 你需要在 die() 之前输出你的工作表。
  • 你能用kartik gridview吗? - demos.krajee.com/grid-demo#comments
  • @AnkitSompura 使用 gridView 有什么意义?

标签: yii2 yii2-advanced-app phpspreadsheet


【解决方案1】:

参考PhpSpreadsheet

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'OGP Created')
      ->setCellValue('B1','Un Verified Meters')
      ->setCellValue('C1','Verified Meters')
      ->setCellValue('D1','Sub Div Code')
      ->setCellValue('E1','Sub Div Name');

foreach($results as $key => $result_data) {
    $x = $key + 2;
    $spreadsheet->setActiveSheetIndex(0)
        ->setCellValue("A$x", $result_data['OGP_Created'])
        ->setCellValue("B$x", $result_data['Un_Verified_Meters'])
        ->setCellValue("C$x", $result_data['Verified_Meters'])
        ->setCellValue("D$x", $result_data['Sub_Div_Code'])
        ->setCellValue("E$x", $result_data['Sub_Div_Name']);
}
$filename = 'Output.xlsx'; //save our workbook as this file name
// Redirect output to a client’s web browser (Xlsx)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');

$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');
die();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 2019-03-13
    • 1970-01-01
    • 2019-04-09
    相关资源
    最近更新 更多