如何在PHP中导出HTML表格到多个Excel工作表

enxuqcxy  于 8个月前  发布在  PHP
关注(0)|答案(3)|浏览(91)

我正在使用php,我想导出两个HTML表到excel文件,其中两个sheets各有一个表。
我按照文档,但它只创建一个表与一个表。

<?php
  use PhpOffice\PhpSpreadsheet\Spreadsheet;
  use PhpOffice\PhpSpreadsheet\IOFactory;
  use PhpOffice\PhpSpreadsheet\Reader\Html;
  use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;

  $firstHtmlString = '<table>
              <tr>
                  <td>Hello World</td>
              </tr>
          </table>';
  $secondHtmlString = '<table>
              <tr>
                  <td>Hello World</td>
              </tr>
          </table>';

  $reader = new \PhpOffice\PhpSpreadsheet\Reader\Html();
  $spreadsheet = $reader->loadFromString($firstHtmlString);
  $reader->setSheetIndex(1);
  $spreadhseet = $reader->loadFromString($secondHtmlString, $spreadsheet);

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

    $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
    return $writer->save('php://output'); 
  ?>

有什么能帮忙的吗?

kyvafyod

kyvafyod1#

这是工作版本:

require "vendor/autoload.php";

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx as xlsx; 
use PhpOffice\PhpSpreadsheet\IOFactory as io_factory; 


$firstHtmlString = '<table>
                  <tr>
                      <td>Hello World</td>
                  </tr>
              </table>';
$secondHtmlString = '<table>
                  <tr>
                      <td>Hello World</td>
                  </tr>
              </table>';

$reader = new \PhpOffice\PhpSpreadsheet\Reader\Html;
$spreadsheet = $reader->loadFromString($firstHtmlString);
$reader->setSheetIndex(1);
$spreadhseet = $reader->loadFromString($secondHtmlString, $spreadsheet);
$objWriter = io_factory::createWriter($spreadsheet, 'Xlsx');
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename=test.xlsx");
header("Content-Transfer-Encoding: binary ");

ob_end_clean();
ob_start();
$objWriter->save('php://output');
n8ghc7c1

n8ghc7c12#

问题是,读者说你只做一张纸。

$reader = new \PhpOffice\PhpSpreadsheet\Reader\Html;
$spreadsheet = $reader->loadFromString($firstHtmlString);
$reader->setSheetIndex(1);

您必须添加具有不同输入的不同工作表

$myWorkSheet1 = new \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet($spreadsheet, 'My Data');
$spreadsheet->addSheet($myWorkSheet1, 0);

$myWorkSheet2 = new \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet($spreadsheet, 'My Data');
$spreadsheet->addSheet($myWorkSheet2, 1);

请参阅此处的文档

7cjasjjr

7cjasjjr3#

$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
//--- you can erase this first worksheet.. 
//Assume you have native like below
$page =$spreadsheet->getActiveSheet();
$spreadsheet->getActiveSheet()->setTitle("welcome");

$str="HELLO WORLD";
$page->setCellValue( "A2", $str);
//Next worksheet from html
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Html;

$html = "<h1>ini adalah html 1</h1>";
$work1 = $reader->loadFromString($html);

$html = "<h1>this is html 2</h1>";
$work2 = $reader->loadFromString($html);

//try load by name
$main1 = clone $work1->getSheetByName('Worksheet');
//Use external.. because is different object
$spreadsheet->addExternalSheet($main1 );
//Must rename 
$spreadsheet->setActiveSheetIndex(1);
$spreadsheet->getActiveSheet()->setTitle("Work001");

//Last worksheet.. not tested.. please fix it
$main2 = clone $work2->getSheetByName('Worksheet');

//not tested the 2nd worksheet
$spreadsheet->addExternalSheet($main2);
$spreadsheet->setActiveSheetIndex(2)
$spreadsheet->getActiveSheet()->setTitle("Work002");

$objWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls');

            $dir = __DIR__."/";
// change it as you desire
            $objWriter->save($dir.$nameFile.".".$ext );

            echo "save on:{$nameFile}.{$ext}";

上面已经给出了答案。如果你有不同的Excel/电子表格对象的风格的问题。在laravel上使用这个。html从视图中的位置

相关问题