Есть несколько вариантов, как вы можете экспортировать таблицу HTML в xls или xlsx.
Первый, повторяющий содержимое под правыми заголовками. Это создаст тонны предупреждений в Excel, но xls будет читабельным:
<?php
$excel_file="output.xls";
$table = "<!DOCTYPE html>
<html>
<head>
<style>
</style>
</head>
<body>
<table>
<tr><td>Some </td><td>table</td> <td>rows</td> <td>with</td> <td>table</td> <td>data</td></tr>
</table>
</body>
</html>";
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=".$excel_file."");
echo $table;
?>
Второй более плавный, с использованием существующей библиотеки, такой как PhpSpreadsheet. Вы можете найти довольно хороший базовый пример на их странице github: https://github.com/PHPOffice/PhpSpreadsheet/blob/master/samples/Basic/01_Simple.php
Третий пример с использованием фрагментов JS из SheetJS JS-XLSX library . Здесь вы можете увидеть один базовый пример:
<!DOCTYPE html>
<html>
<head>
<title>SheetJS JS-XLSX In-Browser HTML Table Export Demo</title>
<meta charset="utf-8" />
</head>
<body>
<![if gt IE 9]>
<script type="text/javascript" src="//unpkg.com/xlsx/dist/shim.min.js"></script>
<script type="text/javascript" src="//unpkg.com/xlsx/dist/xlsx.full.min.js"></script>
<script type="text/javascript" src="//unpkg.com/blob.js@1.0.1/Blob.js"></script>
<script type="text/javascript" src="//unpkg.com/file-saver@1.3.3/FileSaver.js"></script>
<![endif]>
<script>
function doit(type, fn, dl) {
var elt = document.getElementById('data-table');
var wb = XLSX.utils.table_to_book(elt, {sheet:"Sheet JS"});
return dl ?
XLSX.write(wb, {bookType:type, bookSST:true, type: 'base64'}) :
XLSX.writeFile(wb, fn || ('SheetJSTableExport.' + (type || 'xlsx')));
}
</script>
<div id="container">
<table id="data-table">
<tr><td>Sample1</td><td>Sample2</td><td>Sample3</td></tr>
<tr><td>Sample4</td><td>Sample5</td><td>Sample6</td></tr>
<tr><td>Sample7</td><td>Sample8</td><td>Sample9</td></tr>
</table>
</div>
<table>
<tr>
<td>
<p id="xportxlsx" class="xport"><input type="submit" value="Export to XLSX!" onclick="doit('xlsx');"></p>
</td></tr>
</table>
</body>
</html>
Существует множество других способов, а также множество других библиотек, поддерживающих эту функцию. В конце концов, в зависимости от ваших потребностей, вы можете просто создать файл CSV вместо xls.