问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何将mht转成word格式

发布网友 发布时间:2022-04-21 20:27

我来回答

3个回答

热心网友 时间:2022-04-21 11:57

 第一步,先制作了一个很简单的html模板。将动态内容用诸如“$htmldata[1]”来代替,等取出数据后用Replace函数进行替换。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>$htmldata[1]</title>

<style type="text/css">

* {

    margin:0px;

    padding:0px;

}

.article_s{

    width:980px;

    height:auto;

    overflow:hidden;

    margin:0 auto;

}

.article_s_t_f{

    width:960px;

    height:auto;

    line-height: 30px;

    font-size: 18px;

    padding-top: 10px;

    text-align: center;

    font-weight:700;

    margin:0 auto;

}

.article_s_t_s{

    width:960px;

    line-height: 30px;

    text-align: center;

    font-size: 13px;

    border-bottom:1px dashed #CCC;

    margin:0 auto;

}

.article_s_l{

    width:960px;

    margin:0 auto;

    line-height:28px;

    font-size:14px;

    padding:10px 0px 10px 0px;

}

.article_s_c{

    width:960px;

    height:23px;

    text-align:center;

    margin-bottom:20px;

}

</style>

</head>

 

<body>

<div class="article_s">

    <div class="article_s_t_f">$htmldata[2]</div>

    <div class="article_s_t_s">$htmldata[3]</div>

    <div class="article_s_l">

        $htmldata[4]

    </div>

</div>

</body>

</html>

第二步:

建立一个静态类,代码如下:

public class Function

    {

        static Function() { }

        //根据html生成mht文件,需要引入相应的dll,如图所示

public static void HtmlToMht(string src, string dst)

        {

            CDO.Message msg = new CDO.MessageClass();

            CDO.Configuration c = new CDO.ConfigurationClass();

            msg.Configuration = c;

            msg.CreateMHTMLBody(src, CDO.CdoMHTMLFlags.cdoSuppressNone, "", "");

            ADODB.Stream stream = msg.GetStream();

            stream.SaveToFile(dst, ADODB.SaveOptionsEnum.adSaveCreateOverWrite);

        }

 

        public static void WriteHtml(string name,string content,string addTime,string hits,stringuser)//参数内容都是从数据库读出来的文章信息,其中content就是ewebeditor生成的html代码

        {

            DateTime dt = DateTime.Parse(addTime);//将string型的日期格式转为DateTime型的因为默认的日期格式不能作为文件名,所以将日期的“:”替换为“-”

            string Temp_Name = @"D:\Application\Visual Studio 2010\Projects\富文本转Word\富文本转Word\temp\Articles.html";//HTML模板的路径

            string File_Name = @"D:\Application\Visual Studio 2010\Projects\富文本转Word\富文本转Word\html\【" + dt.ToShortDateString().Replace("/","-") +"】" +name + ".html";//生成html文件的路径

            string File_NameM = @"D:\Application\Visual Studio 2010\Projects\富文本转Word\富文本转Word\html\【" + dt.ToShortDateString().Replace("/","-") +"】" +name + ".mht";//生成mht文件的路径

            string File_Name2 = @"D:\Application\Visual Studio 2010\Projects\富文本转Word\富文本转Word\html\【" + dt.ToShortDateString().Replace("/", "-") + "】" + name + ".doc";//生成Word文档的路径

            StreamReader sr = new StreamReader(Temp_Name);

            StringBuilder htmltext = new StringBuilder();

            String line;

            while ((line = sr.ReadLine()) != null)

            {

                htmltext.Append(line);//读取到html模板的内容

            }

            sr.Close();

           //替换相应的内容到指定的位置

            htmltext = htmltext.Replace("$htmldata[1]", name);

            htmltext = htmltext.Replace("$htmldata[2]", name);

            htmltext = htmltext.Replace("$htmldata[3]", ("点击数:" + hits + " 发布时间:" + addTime + "  发布者:" + user));

            htmltext = htmltext.Replace("$htmldata[4]", content);

            using (StreamWriter sw = new StreamWriter(File_Name, false, System.Text.Encoding.GetEncoding("UTF-8"))) //保存地址

            {

                //生成HTML文件

sw.WriteLine(htmltext);

                sw.Flush();

                sw.Close();

            }

            HtmlToMht(File_Name, File_NameM);//因为带图片的html直接转为Word的话,图片会以引用的形式展示(也就是说不是内置到word文档里去的,一旦断网或将图片放在别的路径之后,打开word文档图片会显示不出来,所以通过折冲的办法先生成html,然后转换为mht,再转为word)

            WordAction.SaveAsWord(File_NameM, File_Name2);//生成word

        }

    }

    建立另外一个操作word 的静态类,代码如下(代码都是拷的O(∩_∩)O):

    public class WordAction

    {

        public static void SaveAsWord(string fileName, string pFileName)//使用原生方法将mht转换为word文档,不是那种直接修改后缀名的方式

        {

            object missing = System.Reflection.Missing.Value;

            object readOnly = false;

            object isVisible = true;

            object file1 = fileName;

            object html1 = pFileName;

            object format = WdSaveFormat.wdFormatDocument;

            ApplicationClass oWordApp = new ApplicationClass();

            oWordApp.Visible = false;

            Document oWordDoc = oWordApp.Documents.Open(ref   file1, ref   format, ref  readOnly,ref   missing, ref   missing, ref   missing, ref   missing, ref   missing, ref  missing, ref   missing, ref   missing, ref   missing, ref   missing, ref   missing, ref  missing, ref missing);

            oWordApp.ActiveWindow.View.Type = Microsoft.Office.Interop.Word.WdViewType.wdPrintView;//将web视图修改为默认视图,不然打开word的时候会以web视图去展示,而不是默认视图。(唯独这句代码是自己加的 = =|||)

            oWordDoc.SaveAs(ref   html1, ref   format, ref   missing, ref   missing, ref   missing, ref   missing, ref   missing, ref   missing, ref   missing, ref   missing, ref   missing,ref   missing, ref   missing, ref   missing, ref   missing, ref   missing);

            oWordDoc.Close(ref     missing, ref     missing, ref     missing);

            oWordDoc = null;

            oWordApp.Application.Quit(ref   missing, ref   missing, ref   missing);

            oWordApp = null;

            killAllProcess();

 

        }

        protected static void killAllProcess() // 杀掉所有winword.exe进程

        {

            System.Diagnostics.Process[] myPs;

            myPs = System.Diagnostics.Process.GetProcesses();

            foreach (System.Diagnostics.Process p in myPs)

            {

                if (p.Id != 0)

                {

                    string myS = "WINWORD.EXE" + p.ProcessName + "  ID:" + p.Id.ToString();

                    try

                    {

                        if (p.Moles != null)

                            if (p.Moles.Count > 0)

                            {

                                System.Diagnostics.ProcessMole pm = p.Moles[0];

                                myS += "\n Moles[0].FileName:" + pm.FileName;

                                myS += "\n Moles[0].MoleName:" + pm.MoleName;

                                myS += "\n Moles[0].FileVersionInfo:\n" + pm.FileVersionInfo.ToString();

                                if (pm.MoleName.ToLower() == "winword.exe")

                                    p.Kill();

                            }

                    }

                    catch

                    { }

                    finally

                    {

                    }

                }

            }

        }

    }

