蓝墨云目前是免费且使用广泛的一个教学平台。但是普通用户目前只支持导入试题功能,却不支持把试题从蓝墨云上进行导出。
接下来,将实现导出的方法简要讲述一下:
①把蓝墨云上的试卷或测试导出
②导出的压缩包中有一个《汇总与详情》的Excel文件,这里包含了试题的全部内容。
③用C#编程读取《汇总与详情》的试题内容,生成符合试卷格式的文档。
接下来,我们就开始操作吧!

一、蓝墨云导出

步骤1:

步骤2:

步骤3:

步骤4:

二、解压

步骤1

步骤2:

步骤3:

三、通过编程希望达到的试卷输出效果(试卷样张)


四、程序界面如下:


小贴士:通过选择【显示答案】复选框,可以生成带答案的试卷。

五、程序代码如下:

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.XWPF.UserModel;
using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;namespace LmyExamExport
{public partial class frmExamExport : Form{public frmExamExport(){InitializeComponent();}private void btnSelect_Click(object sender, EventArgs e){string strQQQun = "485532597";OpenFileDialog ofd = new OpenFileDialog();ofd.InitialDirectory = Application.StartupPath;ofd.Filter = "*.xlsx|*.xlsx|*.xls|*.xls|*.*|*.*";ofd.FileName = "";DialogResult dr = ofd.ShowDialog();if (dr == DialogResult.OK){txtPath.Text = ofd.FileName;}}List<RdoQuestion> lstRdoQuestion = new List<RdoQuestion>();RdoQuestion rdoQuestion;List<GapFilling> lstGapFilling = new List<GapFilling>();GapFilling gapFilling;List<TFQuestion> lstTFQuestion = new List<TFQuestion>();TFQuestion tfQuestion;/*****************写入word*************/FileStream fs2;XWPFDocument MyDoc = new XWPFDocument();//打开07(.docx)以上的版本的文档XWPFParagraph MyParagraph = null;XWPFParagraph paragraph = null;XWPFRun run = null;private string ReplaceStr(string str1,string str2){int start = 0;int end = 0;while((start=str1.IndexOf("【"))>=0&&(end= str1.IndexOf("】"))>= 0&&end>start){string tmpStr = str1.Substring(start, end - start + 1);str1 = str1.Replace(tmpStr,str2);}return str1;}private void btnExport_Click(object sender, EventArgs e){SaveFileDialog sfd = new SaveFileDialog();sfd.FileName = "";sfd.Filter = "*.docx|*.docx|*.*|*.*";DialogResult dr = sfd.ShowDialog();if(dr==DialogResult.OK){fs2 = new FileStream(sfd.FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);}string strExt = Path.GetExtension(txtPath.Text).ToLower();var fs = File.OpenRead(txtPath.Text);HSSFWorkbook workbook1 = null;XSSFWorkbook workbook2 = null;ISheet sheet = null;switch (strExt){case ".xls":workbook1 = new HSSFWorkbook(fs);sheet = workbook1.GetSheetAt(0);break;case ".xlsx":workbook2 = new XSSFWorkbook(fs);sheet = workbook2.GetSheetAt(0);break;default:MessageBox.Show("文件格式不支持!", "提示");break;}bool flag = false;//去首行for (var j = 1; j <= sheet.LastRowNum; j++){var row = sheet.GetRow(j);if (row != null){string tx = row.GetCell(2).ToString();switch(tx){case "单选题":var RDOcell = row.GetCell(1) + "(      )";rdoQuestion = new RdoQuestion();rdoQuestion.Stem = RDOcell.ToString();rdoQuestion.Option.Enqueue(row.GetCell(6).ToString() + "." + row.GetCell(7).ToString());rdoQuestion.Answer = row.GetCell(4).ToString();row = sheet.GetRow(++j);while (row!= null && row.GetCell(2).ToString() == ""){rdoQuestion.Option.Enqueue(row.GetCell(6).ToString() + "." + row.GetCell(7).ToString());row = sheet.GetRow(++j);}j--;lstRdoQuestion.Add(rdoQuestion);break;case "判断题":var TFcell = row.GetCell(1);tfQuestion = new TFQuestion();tfQuestion.Stem = TFcell.ToString()+"(       )";tfQuestion.Answer = row.GetCell(4).ToString();lstTFQuestion.Add(tfQuestion);break;case "填空题":var GFcell = row.GetCell(1);string repStr = GFcell.ToString();gapFilling = new GapFilling();gapFilling.Stem = GFcell.ToString();gapFilling.Answer.Enqueue(row.GetCell(4).ToString());row = sheet.GetRow(++j);while ( row != null && row.GetCell(2).ToString() == ""){gapFilling.Answer.Enqueue(row.GetCell(4).ToString());row = sheet.GetRow(++j);}j--;lstGapFilling.Add(gapFilling);break;default:MessageBox.Show(tx + "目前不支持,请联系QQ2351637");break;}}}//单选题WriteTitle("单选题(每题2分)\r\n");int i = 1;foreach (RdoQuestion rdoq in lstRdoQuestion){string str = i++.ToString() + "." + rdoq.Stem + "\r\n";WriteContent(str);while (rdoq.Option.Count > 0)WriteContent( rdoq.Option.Dequeue());if(chkAnswer.Checked){WriteContent("答案:" + rdoq.Answer);}}//判断题WriteTitle("判断题(每题1分)\r\n");i = 1;foreach(TFQuestion tfQuestion in lstTFQuestion){string str = i++.ToString() + "." + tfQuestion.Stem + "\r\n";WriteContent(str);if(chkAnswer.Checked){WriteContent("答案:" + tfQuestion.Answer);}}//填空题i = 1;WriteTitle("填空题(每空1分)\r\n");foreach(GapFilling gapFilling in lstGapFilling){string str = i++.ToString() + "." + gapFilling.Stem + "\r\n";str = ReplaceStr(str, "_________  ");WriteContent(str);if (chkAnswer.Checked){string sAns = "";foreach(string s in gapFilling.Answer){sAns += s + ",";}sAns = sAns.Substring(0, sAns.Length - 1);WriteContent("答案:"+sAns);}}MyDoc.Write(fs2);fs2.Close();MessageBox.Show("导出成功!请打开" +sfd.FileName+ "文件");}private void WriteTitle(string strTitle){paragraph = MyDoc.CreateParagraph();paragraph.Alignment = ParagraphAlignment.LEFT; //字体居中var run = paragraph.CreateRun();run.IsBold = true;run.SetText(strTitle);run.FontSize = 14;run.SetFontFamily("黑体", FontCharRange.None); //设置黑体//控制段落与其他元素的上下距离paragraph.SpacingBeforeLines = 20;//上方距离paragraph.SpacingAfterLines = 20;//下方距离}private void WriteContent(string strTitle){paragraph = MyDoc.CreateParagraph();paragraph.Alignment = ParagraphAlignment.LEFT; //字体居中var run = paragraph.CreateRun();run.IsBold = false;run.SetText(strTitle);run.FontSize = 10;run.SetFontFamily("宋体", FontCharRange.None); //设置黑体//控制段落与其他元素的上下距离paragraph.SpacingBeforeLines = 20;//上方距离paragraph.SpacingAfterLines = 20;//下方距离}}
}

六、源程序下载:

蓝墨云试卷生成系统


蓝墨云功能扩展之试卷导出WORD文档相关推荐

  1. java导出word文档组件_java导出word文档(转)

    导出word文档有两种方式:第一种是使用POI,第二种是使用itext组件,下面逐渐介绍: 1.使用POI的方式:本方式目前没法改变字体样式,只能输出纯文本. /** * 试卷导出word文档 * @ ...

  2. 【Java用法】使用Java导出word文档的解决方案(适用于从服务器上下载到本地电脑)

    本文目录 一.Controller 二.Service 接口类 三.ServiceImpl 实现类 四.Content-Type 类型与MIME Type类型对照表 最近在做一个word导出功能,需求 ...

  3. 【Java实现导出Word文档功能 XDocReport +FreeMarker】

    Java实现导出Word文档功能(XDocReport +FreeMarker) 前言 在日常的开发工作中,我们时常会遇到导出Word文档报表的需求,比如公司的财务报表.医院的患者统计报表.电商平台的 ...

  4. 思维导图软件MindManager导出Word文档功能详解

    Mindmanager思维导图软件作为一款能与Microsoft office软件无缝集成的思维导图软件,支持Word文档的快速导入与导出,并支持Word文档的目录生成.模板套用等,极大地方便了用户完 ...

  5. SSM框架集成导出Word文档功能 XDocReport +FreeMarker

             网上有很多关于使用XDocReport导出Word的文章,都差不多试用了一下,也看了一些评论,发现实现功能的过程当中大家还是会出现各种问题.现在我来把我自己实现的过程说一下,顺便总结 ...

  6. 【Java用法】使用Java导出word文档的解决方案(适用于Windows电脑)

    目录 实现方式一.通过原生的POI 实现方式二.通过Hutool工具包 步骤1.添加pom依赖 步骤2.编写几行代码 步骤3.启动项目,大功告成 实现的效果 最近在做一个word导出功能,需求非常简单 ...

  7. 【Python】批量导出word文档中的图片、嵌入式文件

    Python 批量导出word文档中的图片.嵌入式文件 需求 学生试卷中的题目有要提交截图的,也有要提交文件的,为了方便学生考试,允许单独交或者嵌入Word中提交,那么事后如何整理学生的答案?单独提交 ...

  8. 利用docx4j完美导出word文档(标签替换、插入图片、生成表格)

    最近公司让我实现一个利用原有word模板,导出word文档的功能模块,发现docx4j是个很不错的工具,但是之前从来没有用过,对此并不了解,于是上网查找相关资料,也是非常少之,于是便自己开始摸索. 1 ...

  9. freemarker导出word文档——WordXML格式解析

    前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...

最新文章

  1. Java 内部类及其原理
  2. powershell获取linux文件,powershell如何读取文件名并赋值到变量?
  3. pdf拼版插件_pdf文件中的文字批量转曲的办法
  4. Linux find指令
  5. 8大行业场景!最新 Apache Flink 行业案例集火热出炉
  6. ?类型 ,?类型(值)
  7. 前端学习(3185):ant-design的button介绍按钮属性
  8. 【BZOJ - 2574】[Poi1999] Store-Keeper(点双连通分量,求割点,记忆化bfs)
  9. c语言正则表达式_CS143:编译原理|PA2:正则表达式和词法分析
  10. 收获,不止SQL优化——抓住SQL的本质--第六章
  11. ddk7600驱动开发环境搭建
  12. oracle中between函数用法,Oracle常用函数使用介绍
  13. 破解密码——利用粘滞键漏洞破解Windows 7 PIN
  14. Linux下的tree的简单使用
  15. Android开发环境配置(内有完整过程配图)
  16. 西门子仿真软件(S7-PLCSIM Advanced )与C#通过Profinet读写DB测试总结
  17. unity 阿拉伯文显示
  18. 五款最佳Linux下载管理器推荐
  19. 抖音内容选题怎么做?有哪些找选题的办法?
  20. 可穿戴设备数据安全及隐私保护概论

热门文章

  1. 使用echarts画日历热力图
  2. 小米关机一直显示android,小米手机一直卡在fastboot怎么办
  3. Serenity框架官方文档翻译3.2(多租户)
  4. Xunity.autotranslator机翻unity引擎的游戏
  5. Thingworx - 导航
  6. OpenGLES2.0渲图步骤:绘几何图形、图片处理、离屏渲染(3)
  7. Cypress之模拟键盘鼠标操作以及页面元素拖动操作
  8. adb install -r -d的含义
  9. 创业公司怎样才能有效的进行员工股权激励
  10. 遇见逆水寒服务器维护时间,《遇见逆水寒》7月23日更新公告