用excel做一个全自动课表

本文介绍如何使用Excel函数如today(), mid(), mod(), roundup(), date(), if(), value(), len(), lenb()等创建自动更新的课程表,实现课程、上课地点及教师信息的智能展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这周学习了office三件套,其中最喜欢excel。于是打算利用excel做一些每日数据的汇总,但在这之前要做一个自己的课表,以便于对每日要做的事有一个更详细的安排。其中主要用到的函数有:

    today()

这个函数可以将系统时间转化为Excel可识别并进行计算的日期;

    mid(目标单元格,提取数据的起始位置,数据长度)

假如A1单元格数据是“第5周”,然后在B1中输入"=mid(A1,2,1)",此时B1就显示为"5";

    mod(被除数,除数)

mod函数返回的值就是余数,例如:mod(7,2)返回的值就是1——"7/2=3~1"

    roundup(数值,保留小数位)

roundup函数用于向上舍入数字,  roundup(1.234,1)的返回值就是1.3

    date(年,月,日)

date函数即日期,同样可被Excel进行计算

    if(条件,满足条件返回的值,不满足条件返回的值)

if函数无论在哪都很常用,if(1>2,6,7)输出的即为7

    value()

value即将数据转化为数值

len()

返回数据字符数量

lenb()

返回数据字节数量

然后就是整体的思路了。开学日期为3月1日,利用date函数将2021年3月1日转化为可进行计算的日期//date(2021,3,1)//用today函数返回的日期减去开学日期就是开学天数,每周七天,开学天数除以7为开学了几周,但是出现了一个问题:比如说我现在上着第七周的课,但是第七周还没有过完,这是利用上述步骤所得到的数便是6.×××,这是就要套用到roundup函数了。最终整体就是


//="第"&ROUNDUP((TODAY()-DATE(2021,3,1))/7,0)&"周"//


显示在单元格内的就是"第×周"。

我们知道有些课只在某些周上,比如英语课只在1~9周上课,我们就要用if函数来选定时间区间,如何选定呢?之前我们完成的"第×周"就可以拿来用了,因为这个×是根据系统时间而变化的,这正是我们想要的,只需要当1<="×"<=9的时候输出"英语课就行了",提取出×就需要用到mid函数了,假如"第×周"所在单元格为A1,那么显示课程的单元格的整体就是


//if(mid(A1,2,1)>=1,if(mid(A1,2,1)<=9,"英语课","")"")//


同时满足两个if条件时才会返回"英语课",任一个条件不满足就会返回空白值,如果更规矩一点就在mid函数外套用一个value函数。//其实不加也一样//

然后问题又来了,有些课单周上,有些课双周上,这个就要用到最后一个提到的函数了——mod,mod常用的一个功能就是判定数值奇偶性,若是英语课单周上,那么只需要多加一个周树为单周的条件即可——


//if(mid(A1,2,1)>=1,if(mid(A1,2,1)<=9,if(mod(mid(A1,2,1),2)=1,"英语课","")"")"")//


最后就是美化一下了,比如我不止想要显示课程,我还要表格显示出上课地点以及任课老师,但是这样数据太长了,不美观。这时我们可以使用到公式换行"char(10)",最终的整体——


//if(mid(A1,2,1)>=1,if(mid(A1,2,1)<=9,if(mod(mid(A1,2,1),2)=1,"课程名称"&char(10)&"上课地点 任课老师","")"")"")//


然后又有一个问题了,mid(A1,2,1)只能提取出一个数,对于“第10周”及以上输出的都是一个数字,也就是说第10周和第1周的课表是一样的,因为10仅被提取出了1,0却没有,这时候我们需要用到另外两个函数len()与lenb(),len函数返回的值就是选定单元格的字符数量,而lenb返回的是字节数量,简单通俗地讲:若A1是“第9周”,那么len(A1)返回的就是3,而lenb(A1) 返回的就是5,汉字占了两个字节一个字符,阿拉伯数字占了一个字节一个字符,那么lenb(A1)-len(A1)就是汉字的数量,len(A1)-(lenb(A1)-len(A1))就是数字的数量,也就是2*len(A1)-lenb(A1)。对于想提取出来混合文本中连续的数字,我们可以将mid的起始位置设定为第一个数字开始的位置,提取字符数量就为2*len(A1)-lenb(A1),引入到我们之前写的函数式中就是


//if(mid(A1,2,2*len(A1)-lenb(A1))>=1,if(mid(A1,2,2*len(A1)-lenb(A1))<=9,if(mod(mid(A1,2,2*len(A1)-lenb(A1)),2)=1,"课程名称"&char(10)&"上课地点 任课老师","")"")"")//


但记得要将此单元格的自动换行打开(位于【开始】中的【对齐方式】栏中)

当然没有单双周之分的课程将mod条件去除即可

好的,我可以为您提供一个Java编写的自动课表打印程序的示例代码,以下是示例代码: ```java import java.io.*; public class CourseSchedulePrinter { public static void main(String[] args) { String[][] courseSchedule = { {"周一", "数学", "英语", "", "", "", ""}, {"周二", "", "语文", "物理", "", "", ""}, {"周三", "历史", "", "英语", "", "", ""}, {"周四", "", "", "地理", "化学", "", ""}, {"周五", "", "", "", "生物", "体育", ""}, {"周六", "", "", "", "", "音乐", ""}, {"周日", "", "", "", "", "", "美术"} }; try { // 创建输出流对象,写入文件 BufferedWriter out = new BufferedWriter(new FileWriter("CourseSchedule.txt")); // 打印表头 out.write(" 课程表"); out.newLine(); out.write("=============="); out.newLine(); out.write("星期一 星期二 星期三 星期四 星期五 星期六 星期日"); out.newLine(); // 打印课表内容 for (int i = 0; i < courseSchedule.length; i++) { for (int j = 0; j < courseSchedule[i].length; j++) { out.write(courseSchedule[i][j] + " "); } out.newLine(); } // 关闭输出流 out.close(); System.out.println("课表已成功打印到文件中!"); } catch (IOException e) { System.out.println("写入文件出错:" + e.getMessage()); } } } ``` 这个程序使用一个二维字符串数组来表示一周的课程表。程序打印一个表头,然后将课程表内容写入一个名为"CourseSchedule.txt"的文本文件中。如果文件写入成功,程序将输出一条成功的消息,否则将输出一个错误消息。 注意:如果您想打印中文课程表,可能需要使用UTF-8编码来保存文本文件,以防止中文乱码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值