Я согласен с комментариями Джеффа Бека, а также заметил следующее.
Вы сказали, что ваша целевая аудитория не техническая, и все вышеперечисленные решения будут включать изучение HTML и сложного языка шаблонов, возможно, не начального для вашей аудитории.
Решения, приведенные выше, также требуют большей сложности, чем ваша проблема. MooTools, Dojo и т. Д. Кажутся излишними. XForms и XSLT тем более. Да, они будут работать и дадут вам много дополнительных функций, но нужен ли вам уровень сложности и проблемы отладки / обслуживания / обучения, которые идут с этими дополнительными функциями?
Ваш обычный учитель или бизнес-пользователь, вероятно, имеет базовые знания о том, как вводить и сохранять файлы в Excel. Если вы можете научить их, как сохранять в формате CSV и загружать форму, или, что еще лучше, установить макрос, который сохранит в CSV и опубликует его на вашем веб-сайте, то это, вероятно, единственное обучение, которое им потребуется. Чтобы получить семантику, вы можете добавить немного больше обучения, и первая строка отчета будет содержать имена столбцов, а вторая строка будет типом столбцов. Это не элегантно, но, возможно, легко адаптирующимся пользователям, как отмечает Джефф.
На стороне сервера я бы порекомендовал следующий стек:
Веб-сервер => node.js (возможно, с использованием Chain - github.com/hassox/chain)
Хранилище данных => Redis (и узел-redis)
Templating => Haml-js (github.com/creationix/haml-js)
Анализ CSV => См. http://purbayubudi.wordpress.com/2008/11/09/csv-parser-using-javascript/
и убедитесь, что используете фиксированную версию, которая есть в комментариях (для кавычек).
Ваши опытные пользователи могут настраивать HAML без ущерба для безопасности, и HAML довольно прост с небольшим обучением:
это ХАМЛ ...
%body
.profile
.left.column
#date= print_date()
#address= current_user.address
.right.column
#email= current_user.email
#bio= current_user.bio
производит ...
<div class="profile">
<div class="left column">
<div id="date">Thursday, October 8, 2009</div>
<div id="address">Richardson, TX</div>
</div>
<div class="right column">
<div id="email">tim@creationix.com</div>
<div id="bio">Experienced software professional...</div>
</div>
</div>