使用PHPSpreadsheet导出.xlsx,以读取创建HTML表的.php文件

时间:2018-06-21 03:23:37

标签: php html-table phpspreadsheet

是否可以使用PHPSpreadsheet从创建HTML表的.php文件中创建.xlsx电子表格? .php文件从POST和DB值创建HTML表。我能够仅使用php标头说明成功创建.xls文件。通过PHPSpreadsheet获得的最接近的内容是将.php文件读取为HTML,这会创建一个.xlsx文件,但还会在浏览器中生成有关该文件类型的php警告,并且.xlsx文件除了包含所有的php代码外,还包含生成的HTML表格(表格的静态标题位于电子表格中,而不是表格的动态php内容中)。我在PHPSpreadsheet文档中找不到有关读取.php文件的任何内容。我已经尝试过在php文件的开头使用text / html标头,但这对.xlsx文件的内容没有任何改变。

   <?php
    require_once("../urlparse.php");
    require_once("$passwordfile");
    require_once("dbfetchsiteoptions.php");
    $fullname = $_SESSION['fullname'];
    $userid = $_SESSION['userid'];
    $stmt = $PDO->prepare("SELECT * FROM siteoptions WHERE optionname='timesheetround'");
    $stmt->execute();
    $data = $stmt->fetch(PDO::FETCH_ASSOC);
    $optionname = $data['optionname'];
    $roundoptions = array($data['optionvalue1'], $data['optionvalue2'], $data['optionvalue3']);
    $valuecurrent = $data['optionvaluecurrent'];
    $stmt = $PDO->prepare("SELECT * FROM payperiod WHERE id='1'");
    $stmt->execute();
    $data = $stmt->fetch(PDO::FETCH_ASSOC);
    $payperiodstart = new DateTime($data['payperiodstart']);
    $payperiodinterval = new DateInterval($data['payperiodinterval']);
    while($payperiodstart <= $newdatetime) {
      $payperiodstartdate = $payperiodstart->format('m-d-Y');
      $payperiodstart->add($payperiodinterval);
      $payperiodstart->sub(new DateInterval('P01D'));
      $payperiodenddate = $payperiodstart->format('m-d-Y');
      $payperiodstart->add(new DateInterval('P01D'));
    }
    if(isset($payperiodstartdate))   echo '<table><tr><th>From</th><th>'.$payperiodstartdate.'<th>To</th><th>'.$payperiodenddate.'</th></tr>';
    $stmt = $PDO->prepare("SELECT * FROM timesheet WHERE userid='$userid' ORDER BY id ASC");
    $stmt->execute(); ?>

    <table><tr><th>Date</th><th>Time-In</th><th>Time-Out</th><th>Hours</th></tr>

    <?php
    while($data = $stmt->fetch(PDO::FETCH_ASSOC)) {
      $date = new DateTime($data['date']);
      $date = $date->format('m-d-Y');
      if($date >= $payperiodstartdate AND $date <= $payperiodenddate) {
        $hours[] = $data['hours'];
        echo '<tr><td>'.$date.'</td><td>'.date("g:i a", strtotime($data['timein'])).'</td>';
        if($data['timeout'] == NULL) {
          echo '<td>Working...</td>';
        }else{
          echo '<td>'.date("g:i a", strtotime($data['timeout'])).'</td>';
        }
        echo '<td>'.$data['hours'].'</td></tr>';
      }
    } ?>

    </table>

    <?php
    if(empty($hours)){$hours = '00:00';}
    $counter = new times_counter($hours);
    class times_counter {
      private $hou = 0;
      private $min = 0;
      private $sec = 0;
      private $totaltime = '00:00';
      public function __construct($times){
        if(is_array($times)){
          $length = sizeof($times);
          for($x=0; $x <= $length; $x++){
            $split = explode(":", @$times[$x]);
            if(!empty($split[0])) {$this->hou += @$split[0];}
            $this->min += @$split[1];
          }
          $seconds = $this->sec % 60;
          $minutes = $this->sec / 60;
          $minutes = (integer)$minutes;
          $minutes += $this->min;
          $hours = $minutes / 60;
          $minutes = $minutes % 60;
          $hours = (integer)$hours;
          $hours += $this->hou;
          if($minutes < '10') {$minutes = sprintf("%02d", $minutes);}
          if($hours < '10') {$hours = sprintf("%02d", $hours);}
          if($hours >= 80) {$othours = $hours - 80; $hours = 80;}
          if(isset($othours)) {$this->totaltime = $hours.':00<br><h3>Overtime</h3>'.$othours.':'.$minutes;}else{$this->totaltime = $hours.":".$minutes;}
        }
      }
      public function get_total_time(){
          return $this->totaltime;
      }
    }
    ?>

    <table><tr><th></th><th></th><th></th><th>Total Hours</th></tr><tr><td></td><td></td>
<td></td><td><?php echo $counter->get_total_time(); ?></td></tr>

</table>

1 个答案:

答案 0 :(得分:2)

您有2种方法可以做到这一点:

  • 继续从PHP脚本生成的HTML生成xlsx。

通过这种方式,您的PHP脚本在磁盘上生成(例如)export.html文件,然后phpspreadsheet代码使用“ HTML Reader”读取该文件并生成xslx。

使用PHPExcel(phpspreadsheet的旧名称),我们做到了:

$inputFileType = 'HTML';
$inputFileName = './myHtmlFile.html';
$outputFileType = 'Excel2007';
$outputFileName = './myExcelFile.xlsx';

$objPHPExcelReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objPHPExcelReader->load($inputFileName);

$objPHPExcelWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,$outputFileType);
$objPHPExcel = $objPHPExcelWriter->save($outputFileName);