批量导入数据将word文档转换成HTML文档
作者:互联网
1.在批量导入数据里:第一步下载一个word文档模板,用户可以根据这个worm文档模板的要求去填写数据,填学好数据之后保存worm文档
2.在页面选择到word文档保存到from表单中,通过ajaxSubmit()方法提交from表单的方式将word文档提交到控制器中,在控制器中创建一个方法接收文档和处理文档。
3.在方法里通过处理传递过来的word文件,先获取文件的名称FileName,分割文件名称获取文件的原始名称,通过获取的文件名称获取到文件的扩展名,通过文件的扩展名可以判断一下传过来的文件是否是自己指定的某种格式的文档。获取当前系统的时间联合前面获取到的文件扩展名组合新的文件名称,因为时间是不会重复的,所以这样可以得到一个独一无二的新的文件名称。检查一下需要将这个文件保存到的目录是存在,如果这个目录不存在就需要我们去创建这个目录,如果目录存在,则不需要创建目录,直接执行下一阶段的代码。
4.将上面组合的新的文件名称和目录组合成一个文件路径,保存文件 SaveAs()在派生类中重写时,保存上载文件的内容。
5.通过上面获取到的文件扩展名去更改文件的扩展名
- 将文件读取到document中,再将文件转化成HTML文档并保存
7.接下来如果你想将你保存的文件的内容显示到页面上可以让你检查你保存的数据,这时候你可以通过ReadAllText 读取文件内容,返回一个包含所有行的字符串,然后通过正则表达式去分割数据,通过一系列分割可以获取到你需要的内容,将处理好的数据返回到试图,在试图中进行数据回填就可以显示到页面上,当然你得设置一个用于显示数据内容的区域,用于显示内容。
注意:下面代码来源于老师授课内容
一、Form表单
<form id="frmUpWord" action="upload Word" method="post" enctype="multipart/form-data">
<input type="file" name="file" accept=".doc,.docx" onchange="uploadWord()" />
</form>
二、提交from表单和数据回填
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” });
}
});
}
三、控制器中的方法,处理文件、保存文件、返回数据
public ActionResult Upload Word(HttpPostedFileBase file) {
ReturnJson msg = new ReturnJson();
if (file != null)
{
string FileName =
file.FileName;//获取文件的名称
//主要处理IE浏览器上传的文件名
string[] str =
FileName.Split(’\’);//分割文件名称用数组接收
FileName = str[str.Length - 1];//获取分割出来的文件名的最后一部分
//获取文件的扩展名
string fileExtension = Path.GetExtension(FileName);
if (".doc||.docx".Contains(fileExtension))
{
//获取系统时间和文件的扩展名合起来当作文件的名称
string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + FileName;
#region 判断上传文件的类型
//检查目录是否存在,不存在据创建目录
if (!Directory.Exists(Server.MapPath("~/Document/Title/Temp/"))) {
//创建目录/Document/Notice onl oad
Directory.CreateDirectory(Server.MapPath("~/Document/Title/Temp/"));
}
//保存文件的路径 Combine 将两个字符串组合成一个路径
string filePath = Path.Combine(Server.MapPath("~/Document/Title/Temp/"), fileName);
//保存文件 SaveAs()在派生类中重写时,保存上载文件的内容
file.SaveAs(filePath);
#region 将word转换HTML
//html文件的文件名称,更改文件扩展名该为 .html
string htmlName =
fileName.Replace(fileExtension, “.html”);
//组合html文件的保存路径
string htmlPath = Path.Combine(Server.MapPath("~/Document/Title/Temp/"), htmlName);
/**Spire.Doc for .NET是一款由E-iceblue公司开发的专业的Word .NET类库,
使用该工具开发人员可以在任意.NET平台(C#,VB.NET,ASP.NET)上快速创建,
读取,写入,转换,打印Word文档。作为一个独立的Word 组件,
Spire.Doc的运行无需安装Microsoft Word。
而且,它可以将Microsoft Word文档创建功能集成到开发者的任何.NET应用程序
Spire.Doc.for .NET 是一个专业的word .NET库 ˈspaɪə(r)
**/
//需要在引用哪里引用Spire.Doc
Document document = new Document(filePath); //将文件读取到document中
document.SaveToFile(htmlPath, FileFormat.Html);//将文件转化成HTML文档并保存
#endregion
//ReadAllText 读取文件内容,返回一个包含所有行的字符串
string strhtml =
System.IO.File.ReadAllText(htmlPath);
//替换
html中的 给p标签添加一个自定义属性,若有pre标签,则替换成p标签
strhtml = Regex.Replace(strhtml, "<p|<pre", "<p
reg=“demo”");
strhtml = Regex.Replace(strhtml, "</pre>", "</p>");
//去掉style后面的样式
strhtml = Regex.Replace(strhtml, "style=\".+?(?=\")\"", "");
//正则表达式获取所有的P标签, \r回车 \n换行符
MatchCollection matchPList = Regex.Matches(strhtml, "<p
reg=“demo”[\w\W\r\n]*?>
"); //保存最终结果
List<Dictionary<string, string>> listLast = new List<Dictionary<string, string>>();
//保存所有段落
//将符合段落内容格式的字符串保存在列表中
//抽取p标签的文字图片内容
//保存最终结果
for(int i = 1; i <
matchPList.Count; i++)
{
string strP=
matchPList[i].Value;
//因为p标签可能存在多个文档与图片,所有使用List保存
string c =
FormatHandler(strP);
Dictionary<string, string> dic = new Dictionary<string, string>();//Dictionary表示键和值的集合
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/>";
}
//将抽取的结果 构建成显示的html
msg.State = true;
msg.Text = strOutHtml;
}
else
{
msg.Text = "只能上传word文件";
}
#endregion
}
else
{
msg.Text = "上传的文件为空";
}
return Json(msg, JsonRequestBehavior.AllowGet);
}
1.在批量导入数据里:第一步下载一个word文档模板,用户可以根据这个worm文档模板的要求去填写数据,填学好数据之后保存worm文档
2.在页面选择到word文档保存到from表单中,通过ajaxSubmit()方法提交from表单的方式将word文档提交到控制器中,在控制器中创建一个方法接收文档和处理文档。
3.在方法里通过处理传递过来的word文件,先获取文件的名称FileName,分割文件名称获取文件的原始名称,通过获取的文件名称获取到文件的扩展名,通过文件的扩展名可以判断一下传过来的文件是否是自己指定的某种格式的文档。获取当前系统的时间联合前面获取到的文件扩展名组合新的文件名称,因为时间是不会重复的,所以这样可以得到一个独一无二的新的文件名称。检查一下需要将这个文件保存到的目录是存在,如果这个目录不存在就需要我们去创建这个目录,如果目录存在,则不需要创建目录,直接执行下一阶段的代码。
4.将上面组合的新的文件名称和目录组合成一个文件路径,保存文件 SaveAs()在派生类中重写时,保存上载文件的内容。
5.通过上面获取到的文件扩展名去更改文件的扩展名
- 将文件读取到document中,再将文件转化成HTML文档并保存
7.接下来如果你想将你保存的文件的内容显示到页面上可以让你检查你保存的数据,这时候你可以通过ReadAllText 读取文件内容,返回一个包含所有行的字符串,然后通过正则表达式去分割数据,通过一系列分割可以获取到你需要的内容,将处理好的数据返回到试图,在试图中进行数据回填就可以显示到页面上,当然你得设置一个用于显示数据内容的区域,用于显示内容。
注意:下面代码来源于老师授课内容
一、Form表单
二、提交from表单和数据回填
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” });
}
});
}
三、控制器中的方法,处理文件、保存文件、返回数据
public ActionResult Upload Word(HttpPostedFileBase file) {
ReturnJson msg = new ReturnJson();
if (file != null)
{
string FileName =
file.FileName;//获取文件的名称
//主要处理IE浏览器上传的文件名
string[] str =
FileName.Split(’\’);//分割文件名称用数组接收
FileName = str[str.Length - 1];//获取分割出来的文件名的最后一部分
//获取文件的扩展名
string fileExtension = Path.GetExtension(FileName);
if (".doc||.docx".Contains(fileExtension))
{
//获取系统时间和文件的扩展名合起来当作文件的名称
string fileName = DateTime.Now.ToString(“yyyyMMddHHmmss”) + FileName;
#region 判断上传文件的类型
//检查目录是否存在,不存在据创建目录
if (!Directory.Exists(Server.MapPath("~/Document/Title/Temp/"))) {
//创建目录/Document/Notice onl oad
Directory.CreateDirectory(Server.MapPath("~/Document/Title/Temp/"));
}
//保存文件的路径 Combine 将两个字符串组合成一个路径
string filePath = Path.Combine(Server.MapPath("~/Document/Title/Temp/"), fileName);
//保存文件 SaveAs()在派生类中重写时,保存上载文件的内容
file.SaveAs(filePath);
#region 将word转换HTML
//html文件的文件名称,更改文件扩展名该为 .html
string htmlName =
fileName.Replace(fileExtension, “.html”);
//组合html文件的保存路径
string htmlPath = Path.Combine(Server.MapPath("~/Document/Title/Temp/"), htmlName);
/**Spire.Doc for .NET是一款由E-iceblue公司开发的专业的Word .NET类库,
使用该工具开发人员可以在任意.NET平台(C#,VB.NET,ASP.NET)上快速创建,
读取,写入,转换,打印Word文档。作为一个独立的Word 组件,
Spire.Doc的运行无需安装Microsoft Word。
而且,它可以将Microsoft Word文档创建功能集成到开发者的任何.NET应用程序
Spire.Doc.for .NET 是一个专业的word .NET库 ˈspaɪə®
**/
Document document = new Document(filePath); //将文件读取到document中
document.SaveToFile(htmlPath, FileFormat.Html);//将文件转化成HTML文档并保存
#endregion
//ReadAllText 读取文件内容,返回一个包含所有行的字符串
string strhtml =
System.IO.File.ReadAllText(htmlPath);
//替换
html中的 给p标签添加一个自定义属性,若有pre标签,则替换成p标签
strhtml = Regex.Replace(strhtml, “<p|<pre”, “<p
reg=“demo””);
strhtml = Regex.Replace(strhtml, “”, “
”);//去掉style后面的样式
strhtml = Regex.Replace(strhtml, “style=”.+?(?=")"", “”);
//正则表达式获取所有的P标签, \r回车 \n换行符
MatchCollection matchPList = Regex.Matches(strhtml, “<p
reg=“demo”[\w\W\r\n]*?>
//保存最终结果
List<Dictionary<string, string>> listLast = new List<Dictionary<string, string>>();
//保存所有段落
//将符合段落内容格式的字符串保存在列表中
//抽取p标签的文字图片内容
//保存最终结果
for(int i = 1; i <
matchPList.Count; i++)
{
string strP=
matchPList[i].Value;
//因为p标签可能存在多个文档与图片,所有使用List保存
string c =
FormatHandler(strP);
Dictionary<string, string> dic = new Dictionary<string, string>();//Dictionary表示键和值的集合
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 += “
”;
}
//将抽取的结果 构建成显示的html
msg.State = true;
msg.Text = strOutHtml;
}
else
{
msg.Text = “只能上传word文件”;
}
#endregion
}
else
{
msg.Text = “上传的文件为空”;
}
return Json(msg, JsonRequestBehavior.AllowGet);
}
标签:文件,word,string,保存,strhtml,HTML,文档,msg 来源: https://blog.csdn.net/qq_44489422/article/details/89969425