注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

奕克

爱家人爱工作爱生活

 
 
 

日志

 
 

说不做程序员就不需要编程的,看看这个就知道错了!  

2010-09-07 09:30:05|  分类: 技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
教案框架生成器1.0版,请点击http://e.ys168.com/?wucccsk
 
最近我们要写教案,手头有了教学进度表,如下图:
说不做程序员就不需要编程的,看看这个就知道错了! - wucccsk - wucccsk的博客
又有了教案模板,如下图:
说不做程序员就不需要编程的,看看这个就知道错了! - wucccsk - wucccsk的博客
     那么我们最终要为我们的每次课生成一个教案。经过几天的拷贝剪切,我承认我老了,在几个文档切换时经常看花眼出错。细细观察,我们会发现教案中的很多内容其实进度表中已经有了,那么能不能用我日志中以前提过的VBS和VBA脚本打造零技术门槛的傻瓜型教案框架生成方案呢?让计算机帮我们处理大部分重复性劳动,而我们可以将精力集中到具有创造性的“教学内容与教学组织设计”上来?
    答案是肯定的,大家可以点击页面最上面链接,找到“VBS和VBA脚本”的框架生成器1.0版,解压后,点击名字为“gen“的VBS文件,脚本就能根据另两个文档生成教案框架,注意弹出对话框在示例情况下,可以均接受默认值。
   如果你对网上程序不放心,当然你也可以在计算机notepad记事本上,拷贝入下列代码:
 
    Dim ja, jdb, bh, wordapp, fso, tempf, strpath, sz, dz, kx, bzysy
  bkname = InputBox("输入进度表文件名", , "教学进度表")
  rqbds = Year(Date) & "年" & Month(Date) & "月" & Day(Date) & "日;1;1,4*"
  rqbds = InputBox("请输入日期生成表达式:", , rqbds)
  sz = Split(rqbds, ";")
  rq = sz(0)
  Set wshshell = CreateObject("WScript.Shell")
  strpath = wshshell.CurrentDirectory
  Set wordapp = CreateObject("Word.Application")
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set jdb = wordapp.documents.Open(strpath & "\" & bkname & ".doc")
  Set ja = wordapp.documents.Add
  bh = 1
  i = 1
  Do
  If InStr(jdb.Tables(1).cell(i, 1).Range.Text, "周次") <> 0 Then i = i + 2
  For k = 1 To UBound(sz)
   dz = Split(sz(k), ",")
   If InStr(sz(k), "*") <> 0 Then
      bzysy = True
   Else
      bzysy = False
   End If
   rqstart = rq
   For j = 0 To UBound(dz)
    If InStr(dz(j), "*") <> 0 Then
        dz(j) = Left(dz(j), Len(dz(j)) - 1)
        kx = "实验"
    Else
        kx = "理论"
    End If
    rq = DateAdd("d", CDate(rqstart), dz(j))
    rq = Year(rq) & "年" & Month(rq) & "月" & Day(rq) & "日"
    Call genoneja(i, rq, kx)
   Next
   rq = DateAdd("d", CDate(rqstart), 7)
   Erase dz
   i = i + 1
  Next
  Loop Until Len(jdb.Tables(1).cell(i, 1).Range.Text) <= 2
  ja.SaveAs strpath & "\教案.doc"
  ja.Close
  jdb.Close
  wordapp.Quit
  Set fso = Nothing
  Set ja = Nothing
  Set jdb = Nothing
  Set wordapp = Nothing
  Set wshshell = Nothing
  MsgBox "完工啦"

  
Sub genoneja(i, rq, kx)
  fso.copyfile strpath & "\教案模板.doc", strpath & "\temp.doc"
  Set tempf = wordapp.documents.Open(strpath & "\temp.doc")
  tempf.Activate
  wordapp.ActiveWindow.Selection.HomeKey 6, 0
  With wordapp.ActiveWindow.Selection
      .Find.Execute "授课日期"
       If .Find.Found = True Then
           .MoveEndUntil "日"
           .MoveRight 2, 1, 1
           .Text = "授课日期: " & CStr(rq)
       End If
  End With
  wordapp.ActiveWindow.Selection.HomeKey 6, 0
  wordapp.ActiveWindow.Selection.Find.Execute "《教案编号》"
  wordapp.ActiveWindow.Selection.Text = bh
  bh = bh + 1
  wordapp.ActiveWindow.Selection.HomeKey 6, 0
  wordapp.ActiveWindow.Selection.Find.Execute "《课型》"
  wordapp.ActiveWindow.Selection.Text = kx
  wordapp.ActiveWindow.Selection.HomeKey 6, 0
  jxfs = Left(jdb.Tables(1).cell(i, 6).Range.Text, Len(jdb.Tables(1).cell(i, 6).Range.Text) - 2)
  wordapp.ActiveWindow.Selection.Find.Execute "《教学方式》"
  If bzysy = True Then
     xb = InStr(jxfs, "实验")
     If kx = "理论" Then
       wordapp.ActiveWindow.Selection.Text = Left(jxfs, xb - 1)
     Else
       wordapp.ActiveWindow.Selection.Text = Mid(jxfs, CInt(xb), Len(jxfs) - 2)
     End If
    Else
     wordapp.ActiveWindow.Selection.Text = jxfs
  End If
  wordapp.ActiveWindow.Selection.HomeKey 6, 0
  skzj = Left(jdb.Tables(1).cell(i, 3).Range.Text, Len(jdb.Tables(1).cell(i, 3).Range.Text) - 2)
  wordapp.ActiveWindow.Selection.Find.Execute "《授课章节》"
  If bzysy = True Then
     xb = InStr(skzj, "实验")
     If kx = "理论" Then
       wordapp.ActiveWindow.Selection.Text = Left(skzj, xb - 1)
     Else
       wordapp.ActiveWindow.Selection.Text = Mid(skzj, xb)
     End If
    Else
    wordapp.ActiveWindow.Selection.Text = skzj
  End If
  wordapp.ActiveWindow.Selection.HomeKey 6, 0
  jxmd = Left(jdb.Tables(1).cell(i, 4).Range.Text, Len(jdb.Tables(1).cell(i, 4).Range.Text) - 2)
  wordapp.ActiveWindow.Selection.Find.Execute "《教学目的》"
  wordapp.ActiveWindow.Selection.Text = jxmd
  wordapp.ActiveWindow.Selection.HomeKey 6, 0
  jxznd = Left(jdb.Tables(1).cell(i, 5).Range.Text, Len(jdb.Tables(1).cell(i, 5).Range.Text) - 2)
  wordapp.ActiveWindow.Selection.Find.Execute "《教学重点与难点》"
  wordapp.ActiveWindow.Selection.Text = jxznd
  wordapp.ActiveWindow.Selection.HomeKey 6, 0
  zybz = Left(jdb.Tables(1).cell(i, 7).Range.Text, Len(jdb.Tables(1).cell(i, 7).Range.Text) - 2)
  wordapp.ActiveWindow.Selection.Find.Execute "《作业布置》"
  wordapp.ActiveWindow.Selection.Text = zybz
  tempf.Save
  tempf.Close
  ja.Activate
  wordapp.ActiveWindow.Selection.EndKey 6, 0
  wordapp.ActiveWindow.Selection.InsertFile strpath & "\temp.doc"
  wordapp.ActiveWindow.Selection.InsertBreak 7
  fso.deletefile (strpath & "\temp.doc")
End Sub

 
 
完成后点击保存,选择类型为所有文件,输入带vbs扩展名的文件名,保存后就有了生成程序。
说不做程序员就不需要编程的,看看这个就知道错了! - wucccsk - wucccsk的博客
      有了程序,以及”教案模板“那个word文件后,我们还要按规定格式制作”教学进度表“,毕竟计算机不如人聪明,规范是不可避免的,如下图的一个示例进度表:
说不做程序员就不需要编程的,看看这个就知道错了! - wucccsk - wucccsk的博客
       这是一个典型计算机老师的单双周课程,单周理论1次课,双周加一次实验。对理论课的进度表没有要求,关键是带实验的周,要求在”授课章节“的最后一定要有实验名,记得要带“实验”这几个字,程序靠这个判断去剪切字符串,分出理论章节和实验标题。然后授课方式最后一行必须是“实验操作”。还有要注意进度表最后一周后面要多一行空行,程序靠这个判断教案生成结束。好了,有了规定的教学进度表,我们在看看程序运行时需要输入什么?
       弹出的第一个对话框没问题,输入进度表文件名,如果是示例文件情况,则可以接受提供的默认值。关键是
如图的第二个对话框:
说不做程序员就不需要编程的,看看这个就知道错了! - wucccsk - wucccsk的博客
这里涉及到一个教案中日期生成表达式的概念,语法如下:
      假期最后一个周日日期;单周周几的课,...[;双周周几的课,....]
如上图的例子,因为这学期假期最后结束是9月5号,用分号分隔第一项参数;第二项是单周的哪几天上课,可以通过逗号分隔多次重复;比如如图的1表示只有周1上课。在计算机书本中,方括号代表参数可选,这里也一样,如果你是每周都一样课时的,就不需要输入第二分号及以后内容。上图这里是表示双周的课是周1和周4,两天之间用逗号分隔,注意周四那天后面的*号表示该次课是实验课,所以程序会自动*号将该周进度表“授课章节”最后一行生成实验教案,教课类型什么的都不一样的,所以进度表要按规范写。
    下面在来一个例子,练练日期表达式,我的另一门课:
说不做程序员就不需要编程的,看看这个就知道错了! - wucccsk - wucccsk的博客
   典型的这种每周4学时,一次理论一次实验的课,日期表达式写法如下:
   2010年9月5日;2,2*,4*
   这里有两点注意,第一是日期表达式中的分号和逗号这种分隔符必须关闭中文输入法输入,即在英文方式下,否则程序无法辨别。第二是2,2*,4*表示,周二一次理论课,由于实验分批,所以周2同时上一批实验,周4上另一批实验。日期表达式输入不正确将导致教案时间和教案编号不正确。
   好了,输入好了表达式,确定后就可以等待程序生成教案了,过程中屏幕会闪烁并有临时文件生成,最后会显示“完工了”的对话框。当然,目前程序还是1.0版,没有处理进度表内有节日放假和特别周的情况,比如有些课只有第一周有一次理论课,因为实验室还没准备好,第二周又开始同时上实验了。也就是说为了能生成正确的日期,必须保证每周一样,或者单双周一样。这里只是想起到抛砖引玉的编程技术交流效果,大家可以自己尝试开发2.0版,解决这些问题,或者说这只是个框架生成器,大家还需要继续修改,生成自己满意的教案。。。。
   好了,这次我以现实工作为例,讲解怎样利用VBS和VBA简化我们的工作强度,把重复性的CTRL+CV和日期加减操作交给计算机,而我们投身于根据创造力的活动,比如教学组织设计章节,这才是对我们成长更有利的环节!所以当我们在用鼠标键盘不断复制粘贴时,一定要先想想,能不能用编程技术简化一下工作,顺便共享出来,造福千万人。。。

 
  评论这张
 
阅读(95)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017