【问题标题】:Error trying to export an Sqlsrv database table to excel works尝试将 Sqlsrv 数据库表导出到 excel 时出错
【发布时间】:2015-03-05 05:35:50
【问题描述】:

嘿,我正在尝试将 Sqlsrv 数据库表导出到 excel,但当我没有导出 datetime 列时效果很好,但是一旦我这样做了,我就会收到此错误: 致命错误:无法在第 86 行的 C:\xampp\htdocs\PhpExport\src\PHPExcel\Cell\DefaultValueBinder.php 中将 DateTime 类型的对象用作数组

$sql = "SELECT * FROM ComSec_meeting ORDER BY submission_date";

$stmt = sqlsrv_query($conn, $sql);

try {
        // Set value binder 
        PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_AdvancedValueBinder() ); 
    $sheet = new PHPExcel();

    // Set metadata
    $sheet->getProperties()->setCreator('Mozes')
                           ->setLastModifiedBy('Mozes')
                           ->setTitle('Try')
                           ->setKeywords('Try');

            // Set default settings
    $sheet->getDefaultStyle()->getAlignment()->setVertical(
            PHPExcel_Style_Alignment::VERTICAL_TOP);

    $sheet->getDefaultStyle()->getAlignment()->setHorizontal(
            PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    $sheet->getDefaultStyle()->getFont()->setName('Lucida Sans Unicode');
    $sheet->getDefaultStyle()->getFont()->setSize(12);


            // Get reference to active spreadsheet in workbook
    $sheet->setActiveSheetIndex(0);
    $activeSheet = $sheet->getActiveSheet();

    // Set print options
    $activeSheet->getPageSetup()->setOrientation(
            PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE)
            ->setFitToWidth(1)
            ->setFitToHeight(0);

    $activeSheet->getHeaderFooter()->setOddHeader('&C&B&16' . 
            $sheet->getProperties()->getTitle())
            ->setOddFooter('&CPage &P of &N');

            // Populate with data
    $row = sqlsrv_fetch_array($stmt);

    $colHeaders = array_keys($row);
    $col = 'A';
    $rownum = 1;    

            // Set column headings
    foreach ($colHeaders as $header) {
        $activeSheet->setCellValue($col . $rownum, $header);
        $activeSheet->getStyle($col . $rownum)->getFont()->setBold(true);

        $col++;
    }

            // Populate individual cells with data
    do {
        $col = 'A';
        $rownum++;
        foreach ($row as $value) {
            $activeSheet->setCellValue($col++ . $rownum, $value);

                    }
    } while ($row = sqlsrv_fetch_array($stmt));


             // Format individual columns
    $activeSheet->getStyle('E2:E' . $rownum)->getNumberFormat() ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);
            $activeSheet->getStyle('F2:F' . $rownum)->getNumberFormat() ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);

    // Give spreadsheet a title
    $activeSheet->setTitle('Try');![enter image description here][1]

    // Generate Excel file and download
            header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="TryOut.xlsx"');
    header('Cache-Control: max-age=0');

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


} catch (Exception $e) {
    $error = $e->getMessage();
}

【问题讨论】:

    标签: php sql-server datetime phpexcel


    【解决方案1】:

    在尝试在单元格中设置该值之前,使用PHPExcel_Shared_Date::PHPToExcel() 将数据库结果集中的日期值(您在列EF 中设置的值)转换为MS Excel 序列化日期时间值

    foreach ($row as $value) {
        if ($value instanceof DateTime) {
            // Convert DateTime values to MS Excel serialized timestamps
            $value = PHPExcel_Shared_Date::PHPToExcel($value);
        }
        $activeSheet->setCellValue($col++ . $rownum, $value);
    }
    

    【讨论】:

      猜你喜欢
      • 2016-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      相关资源
      最近更新 更多