第三步:

     随便建了个aspx页面,写上以下代码。

string title = "";

string postuser = "";

string content = "";

string addTime = "";

string hits = "";

DataTable dt = CatalogAccess.GetArticles();//从数据库取出自己需要的数据

            for (int i = 0; i < dt.Rows.Count; i++)

            {

                DataRow dr = dt.Rows[i];

                title = dr["Title"].ToString();

                postuser = dr["PostUser"].ToString();

                addTime = dr["AddTime"].ToString();

                hits = dr["Hits"].ToString();

                content = dr["Content"].ToString();

                content = content.Replace("src=\"/new/Editor/uploadfile/", "src=\"files/");//替换图片文件的引用目录,这个动作是非必要的,因为我把图片都下载到本地了,所以替换一下里面引用的图片路径,只要根据模板生成的html能正常显示图片就可以了

                Function.WriteHtml(title, content, addTime, hits, postuser);//生成word文档

                }

            }

            好了,大功告成啦。当然生成的word文档跟网页存在一点差别,在接受的范围内。

热心网友 时间:2022-04-21 13:15

在Word里面打开mht文件,然后再另存为DOC或DOCX文档

热心网友 时间:2022-04-21 14:50

这好办

word 2003 文件->打开,文件类型选择所有网页(*.mht,*.htm..),确定就行



楼主给分吧
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
门?049期父母欲其改娶五字金口决,开是什么特号生肖 支付宝怎么把银行卡的钱转到余额里呢? 下载wampserver5,安装并启动后不能启用apache、mysql的功能,请问这是怎... wampserver安装多个版本phpmysqlapache 四季豆有哪些吃法值得推荐? 四季豆牛肉馅饼的家常做法是什么? 香煎四季豆豆腐饼怎么做好吃 腾讯会议没声音怎么修复-腾讯会议没有声音修复办法 西安市高新区所有幼儿园 西安高新第二初级中学学区有哪些小区 舞蹈腹背肌训练目的 如何把文件变成.WORD文件格式 为什么安装word2003要产品密钥,word2003的产品密... 如何将word整个文档存到oracle数据库中 Tony: These days, the word “clone” has appeared... 为什么我的从DR导入WORD文档没反映呢 office2013的word打不开,完全没有反应! 电脑所有的word文档都打不开了。。。显示word已停... word转换器能转换什么格式的文件 为什么打开Word时出现一个窗口写到:Word无法启动... word的释义 微信下载的游戏是在哪个文件夹里??tencent文件夹... oppoR9手机,在微信上下载的游戏保存在哪里?想把... 三星s4,微信6.0,在微信里下载的游戏原文件在手机... 手机微信安装失败的游戏安装包在哪 微信下载的游戏在哪里可以查看 华为手机微信中Game是什么文件夹,能删除吗? 您好,vivo手机微信下载的游戏在哪个文件夹里,手... 有没有温网直播小威和莎拉的比赛 手机微信上面下载的游戏是存在到哪个文件夹 我是学舞蹈的,可是我小腹的肉挺多,怎么练腹肌 The L word carmen真实名字叫什么 跳肚皮舞可以锻炼腹肌吗?求大神帮助 能否列出一些常用软件的后缀名(比如:Word-.doc;... 跳肚皮舞可以锻炼腹肌吗? 怎样发布寻人信息 word2003产品密钥 学舞蹈练腹肌吗 哪里有真正能安装且不需要密码的WORD2003? 如何发寻人启事??? 电脑出现microsoftword:winword.exe系统错误 中国舞中的腹肌又简称为什么 中国寻人启事网 电脑word2003打不开了! 在舞蹈技巧方面,怎么样才能练好手臂的力量和腰部... 寻人启事怎么写 在线等个word软件下载地址 跳舞练出了腹肌怎么办 寻人启事怎么写? 如何将WORD文档放入ORACLE