将课程表导入日历,实现电脑手机日程同步

写在前面:我运行时环境为python3.x环境,需自行配置,如果一定要在2.x环境运行的话,代码里有修改注释,源代码是在网络上找的((又到了每年此刻,教你把课程表导入日历 - 少数派 (sspai.com)))下载后修改了一些问题(包括修改为3.x运行环境)
原作者代码几乎完全没有注释,遇到问题时去啃代码也是蛮痛苦的。

另外此脚本不一定只能用于课程表,如果有长期的需要以周为单位进行的事务的话,也可以使用此脚本快捷的转换为ICS文件导入日历,只需稍微修改配置信息即可
同步到日历后也有一些好处,比如装x,如查看课程表时不再需要连接网络,并且上课前日历会自动提醒(可设置提前多久),电脑查看也很方便,如下图
日历截图

Gitee代码链接: 课程表导入日历

开始

实现思路:将课程信息输入Excel表格,使用Python解析表格文件并输出ICS文件,将课程转换为日历中的日程信息,使用日历打开ICS文件完成导入
主要代码文件如下:
文件截图

  • 编辑conf_classTime.json文件中的数据,其中数据代表着第几节课,课程开始时间,结束时间

    这个我已经按照我自己实际情况编辑好了,使用的是学校的作息时间,其他学校根据实际去改

  • 编辑classInfo.xlsx文件,其中截图的各列数据意义如下

    文件截图

    classNamestartWeekendWeekweekdayclassTimeclassroom
    课程名称第几周开始第几周结束星期几上课第几节上课教室
    • 其中的classTIme对应conf_classTime.json文件中的数据,从1开始数,如classTimexlsx文件中为1,表示这节课的上课时间为conf_classTime.json文件中的第一条数据(如下图)
      代码截图
    • 压缩包里的xlsx文件中的数据直接删除就好,是我测试时的数据
  • 运行excelReader.py文件,注意运行过程中需要输入0继续,完成后会生成一个conf_classInfo.json文件

    注意在运行之前最好先把文件夹中的conf_classInfo.json文件删除

    运行此文件需要安装xlrd软件包,且必须安装1.2.0版本的包,最新版本不支持读取此表格文件

    运行时会出现下列内容,做为检查数据列和上一步配置的excel文件表头是否一一对应,一般输入数字零,然后回车即可完成运行
    运行截图

    运行完成后生成文件图片如图:文件截图

  • 运行main.py文件,中间需要输入本学期开学第一天的时间(格式为20020101)和选择日历提前多久提示上课,完成后会生成一个class.ics文件

    同样在运行前最好先把原有的class.ics文件删除

    正常运行时的情况,蓝色文字为输入的内容:

    在这里插入图片描述

    生成的文件:文件截图

  • 电脑直接双击打开class.ics文件即可,win10系统会自动导入,其他的大同小异,手机也可以直接打开文件,选择使用手机日历打开,即可保存到手机日历中。

    注意win10系统打开后可能会出现所有时间都提前一个小时的情况,这个是win10日历固有的问题,截止书写这句话的时候win10日历尚未解决该问题

    解决方案:下载Outlook邮箱的手机app,将class.ics文件发送到手机,打开时选择使用outlook打开即可

    在这里插入图片描述
    注意手机outlook登录的邮箱账号需要和电脑使用的是同一个邮箱账号,否则无法同步到电脑。

    ps: outlook导入日历时最好导入到新建的空白日历中,默认的日历不可删除,且outlook邮箱不支持批量删除日历数据,数据如果出错的话会很麻烦。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在 Android 平台上实现日程添加到日历中,需要执行以下步骤: 1. 获取日历账户的 ID: 在 Android 设备上可能存在多个日历账户,需要先确定要将日程添加到哪个账户中。可以使用以下代码获取默认日历账户的 ID: ```java String calendarId = CalendarContract.Calendars.getDefaultCalendarAccount(context); ``` 或者可以使用 `CalendarContract.Calendars` 表中的其他字段来查找特定的日历账户。 2. 创建日历事件的内容: 日历事件的内容可以使用 `ContentValues` 类型来表示。例如,以下代码创建一个包含标题、开始时间和结束时间的日历事件: ```java ContentValues event = new ContentValues(); event.put(CalendarContract.Events.TITLE, "My Event"); event.put(CalendarContract.Events.DTSTART, startMillis); event.put(CalendarContract.Events.DTEND, endMillis); ``` 其中 `startMillis` 和 `endMillis` 分别是事件的开始时间和结束时间,可以使用 `Calendar` 类的 `getTimeInMillis()` 方法将日期转换为毫秒数。 3. 插入日历事件: 使用 `ContentResolver` 类的 `insert()` 方法将日历事件插入到日历中。例如,以下代码将上述创建的日历事件插入到默认日历账户中: ```java Uri uri = context.getContentResolver().insert(CalendarContract.Events.CONTENT_URI, event); ``` 插入成功后,`insert()` 方法会返回新插入的日历事件的 URI。 以上就是在 Android 平台上实现日程添加到日历的基本步骤。需要注意的是,要向日历中插入事件,需要在应用程序的 `AndroidManifest.xml` 文件中声明 `WRITE_CALENDAR` 权限。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值