Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
蓝墨云考试怎么快速查答案_怎么把试卷转化成文档,希望能够帮助你!!!。
蓝墨云目前是免费且使用广泛的一个教学平台。但是普通用户目前只支持导入试题功能,却不支持把试题从蓝墨云上进行导出。
接下来,将实现导出的方法简要讲述一下:
①把蓝墨云上的试卷或测试导出
②导出的压缩包中有一个《汇总与详情》的Excel文件,这里包含了试题的全部内容。
③用C#编程读取《汇总与详情》的试题内容,生成符合试卷格式的文档。
接下来,我们就开始操作吧!
小贴士:通过选择【显示答案】复选框,可以生成带答案的试卷。
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 strQun = ""; 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 + "目前不支持,请联系"); 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;//下方距离 } } }
蓝墨云试卷生成系统
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章