是否可以使用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>
答案 0 :(得分:2)
您有2种方法可以做到这一点:
通过这种方式,您的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);