问一下,如何使用js将页面转换成Word文档导出来?
部分代码如下:在窗口及WebBrowser创建完以后,写此代码:WebBrowser.OnNewWindow2:=IE1NewWindow2;给主窗口创建一个方法:procedure TBrowForm.IE1NewWindow2(Sender: TObject; var ppDisp: IDispatch;var Cancel: WordBool);Var NewForm:TBrowForm;begintryNewForm :=TPopBrowerForm.Create(application);NewForm.WebBrowser.OnNewWindow2 :=IE1NewWindow2;//如果在窗口的Oncreate事件//有此代码,此处就可以省略ppDisp := NewForm.WebBrowser.Application;NewForm.Show;Cancel:=false;exceptend;end;
怎么把AxWebBrowser嵌入窗体
在 Visual C# .NET 中新建一个 Windows 应用程序项目。
默认情况下会创建 Form1。
在工具菜单上,单击自定义工具箱以打开自定义工具箱对话框。
在 COM 组件选项卡上,添加一个对 Microsoft WebBrowser 的引用。
单击确定,将 WebBrowser 控件添加到 Windows 窗体工具箱。
WebBrowser 控件会显示出来,并且在工具箱中带有 Explorer(资源管理器)字样。
使用该工具箱向 Form1 添加一个 WebBrowser 控件、一个 OpenFileDialog 控件和一个 CommandButton 按钮。
这就会向 Form1 类添加 AxWebBrowser1、OpenFileDialog1 和 Button1 成员变量。
在 Form1 上,双击 button1。
这就会向 Form1 添加 Button1_Click 事件。
在 Form1 的代码窗口中,向列表添加以下命名空间:using System.Reflection; 如下所示在 Form1 类中定义一个私有成员:private Object oDocument; 在 Form1 类的 InitializeComponent 方法的末尾,添加以下代码以处理 Form1_Load、Form1_Closed 和 axWebBrowser1_NavigateComplete2 事件:this.axWebBrowser1.NavigateComplete2 += new AxSHDocVw.DWebBrowserEvents2_NavigateComplete2EventHandler(this.axWebBrowser1_NavigateComplete2); this.Load += new System.EventHandler(this.Form1_Load); this.Closed += new System.EventHandler(this.Form1_Closed); 将下面的代码private void button1_Click(object sender, System.EventArgs e) { } 替换为: private void button1_Click(object sender, System.EventArgs e) { String strFileName; //Find the Office document. openFileDialog1.FileName = ""; openFileDialog1.ShowDialog(); strFileName = openFileDialog1.FileName; //If the user does not cancel, open the document. if(strFileName.Length != 0) { Object refmissing = System.Reflection.Missing.Value; oDocument = null; axWebBrowser1.Navigate(strFileName, ref refmissing , ref refmissing , ref refmissing , ref refmissing); } } public void Form1_Load(object sender, System.EventArgs e) { button1.Text = "Browse"; openFileDialog1.Filter = "Office Documents(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt" ; openFileDialog1.FilterIndex = 1; } public void Form1_Closed(object sender, System.EventArgs e) { oDocument = null; } public void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e) { //Note: You can use the reference to the document object to // automate the document server. Object o = e.pDisp; oDocument = o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null); Object oApplication = o.GetType().InvokeMember("Application",BindingFlags.GetProperty,null,oDocument,null); Object oName = o.GetType().InvokeMember("Name",BindingFlags.GetProperty ,null,oApplication,null); MessageBox.Show("File opened by: " + oName.ToString() ); } 按 F5 键运行该项目。
单击浏览后,会出现打开对话框,您可以使用该对话框浏览到 Word 文档、Excel 工作表或 PowerPoint 演示文稿。
选择任一文件,然后单击打开。
文档在 WebBrowser 控件内打开,并出现一个显示有 Office 文档服务器名称的消息框。
C#webbrowser 跨域访问时 如何获得对此网页的绝对权限
添加COM reference, SHDocVw 及 mshtml将webBrower1.ActiveXInstance属性 传给 SHDocvw.WebBrowser接口使用SHDocvw.WebBrowser接口下的ProgressChange事件在Progress.Equals(ProgressMax)时,取((webBrowser1.ActiveXInstance as SHDocVw.WebBrowser).Document as mshtml.HTMLDocumentClass).body.innerText即可代码类似如此: private void button1_Click(object sender, EventArgs e) { SHDocVw.WebBrowser wb = webBrowser1.ActiveXInstance as SHDocVw.WebBrowser; wb.ProgressChange += new DWebBrowserEvents2_ProgressChangeEventHandler(wb_ProgressChange); object flags = new object(), header = new object(), postdata = new object(), framename = new object(); webBrowser1.Navigate(@"http://image.baidu.com/i?ct=503316480&z=0&tn=baiduimagedetail&word=%C1%D6%D0%C4%C8%E7&in=31076&cl=2&cm=1&sc=0&lm=-1&pn=0&rn=1&di=503232564&ln=2000&fr="); } void wb_ProgressChange(int Progress, int ProgressMax) { if (Progress.Equals(ProgressMax)) MessageBox.Show(((webBrowser1.ActiveXInstance as SHDocVw.WebBrowser).Document as mshtml.HTMLDocumentClass).body.innerText); }触发事件你可以再看一下,可能还有更合适的。
但是Progress.Equals(ProgressMax)是最基本的 保证全部加载完毕。
还有个方法你可以自己尝试下,我觉得可以用BHO,但是不知道winform里的webbrowser对象会不会自动加载BHO,用BHO跟上边过程差不多,只是要编成COM 展开
怎么在Winform中的Webbrowser上显示一个本地的HTML文件 不要直接...
打开word的方法this.webBrowser1.Navigate(fileName),因为速度比较慢,所以要进行多线程操作,我的目的时,在.net打开word文档的时候显示label控件“正在打开。
。
。
”,打开完成后,把label隐藏起来,该如何实现?初次接触多线程,望高手能给出点具体的代码或方法流程,小弟拜谢!!!单线程就是进程只有一个线程多线程就是进程有多个线程多线程处理的优点同步应用程序的开发比较容易,但由于需要在上一个任务完成后才能开始新的任务,所以其效率通常比多线程应用程序低。
如果完成同步任务所用的时间比预计时间长,应用程序可能会不响应。
多线程处理可以同时运行多个过程。
例如,文字处理器应用程序在您处理文档的同时,可以检查拼写(作为单独的任务)。
由于多线程应用程序将程序划分成独立的任务,因此可以在以下方面显著提高性能:多线程技术使程序的响应速度更快,因为用户界面可以在进行其他工作的同时一直处于活动状态。
当前没有进行处理的任务可以将处理器时间让给其他任务。
占用大量处理时间的任务可以定期将处理器时间让给其他任务。
可以随时停止任务。
可以分别设置各个任务的优先级以优化性能。
是否需要创建多线程应用程序取决于多个因素。
在以下情况下,最适合采用多线程处理:耗时或大量占用处理器的任务阻塞用户界面操作。
各个任务必须等待外部资源(如远程文件或 Internet 连接)。
例如,用于跟踪 Web 页上的链接并下载满足特定条件的文件的 Internet 应用程序“robot”。
这种应用程序可以依次同步下载各个文件,也可以使用多线程同时下载多个文件。
多线程方法比同步方法的效率高很多,因为即使在某些线程中远程 Web 服务器的响应非常慢,也可以下载文件。
下面是多线程的例子还在Dos时代,人们就在寻求一种多任务的实现。
于是出现了TSR类型的后台驻留程序,比较有代表性的有Side Kick、Vsafe等优秀的TSR程序,这类程序的出现和应用确实给用户使用计算机带来了极大的方便,比如Side Kick,我们编程可以在不用进编辑程序的状态下,一边编辑源程序,一边编译运行,非常方便。
但是,Dos单任务操作系统的致命缺陷注定了在Dos下不可能开发出真正的多任务程序。
进入Windows3.1时代,这种情况依然没有根本的改变,一次应用只能做一件事。
比如数据库查询,除非应用编得很好,在查询期间整个系统将不响应用户的输入。
进入了Windows NT和Windows 9x时代,情况就有了彻底的改观,操作系统从真正意义上实现了多任务(严格地说,Win9x还算不上)。
一个应用程序,在需要的时候可以有许多个执行线程,每个线程就是一个小的执行程序,操作系统自动使各个线程共享CPU资源,确保任一线程都不能使系统死锁。
这样,在编程的时候,可以把费时间的任务移到后台,在前台用另一个线程接受用户的输入。
对那些对实时性要求比较高的编程任务,如网络客户服务、串行通信等应用时,多线程的实现无疑大大地增强了程序的可用性和稳固性。
转载请注明出处51数据库 » webbrowser 操作word