【问题标题】:PHPExcel: Downloading spreadsheetPHPExcel:下载电子表格
【发布时间】:2013-08-03 05:09:39
【问题描述】:

很长一段时间以来,我一直在尝试让用户能够使用对话框“另存为”或“打开”创建的电子表格。

这是我尝试过的,我没有收到任何错误,只是屏幕上出现乱码:

//CREATE SPEADSHEET

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

// We'll be outputting an excel file
header('Content-type: application/vnd.ms-excel');

// It will be called file.xls
header('Content-Disposition: attachment; filename="file.xls"');

// Write file to the browser
$objWriter->save('php://output');

如果能帮我解决这个问题,我将不胜感激。

【问题讨论】:

  • 在设置标题之前你有什么回显吗?你有没有用乱码查看屏幕上的标题以确保它们是正确的?
  • 执行“另存为”并在文本编辑器中打开文件:然后查找空白(空格、制表符、换行符等)作为文件中的第一个或最后一个字符,一个 BOM标记,或文件中任何可见的 PHP 错误消息
  • @Mark Ba​​ker,我无法“另存为”,而且我没有收到任何错误,这就是问题所在。
  • 在这种情况下,“查看源代码”并查找上述内容。最可能的原因是您正在回显 Excel 文件以外的某些输出
  • 感谢您的回复。不,在标题之前没有回显任何数据......您所说的“您是否看过屏幕上的标题以确保它们是正确的?”是什么意思?抱歉,我对这一切都不熟悉。

标签: php phpexcel


【解决方案1】:

我刚刚尝试了您的部分代码,它工作得很好,如果您只是乱码,问题实际上可能出在您生成表格的部分,请检查该部分是否有任何错误,下面是我用来测试它的代码:

 define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');

    /** Include PHPExcel */
    require_once '../../PHPExcel/Classes/PHPExcel.php';

    // Create new PHPExcel object
    $objPHPExcel = new PHPExcel();

    // Set document properties
    $objPHPExcel->getProperties()->setCreator("Lumina")
                         ->setLastModifiedBy("Lumina")
                         ->setTitle("Entry members")
                         ->setSubject("Entry members")
                         ->setDescription("List of members participting.")
                         ->setKeywords("office PHPExcel php")
                         ->setCategory("Entry members");

        // Add some data                 
        $objPHPExcel->setActiveSheetIndex(0)
        ->setCellValue('A1', $row_titles['TITLE01'])
        ->setCellValue('B1', $row_titles['TITLE02'])
        ->setCellValue('C1', $row_titles['TITLE03'])
        ->setCellValue('D1', $row_titles['TITLE04'])
        ->setCellValue('E1', $row_titles['TITLE05'])
        ->setCellValue('F1', $row_titles['TITLE06'])
        ->setCellValue('G1', $row_titles['TITLE07'])
        ->setCellValue('H1', $row_titles['TITLE08'])
        ->setCellValue('I1', $row_titles['TITLE09'])
        ->setCellValue('J1', $row_titles['TITLE10'])
        ->setCellValue('K1', $row_titles['TITLE11'])
        ->setCellValue('L1', $row_titles['TITLE12'])
        ->setCellValue('M1', $row_titles['TITLE13'])
        ->setCellValue('N1', $row_titles['TITLE14'])
        ->setCellValue('O1', $row_titles['TITLE15'])
        ->setCellValue('P1', $row_titles['TITLE16'])
        ->setCellValue('Q1', $row_titles['TITLE17'])
        ->setCellValue('R1', $row_titles['TITLE18'])
        ->setCellValue('S1', $row_titles['TITLE19'])
        ->setCellValue('T1', $row_titles['TITLE20'])
        ->setCellValue('U1', $row_titles['TEAM_TX'])
        ->setCellValue('V1', $row_titles['T_SHIRT_SIZE'])
        ->setCellValue('W1', $row_titles['INPUT1_TX'])
        ->setCellValue('X1', $row_titles['INPUT2_TX'])
        ->setCellValue('Y1', $row_titles['INPUT3_TX'])
        ->setCellValue('Z1', $row_titles['INPUT4_TX']);

        // Rename worksheet
        $objPHPExcel->getActiveSheet()->setTitle('Participants');

        // Set active sheet index to the first sheet, so Excel opens this as the first sheet
        $objPHPExcel->setActiveSheetIndex(0);

        // Save Excel5 file
        //echo date('H:i:s') , " Write to Excel5 format" , EOL;
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save(str_replace('.html', '.xls', __FILE__));

        // We'll be outputting an excel file
        header('Content-type: application/vnd.ms-excel');

        // It will be called file.xls
        header('Content-Disposition: attachment; filename="file.xls"');

        // Write file to the browser
        $objWriter->save('php://output');

我希望这能对我有所帮助,因为我也是 PHP 新手。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我在回复中变得乱七八糟。并且excel无法打开。 解决方法是不使用表单提交或ajax调用,只使用document.location转发excel生成器的流程。 例如:

    document.location="/php/Controller/YnrAPICall.php?is_string=1&params="+ JSON.stringify(params);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      相关资源
      最近更新 更多