PHP HTML таблица в виде файла Excel .xls - PullRequest
0 голосов
/ 17 октября 2019

У меня есть несколько скриптов в PHP, которые создают таблицу и сохраняют ее как xls файл. И все работало отлично, редактируя информацию внутри листа. Но несколько дней назад, когда я открываю один из этих файлов, редактирую данные ячейки и пытаюсь сохранить, Microsoft Excel пытается сохранить файл в формате HTML, даже если расширение файла xls

$table = "<!DOCTYPE html>
    <html>
    <head>
    <style>
    </style>
    </head>
    <body>
    <table>
        Some table rows with table data
    </table>
    </body>
    </html>";

Я сохраняю переменную $table с fopen, fwrite, fclose в файле, а затем загружаю файл.

Я также пытался загрузить файл напрямую, ивсегда, когда я редактирую, Excel пытается сохранить его как HTML.

Я искал решение, но мне ничего не помогло. Есть идеи как исправить если?

1 Ответ

0 голосов
/ 17 октября 2019

Есть несколько вариантов, как вы можете экспортировать таблицу 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...