Files
csharpcode/omegapro/Omega/Forms/frmQuestionImport.cs
2025-08-02 05:20:17 +07:00

147 lines
6.6 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Datalib.DatabaseSpecific;
using Datalib.EntityClasses;
using Datalib.FactoryClasses;
using Datalib.HelperClasses;
using System.IO;
using Datalib.Linq;
using System.Linq;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Validation;
using OpenXmlPowerTools;
using System.Xml.Linq;
namespace Omega.Forms
{
public partial class frmQuestionImport : Omega.BasicForms.frmCommon
{
public string filename { get; set; }
public frmQuestionImport()
{
InitializeComponent();
}
private void SaveToDB_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
string source = this.filename;
List<Source> sources = new List<Source>();
WmlDocument InputDoc = new WmlDocument(source);
OpenXmlMemoryStreamDocument InputStream = new OpenXmlMemoryStreamDocument(InputDoc);
WordprocessingDocument InputwDoc = InputStream.GetWordprocessingDocument();
XDocument InputxDoc = InputwDoc.MainDocumentPart.GetXDocument();
List<XElement> tbls = InputxDoc.Descendants(W.tbl).Where(m => m.Parent.Name.ToString().Contains("body")).ToList();
List<TblQuestionEntity> quesions = new List<TblQuestionEntity>();
this.progressPanel.Visible = true;
foreach( var tbl in tbls)
{
string QuestionID = Guid.NewGuid().ToString("N");
string SubjectID = "";
string Level = "";
string Difficulty = "";
string FieldID = "";
string QuestionCode = "";
TblQuestionEntity question = new TblQuestionEntity(QuestionID);
question.QuestionId = QuestionID;
question.CreateDate = DateTime.Today;
// Get Question Content
var CellContent = tbl.Elements(W.tr).ToList()[0].Elements(W.tc).FirstOrDefault().Elements().Where(ce => ce.Name != W.tcPr).ToList();
var Summary = tbl.Elements(W.tr).ToList()[0].Elements(W.tc).FirstOrDefault().Value.ToString();
// MessageBox.Show(Summary);
WmlDocument modify = new WmlDocument(InputDoc);
OpenXmlMemoryStreamDocument modifystream = new OpenXmlMemoryStreamDocument(modify);
WordprocessingDocument modifywDoc = modifystream.GetWordprocessingDocument();
XDocument modifyxDoc = modifywDoc.MainDocumentPart.GetXDocument();
modifyxDoc.Descendants(W.body).First().ReplaceNodes(CellContent);
modifywDoc.MainDocumentPart.PutXDocument();
sources.Clear();
sources.Add(new Source(modifystream.GetModifiedWmlDocument(), true));
WmlDocument finalDocument = DocumentBuilder.BuildDocument(sources);
string base64 = Convert.ToBase64String(finalDocument.DocumentByteArray);
byte[] bytes = Convert.FromBase64String(base64);
question.Content = base64;
question.Summary = Summary;
//Get Content of Answer
CellContent = tbl.Elements(W.tr).ToList()[1].Elements(W.tc).FirstOrDefault().Elements().Where(ce => ce.Name != W.tcPr).ToList();
modify = new WmlDocument(InputDoc);
modifystream = new OpenXmlMemoryStreamDocument(modify);
modifywDoc = modifystream.GetWordprocessingDocument();
modifyxDoc = modifywDoc.MainDocumentPart.GetXDocument();
modifyxDoc.Descendants(W.body).First().ReplaceNodes(CellContent);
modifywDoc.MainDocumentPart.PutXDocument();
sources.Clear();
sources.Add(new Source(modifystream.GetModifiedWmlDocument(), true));
finalDocument = DocumentBuilder.BuildDocument(sources);
base64 = Convert.ToBase64String(finalDocument.DocumentByteArray);
bytes = Convert.FromBase64String(base64);
question.Answer = base64;
//Get Content of Explaination
CellContent = tbl.Elements(W.tr).ToList()[2].Elements(W.tc).FirstOrDefault().Elements().Where(ce => ce.Name != W.tcPr).ToList();
modify = new WmlDocument(InputDoc);
modifystream = new OpenXmlMemoryStreamDocument(modify);
modifywDoc = modifystream.GetWordprocessingDocument();
modifyxDoc = modifywDoc.MainDocumentPart.GetXDocument();
modifyxDoc.Descendants(W.body).First().ReplaceNodes(CellContent);
modifywDoc.MainDocumentPart.PutXDocument();
sources.Clear();
sources.Add(new Source(modifystream.GetModifiedWmlDocument(), true));
finalDocument = DocumentBuilder.BuildDocument(sources);
base64 = Convert.ToBase64String(finalDocument.DocumentByteArray);
bytes = Convert.FromBase64String(base64);
question.Explaination = base64;
//Get Content of Subject ID, Level, Field ....
string Code = tbl.Elements(W.tr).ToList()[3].Elements(W.tc).FirstOrDefault().Value.ToString();
string[] Codes = Code.Split(new char[] { ';' });
QuestionCode = Codes[0].Split(new char[] { '=' })[1];
SubjectID = Codes[1].Split(new char[]{'='})[1];
FieldID = (Codes[2].Split(new char[] { '=' })[1]);
Level = (Codes[3].Split(new char[] { '=' })[1]);
Difficulty = (Codes[4].Split(new char[] { '=' })[1]);
question.SubjectId= SubjectID.Trim();
question.FieldId = FieldID.Trim();
question.Level = Level.Trim();
question.Difficulty = Difficulty.Trim();
question.QuestionCode = QuestionCode.Trim();
adapter.SaveEntity(question,true,true);
quesions.Add(question);
}
grdResult.DataSource = quesions;
this.Tabs.SelectedTabPageIndex = 1;
this.progressPanel.Visible = false;
}
private void Open_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
this.filename = openFileDialog.FileName;
byte[] buff = File.ReadAllBytes(filename);
this.richEditControl.OpenXmlBytes = buff;
}
}
}
}