C#数据导入
想要实现数据导入到项目里面呈现出来,其实很简单而其中HTML更是只需要下面这些代码就可以实现了。下面的第一个div其本上,就是为了把要导入的数据呈现在这里给用户对数据的检查是否是用户要导入的数据。
第二个div就是用户在页面上的按钮,按一下页面就有一个文件选择框打开效果的。其实文件选择框不是它打开的,他只是一个单纯的点击按钮而已。他会把他获得的点击事件传递到第三个div中。
第三个div就是受第二个div的点击事件,然后就打开一个文件选择框。而且最总要的是accept=".doc,.docx"这个属性,它只接受后缀名为doc和docx的文件,你一打开那个文件选择框就只会看到后缀有doc和docx的文件,别的文件是看不到的了。这样能尽可能的减少用户选择错误文件的可能。
<div class="left-titles" id="titlesInfor" contenteditable="true" style="overflow:auto;"> <!--题目信息-->
</div>
<div class="col-md-2 col-sm-2 col-md-offset-4 col-sm-offset-4"><input id="ImportTitles" class="btn btn-primary" type="button" value="导入试题"/>
</div>
<div style="display: none"><form id="frmUpWord" action="UploadWord" method="post" enctype="multipart/form-data"><input type="file" name="file" accept=".doc,.docx" onchange="uploadWord()"/></form>
</div>
导入试题按钮点击之后对隐藏的input进行隐藏,然后提交,因为控制器返回的文本就是需要的,所以只要输出就可以了。
$("#ImportTitles").click(function () {
$("#frmUpWord input[type=‘file’]").click();});
function uploadWord() {
var index = layer.load();
$("#frmUpWord").ajaxSubmit(function (message) {
layer.close(index);
if (message.State) {
$("#titlesInfor").html(message.Text);
layer.msg(“请检查上传的试题!”, { icon: 0, skin: “layui-layer-molv” });
} else {
layer.msg(message.Text, { icon: 0, skin: “layui-layer-molv” });
}});}
下面的是控制器中的主要代码
string FileName = file.FileName;获取文件名称
string[] str = FileName.Split(’\’); 这里主要是为了处理IE浏览器上传的文件名
FileName = str[str.Length - 1];
string fileExtension = Path.GetExtension(FileName); 获取到文件的扩展名
if (".doc||.docx".Contains(fileExtension))如果文件名包含doc或docx
{ 以当前日期加上原文件名称组合成新的文件名称
string fileName=DateTime.Now.ToString(“yyyyMMddHHmmss”)+FileName;
判断目录是不是,不是就创建一个
if (!Directory.Exists(Server.MapPath("~/Document/Title/Temp/")))
{Directory.CreateDirectory(Server.MapPath("~/Document/Title/Temp/"));}
保存完路径就接着保存文件
string filePath = Path.Combine(Server.MapPath("~/Document/Title/Temp"), fileName);
file.SaveAs(filePath); 建HTML文件,接着保存路径,读取文件并保存
string htmlName = fileName.Replace(fileExtension, “.html”);
string htmlPath = Path.Combine(Server.MapPath("~/Document/Title/Temp/"), htmlName);
Document document = new Document(filePath);
document.SaveToFile(htmlPath, FileFormat.Html);
读取文件的内容,返回包括文件的所有行的字符串.
string strhtml = System.IO.File.ReadAllText(htmlPath);
strhtml = Regex.Replace(strhtml, “<p|<pre”, “<p reg=“demo””);替换文件中的标签
strhtml = Regex.Replace(strhtml, “”, “
strhtml = Regex.Replace(strhtml, “style=”.+?(?=")"", “”);去掉style的样式和p标签
MatchCollection matchPList = Regex.Matches(strhtml,"<p reg=“demo”[\w\W\r\n]*?>");
List<Dictionary<string, string>> listLast = new List<Dictionary<string, string>>();
for (int i = 1; i < matchPList.Count; i++)
最后就是保存最终结果
{string strP = matchPList[i].Value;
string c = FormatHandler(strP);Dictionary<string, string> dic = new Dictionary<string, string>();dic.Add(i.ToString(), c);listLast.Add(dic); }string strOutHtml = "";foreach (Dictionary<string, string> listitem in listLast){foreach (string item in listitem.Values){strOutHtml += item; }strOutHtml += "<br/>";}
发布评论