Печать табличек на палаты и кровати. Поможем медсестрам сократить рутинную работу. 
		
		
			Вложений: 3 
		
		
		Приветствую вас, друзья программисты! 
	Я медбрат в 15ГКБ, которая до сих пор продолжает бороться с COVID19. И сейчас от сестер требуют, чтобы таблички на кровати и палаты были написаны на компьютере, а не от руки. Сам немного (чуть больше, чем никак) разбираюсь в программировании и вот родилась идея хоть как-то сократить нагрузку на моих коллег. Идея заключается в том, чтобы сестра сделала экспорт из ЕМИАС в ексель-файл, который загружается в скрипт с базой данных(JSON?) уже отпечатанных табличек. Далее необходимо сгенерировать список всех палат и пациентов с чекбоксами для печати. И скрипт формирует документ из табличек со всеми отмеченными пациентами и палатами(примеры табличек есть во вложении). Выбрал JS так, как интерпретатор есть на каждом компе и нет необходимости в правах администратора для установки Java или Python например. Из-за дикой усталости и апатии после работы не всегда получается заниматься этим проектом постоянно и думаю, без вашей помощи он так и останется в стадии зародыша.. буду благодарен, если поможете советом по конкретной теме или по архитектуре в целом. Сегодня разобрался с выгрузкой из екселя и формированием отсортированного по палатам массива. Вывел список с чекбоксами, но они должны быть перед строкой пациента, а не над ней.. display: inline-block не работает, float:left работает, но список получается каскадом.. Короче к вечеру уже голова деревянная, а завтра на смену и после нее я не знаю когда подступлюсь к этому коду без вашей поддержки.. Заранее благодарю, Матвей.  | 
	
		
 Вот код index.html 
	
<html>
<head>
	<meta charset="utf-8" />
	<script src="https://code.jquery.com/jquery-2.1.4.js" integrity="sha256-siFczlgw4jULnUICcdm9gjQPZkw/YPDqhQ9+nAOScE4=" crossorigin="anonymous"></script>
	<script lang="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.16.7/xlsx.full.min.js"></script>
	<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
	<div id="navbar"><span>SheetJS </span></div>
	<div id="wrapper">
        
        <input type="file" id="input-excel" />
	</div>
	<div id ="list_div"></div>
	<script>
        $('#input-excel').change(function(e){
                var reader = new FileReader();
                reader.readAsArrayBuffer(e.target.files[0]);
                reader.onload = function(e) {
                        var data = new Uint8Array(reader.result);
                        var wb = XLSX.read(data,{type:'array'});
                        var sheet_name = wb.SheetNames[0];
                        var worksheet = wb.Sheets[sheet_name]
                        var patients = [];
                        var count_und = 0;
                        var index_cell = 6;
                        while(count_und < 2){
                        	var adress_cell = 'A' + String(index_cell);
                        	try {
                        		patients.push({
                        			'name' : worksheet['B' + String(index_cell)].v,
                        			'history' : worksheet['C' + String(index_cell)].v,
                        			'ward' : worksheet['D' + String(index_cell)].v,
                        			'date_hosp' : worksheet['F' + String(index_cell)].v
                        		});
                        		count_und = 0;
                        	} catch {
                        		count_und += 1;
                        	} finally {
                        		index_cell += 1;
                        	}
                        }
                        
                        patients.sort(SortByWard);
				        var div = document.getElementById('list_div');
				        var wards = [];
						for (var i = 0; i < patients.length; i++) {
							var new_elem = document.createElement('div');
							var ch_box_div = document.createElement('div');
							ch_box_div.className = "checkbox_div"
							div.appendChild(ch_box_div)
							var ch_box = document.createElement('input');
							ch_box.type = 'checkbox';
							ch_box.name = "to_print"
							ch_box.id = patients[i].history;
							ch_box_div.appendChild(ch_box);
							new_elem.innerText = patients[i].ward + " : " + 
				                                patients[i].name + " № истории: " + 
				                                patients[i].history + " Дата госпитализации: " +
				                                patients[i].date_hosp;
							div.appendChild(new_elem);
							if (wards.indexOf(patients[i].ward) == -1) {
								wards.push(patients[i].ward);
							}
				    	};
                }
        });
        function SortByWard(a, b) {
    		return a.ward.toLowerCase() > b.ward.toLowerCase() ? 1 : -1;
		};
	</script>
</body>
</html>
styles.css 
.checkbox_div {
	display: inline-block;
}
 | 
	
		
 Motyan613, вас не изнасилуют за публикацию персональных данных пациентов? 
	 | 
	
		
 Цитата: 
	
 Даже отделения такого не существует. Адреса я стер вообще, ибо для дела не нужны..  | 
	
		
 Если данные в экселе почему не пользоваться стандартным слиянием из офиса? 
	https://youtu.be/JIVVuT04Je4?t=172  | 
	
		
 Вложений: 1 
		
		
		.. 
	 | 
	
		
 Цитата: 
	
 Идея моего скрипта в минимизации ручного труда. Должна быть база с пациентами, таблички которых уже отпечатаны и при сравнении с загруженной базой, должны по умолчанию отмечаться на печать только новые позиции. Как этот реализовать в офисе без макросов я не знаю. А макросы в офисе... Ну это такое... К тому же на больничных машинах стоит бесплатный урезаный офис. Необходимого функционала может там не быть.  | 
	
		
 Цитата: 
	
 Спасибо, Nexus, тебе огромное! Теперь буду въезжать в эту красотищу) Но уже после смены..  | 
| Часовой пояс GMT +3, время: 09:11. |