蓝墨云功能扩展之试卷导出WORD文档
蓝墨云目前是免费且使用广泛的一个教学平台。但是普通用户目前只支持导入试题功能,却不支持把试题从蓝墨云上进行导出。
接下来,将实现导出的方法简要讲述一下:
①把蓝墨云上的试卷或测试导出
②导出的压缩包中有一个《汇总与详情》的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文档相关推荐
- java导出word文档组件_java导出word文档(转)
导出word文档有两种方式:第一种是使用POI,第二种是使用itext组件,下面逐渐介绍: 1.使用POI的方式:本方式目前没法改变字体样式,只能输出纯文本. /** * 试卷导出word文档 * @ ...
- 【Java用法】使用Java导出word文档的解决方案(适用于从服务器上下载到本地电脑)
本文目录 一.Controller 二.Service 接口类 三.ServiceImpl 实现类 四.Content-Type 类型与MIME Type类型对照表 最近在做一个word导出功能,需求 ...
- 【Java实现导出Word文档功能 XDocReport +FreeMarker】
Java实现导出Word文档功能(XDocReport +FreeMarker) 前言 在日常的开发工作中,我们时常会遇到导出Word文档报表的需求,比如公司的财务报表.医院的患者统计报表.电商平台的 ...
- 思维导图软件MindManager导出Word文档功能详解
Mindmanager思维导图软件作为一款能与Microsoft office软件无缝集成的思维导图软件,支持Word文档的快速导入与导出,并支持Word文档的目录生成.模板套用等,极大地方便了用户完 ...
- SSM框架集成导出Word文档功能 XDocReport +FreeMarker
网上有很多关于使用XDocReport导出Word的文章,都差不多试用了一下,也看了一些评论,发现实现功能的过程当中大家还是会出现各种问题.现在我来把我自己实现的过程说一下,顺便总结 ...
- 【Java用法】使用Java导出word文档的解决方案(适用于Windows电脑)
目录 实现方式一.通过原生的POI 实现方式二.通过Hutool工具包 步骤1.添加pom依赖 步骤2.编写几行代码 步骤3.启动项目,大功告成 实现的效果 最近在做一个word导出功能,需求非常简单 ...
- 【Python】批量导出word文档中的图片、嵌入式文件
Python 批量导出word文档中的图片.嵌入式文件 需求 学生试卷中的题目有要提交截图的,也有要提交文件的,为了方便学生考试,允许单独交或者嵌入Word中提交,那么事后如何整理学生的答案?单独提交 ...
- 利用docx4j完美导出word文档(标签替换、插入图片、生成表格)
最近公司让我实现一个利用原有word模板,导出word文档的功能模块,发现docx4j是个很不错的工具,但是之前从来没有用过,对此并不了解,于是上网查找相关资料,也是非常少之,于是便自己开始摸索. 1 ...
- freemarker导出word文档——WordXML格式解析
前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...
最新文章
- Java 内部类及其原理
- powershell获取linux文件,powershell如何读取文件名并赋值到变量?
- pdf拼版插件_pdf文件中的文字批量转曲的办法
- Linux find指令
- 8大行业场景!最新 Apache Flink 行业案例集火热出炉
- ?类型 ,?类型(值)
- 前端学习(3185):ant-design的button介绍按钮属性
- 【BZOJ - 2574】[Poi1999] Store-Keeper(点双连通分量,求割点,记忆化bfs)
- c语言正则表达式_CS143:编译原理|PA2:正则表达式和词法分析
- 收获,不止SQL优化——抓住SQL的本质--第六章
- ddk7600驱动开发环境搭建
- oracle中between函数用法,Oracle常用函数使用介绍
- 破解密码——利用粘滞键漏洞破解Windows 7 PIN
- Linux下的tree的简单使用
- Android开发环境配置(内有完整过程配图)
- 西门子仿真软件(S7-PLCSIM Advanced )与C#通过Profinet读写DB测试总结
- unity 阿拉伯文显示
- 五款最佳Linux下载管理器推荐
- 抖音内容选题怎么做?有哪些找选题的办法?
- 可穿戴设备数据安全及隐私保护概论
热门文章
- 使用echarts画日历热力图
- 小米关机一直显示android,小米手机一直卡在fastboot怎么办
- Serenity框架官方文档翻译3.2(多租户)
- Xunity.autotranslator机翻unity引擎的游戏
- Thingworx - 导航
- OpenGLES2.0渲图步骤:绘几何图形、图片处理、离屏渲染(3)
- Cypress之模拟键盘鼠标操作以及页面元素拖动操作
- adb install -r -d的含义
- 创业公司怎样才能有效的进行员工股权激励
- 遇见逆水寒服务器维护时间,《遇见逆水寒》7月23日更新公告