【问题标题】:PHPExcel; Issue with Array from MySQLPHPExcel; MySQL中的数组问题
【发布时间】:2013-12-26 15:13:46
【问题描述】:

显然,我是 PHPExcel 新手。我对 PHP 本身也很陌生。

该网站具有多个级别的查看/编辑权限。

我一直在为一个网站制作一个页面,该页面收集存储在 SQL 数据库中的信息并填充一个 Excel 模板。

application.php 包含所有数据库连接等。

基本上,我遇到的问题是当我调用数组来填充单元格时,它显示为相同数组值的重复项。不仅如此,还会将它们全部塞到同一列中。

我需要填充的值是:

部件号 描述 U/价格 数量 总计

15666562003 灯组件 $20.00 1 $20.00

运费 131514 $12.35 1 $12.35

数据会这样显示:

部件号 描述 U/价格 数量 总计

货运 货运 131514 131514 $12.35 $12.35 1 1 $12.35 $12.35

任何帮助将不胜感激!

<?php

include "./include/application.php";
require './Classes/PHPExcel.php';

error_reporting(E_ALL ^ E_NOTICE);

class CForm extends CApplication
{

function CForm()
{
$this->CApplication();
}

//**********************************************************

function Export($msg = "")
{


if ($_SESSION['aID'] == "" && $_SESSION['mID'] == "237" && $_SESSION['mID'] == "178" &&        $_SESSION['mID'] == "551")
{
    $sWhere = " AND dID = '$_SESSION[mID]'";
}


$sql = "SELECT * FROM dl_warranty_claims 
        INNER JOIN dealers ON (dID = wDealerID)
        WHERE 1 ".$sWhere." AND wID = '$_GET[id]'";

$res = $this->SQL($sql);
if (!($row = $this->FetchArray($res)))
{
    print "You do not have access to view this report.";
    exit();
}

error_reporting(E_ALL ^ E_NOTICE);
// Read the template file
 $inputFileType = 'Excel2007';
 $inputFileName = './templates/warrantyclaimtemplate2.xlsx';
 $objReader = PHPExcel_IOFactory::createReader($inputFileType);
 $objPHPExcel = $objReader->load($inputFileName);

// Adding data to the template
$objPHPExcel->getActiveSheet()->setCellValue('A3', ($row['wDealerName']));
$objPHPExcel->getActiveSheet()->setCellValue('B3', ($row['wID']));
$objPHPExcel->getActiveSheet()->setCellValue('C3', ($row['wCustomerName']));    
$objPHPExcel->getActiveSheet()->setCellValue('D3', ($row['wModelName']));
$objPHPExcel->getActiveSheet()->setCellValue('E3', ($row['wChassisSN']));
$objPHPExcel->getActiveSheet()->setCellValue('F3', ($row['wEngineSN']));
$objPHPExcel->getActiveSheet()->setCellValue('G3', ($row['wDateDelivery']));
$objPHPExcel->getActiveSheet()->setCellValue('H3', ($row['wDateFailure']));
$objPHPExcel->getActiveSheet()->setCellValue('I3', ($row['wDateClaim']));
$objPHPExcel->getActiveSheet()->setCellValue('J3', ($row['wOperatingHours']));

    $sql = "SELECT * FROM dl_warranty_parts 
            WHERE wpWarrantyClaimID = '$_GET[id]'";
    $res = $this->SQL($sql);
    while($rowp = $this->FetchArray($res))
    {
        $objPHPExcel->getActivesheet()->FromArray($rowp, NULL, 'A4');
    }

// Write and save file
 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

 header('Content-Type: application/vnd.openxmlformats-  officedocument.spreadsheetml.sheet');
 header('Content-Disposition: attachment; filename="warrantyclaimreport.xlsx"');

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


?>

【问题讨论】:

  • 那么实际的问题是什么?错误信息?
  • 请注意,您应该为 OfficeOpenXML .xlsx 文件使用 Excel2007 读取器和写入器; Excel5 Reader 和 Writer 用于 BIFF 格式 .xls 文件
  • 你好,问题是它把我带到一个空白页面而不是下载excel文档。
  • 另外,我已经改变了读者和作者,但我仍然面临同样的问题。我还将保存选项更改为 $objWriter->save('php://output');

标签: php mysql session phpexcel


【解决方案1】:

你的保存语句

$objWriter->save('WarrantyClaim.xlsx');

正在将一个名为 WarrantyClaim.xlsx 的文件写入磁盘(在脚本的当前工作目录中)。

但是你有标题表明你要将输出发送到浏览器

除了为您正在编写的文件类型发送正确的标头之外:

Filetype    Writer        Content type    
.xls        Excel5        application/vnd.ms-excel
.xlsx       Excel2007     application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

保存到php://output 会将文件发送到浏览器

您的阅读器也有类似的问题:当您应该使用 Excel2007 阅读器时,使用 Excel5 阅读器读取 .xlsx 文件

【讨论】:

  • 嗨,马克,感谢您的回复!我将您的更改应用于我的编码,但是,它仍然无法正常工作。我仍然被重定向到一个空白屏幕。编辑后的代码在我的原始帖子中。我在想这可能是 PHP 扩展没有正确启用或者我的 PHP 版本错误。我在 5.2.0 版
  • PHPExcel 应该仍然(当前)与 PHP 5.2 一起工作(尽管我肯定会推荐升级)
  • 尝试保存到磁盘,看看文件是否正确生成:如果正确,则表明问题出在浏览器写入
  • 嗨,马克,两者都不起作用……但是,我做了一些调整,让它吐出一条错误消息。它说它无法访问 ZipArchive。据我了解,这是因为未正确启用 PHP 扩展。你知道调整它的简单方法吗?另外,我正在考虑升级 PHP 版本...我只需要确保它不会干扰网站上已经建立的任何内容。
  • PHP 的后期版本倾向于默认启用 php_zip;但如果您无法为您的 5.2 版启用它,那么 PHPExcel 确实提供了一个(更慢且更耗内存)替代方案,可以在保存之前使用PHPExcel_Settings::setZipClass(PHPExcel_Settings::PCLZIP); 启用
【解决方案2】:

对于您的最新问题(请了解如何在 SO 上提问,当您有新问题时不要简单地编辑以前的问题,而应该提出新问题)

您的 $this-&gt;FetchArray() 方法似乎返回 both 枚举 关联数据...我不确切知道参数是什么,但应该有一些允许您指定 either 枚举 关联的设置,或指定仅返回关联数组的方法调用(例如 FetchAssoc()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多