背景:
很多小型的的培训学校通常涉及到几位到十几位老师与几十名到上百名学生的课程安排。从成本出发,聘请专业人员去编写由于管理的软件是非常不现实的。可行可靠的做法通常是使用个人电脑office中的excel之类的软件来进行管理。
由于上述这些教育机构的主管没有IT相关背景,同时由于office软件的局限,一些能够增进管理和服务水平的IT方案往往不了解,也无法采用。
设想下面的场景:学校采取小班授课,常常是一对一或者一对N的形式。对于有经验的工作人员,使用excel,只要规模不是超大,完全没有问题。甚至是面对老师学生请假,调课等等情况的加入也能够处理得妥贴。同时,这项工作还要面临很多与学生家长的沟通。尤其是在因为法定假期、因为病事假、因为其它以外情况导致课程时间变更。这个情况下,学校方面会面临大量与家长们沟通。比如在微信群中家长会一个接一个与校方确认更新的课表,每一次询问校方都要专门去查询并回应。这样即影响了工作效率,也耽误了时间。那么有没有办法在不增加校方本身的工作量的基础上,能够随时将最新的课程安排发布到网络上,家长和学生老师如果只需要确认课程安排的话,随时浏览某一个网页就可以。校方和工作人员则可以把更多的精力放到其它事情上面。
解决方案:
很多商业软件都会提供上述功能,但我们在这里寻求的是零成本提供这个解决方案。下面我来使用一个模拟的场景来事例这个解决方案是如何一步一步实现这个功能的。同时在最后会展示工作人员如何通过仅仅一步操作就将信息更新到网络上供随时查阅。
准备
我假设下面是一个学校的课程安排excel表格,里面会看到课程、老师、学生、上课时间、上课地点等信息。
image-20240108165411433.png数据导出
我们首先将数据从上面的excel表格中导出到本地的json文件。这里我们使用python语言和以下方法:
Python语言我们可以免费下载和安装到本地计算机中。
import pandas as pd
# Load the Excel file into a pandas DataFrame
df = pd.read_excel('./schoolSchedual.xls')
# Remove completely blank rows
df_cleaned = df.dropna(how='all')
# Extract the titles from the first row
titles = df_cleaned.iloc[0].to_dict()
# Use titles as keys and subsequent rows as values
records = []
for index, row in df_cleaned.iterrows():
if index > 0: # Skip the first row since it contains titles
# Create a record dictionary with the correct titles
record = {title: row[key] for key, title in titles.items()}
records.append(record)
# Convert the list of record dictionaries to a JSON string
json_data = pd.Series(records).to_json(orient='records', indent=4)
# Output the JSON data to a file
json_output_path = './schedule.json'
with open(json_output_path, 'w') as json_file:
json_file.write(json_data)
数据过滤
因为学校的内部文件信息中包括学生姓名等信息,我们从保护隐私的角度出发不能将这些信息发布到网络上。数据过滤的作用是将这些信息从导出的json中删除,仅仅保留我们可以公开发布的消息。
因为每一位学生都有自己唯一的学生编号,只有学校和学生及家长知道哪一个学生编号是自己。这样学生家长可以通过显示在网页上的学生编号来核实孩子的课时安排。
import json
# Path to the original JSON file
json_file_path = './schedule.json'
# Load the JSON data from the file
with open(json_file_path, 'r') as file:
data = json.load(file)
# Remove the first item from the data
data.pop(0)
# Remove the 'Student' key and its value from each remaining item
for item in data:
if 'Student' in item:
item.pop('Student')
# Path for the new JSON file
new_json_file_path = './updated_schedule.json'
# Save the updated data to the new JSON file
with open(new_json_file_path, 'w') as file:
json.dump(data, file, indent=4)
生成网页
我们现在将上面过滤之后的json转化为网页文件:
from jinja2 import Environment, BaseLoader
# Load the JSON data from the generated file
with open('./updated_schedule.json', 'r') as json_file:
records = json.load(json_file)
# HTML template using Jinja2 syntax
html_template = """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Schedule</title>
<style>
......
{% endfor %}
</tbody>
</table>
</body>
</html>
"""
# Initialize Jinja2 environment
env = Environment(loader=BaseLoader())
template = env.from_string(html_template)
# Extract titles for table headers
titles = records[0].keys()
# Render the HTML with the JSON data
html_output = template.render(titles=titles, records=records)
# Define the path for the HTML file
html_file_path = 'schoolSchedual.html'
# Save the rendered HTML to a file
with open(html_file_path, 'w') as file:
file.write(html_output)
发布网页
在这里我们使用了可以免费申请的GITHub。其中Github Page可以提供简单的静态网页功能,并且完全免费。
#!/bin/bash
#Set the path to your local GitHub Pages repository
REPO_PATH='/path/to/your/local/repo'
#Set the path to the HTML file you want to upload
HTML_FILE_PATH='/path/to/your/schoolSchedual.html'
#Set the commit message
COMMIT_MESSAGE='Update schoolSchedual.html'
#Change to the repository directory
cd "$REPO_PATH"
#Copy the HTML file to the repository
cp "$HTML_FILE_PATH" .
#Add all new and changed files to git
git add .
#Commit the changes
git commit -m "$COMMIT_MESSAGE"
#Push the changes to GitHub
git push origin main
查看网页
现在就可以进入浏览器检查一下刚刚发布的更新课表了。以下我使用个人的github网站作为例子:https://toronto-andrew.github.io/AndrewBlogger/others/schoolschedual.html
校方工作人员的“一键操作”
以上是这个解决方案的原理讲解。这里介绍一下学校的工作人员如何“一键发布”课表信息的。由于本人的电脑是linux,见到的界面会有所不同,在windows电脑下的操作将很类似。
andrew@andrew-OptiPlex-Ubuntu:~/PycharmProjects/exportExcel$ publicSchedual2Web.sh schoolSchedual.xls
网友评论