@Eldenhard

Как произвести Вывод данных из Excel в HTML файл?

Создана форма с полем для ввода данных, в этом поле у меня вводится артикул товара. У меня есть Excel файл в котором есть все артикулы и информация по ним. Как можно вывести информацию из эксель (всё что есть по искому пользователем артикулу) на экран (желательно такой же таблицей)?
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ответы на вопрос 1
@zkrvndm
Боты, парсеры, расширения
Если у вас сайт на php, то создаёте в корне файл test.php такого содержания:
spoiler
<?php

header('Access-Control-Allow-Origin: *');

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=archive.zip');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');

echo file_get_contents('https://docs.google.com/spreadsheets/d/1LCPXEorv3x5YYiikpciI0A2YaPNB41Epn-9JKMdW94/export?format=zip');

Ссылку на экспорт таблицы разумеется заменяете на свою! Допустим у вас есть ссылка на Google таблицу:
https://docs.google.com/spreadsheets/d/1LCPXEorv3x5YYiikpciI0A2YaPNB41Epn-9JKMdW94/edit

Вам нужно в конце поменять edit на export?format=zip чтобы получилось:
https://docs.google.com/spreadsheets/d/1LCPXEorv3x5YYiikpciI0A2YaPNB41Epn-9JKMdW94/export?format=zip

Если вы перейдете по такой ссылке, то увидите, что вам отдаётся zip-архив внутри которого лежат html-файлы. Соответственно, задача далее сводится к тому, чтобы распаковать полученный zip-архив и спарсить html-файлы.

Чтобы спарсить информацию, на самом сайте перед закрывающим тегом </head> вставляйте:
spoiler
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.5.0/jszip.js"></script>

<script type="text/javascript"> 

	// Функция для парсинга Google таблицы:

	async function googleTableParse() {
		
		var response = await fetch('/test.php');
		var zip = await response.blob();
		var archive = await new JSZip().loadAsync(zip);
		var files = Object.keys(archive.files);
		var lists = Object.create(null);
		for (var n = 0; n < files.length; n++) {
			if (!files[n].includes('/') && files[n].includes('.html')) {
				var blob = await archive.files[files[n]].async('blob');
				var html = await blob.text();
				var name = files[n].replace(/\.html$/g, '');
				lists[name] = tableParser(html);
			}
		}
		
		return lists;
		
	}

	// Функция для парсинга html-кода таблицы:

	function tableParser(html) {
		
		var doc = new DOMParser().parseFromString(html, "text/html");
		
		var th = doc.querySelector('table > tbody > tr').querySelectorAll('th, td');

		var title = [];

		for (var i = 0; i < th.length; i++) {

			title.push(th[i].innerText);

		}
		
		var tr = doc.querySelectorAll('table > tbody > tr');
		
		var array = [];
		
		for (var i = 1; i < tr.length; i++) {

			var td = tr[i].querySelectorAll('th, td');
			
			var obj = {};
			var add = 0;
			
			for (var y = 1; y < td.length; y++) {
				
				td[y].innerHTML = td[y].innerHTML.replace(/\<br\>/g, '{перенос строки}');
				obj[title[y]] = td[y].innerText.replace(/\{перенос строки\}/g, "\n").trim();
				if (obj[title[y]] !== '') {
					add = 1;
				}
				
			}
			
			if (add) {
				array.push(obj);
			}

		}
		
		return array;
		
	}

</script>


Далее заходите на свой сайт, открываете консоль и в целях теста выполняете:
test = await googleTableParse();
Если в переменную test упал объект с данными, значит все в порядке, можете пользоваться.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы