webbrawser打开excel后本地其它excel文件不能打开编辑

古灵精怪_123 2014-05-19 04:39:08



用axwebbrawser打开一个excel文件后, 然后在本地同是打开其它的excel文件编辑 发现根本打不开
...全文
227 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
古灵精怪_123 2014-05-29
  • 打赏
  • 举报
回复
关键我不需要获取当前打开的对象是啥我也不操作 这个ppt打开就行了 不弹出那个打开 保存 取消框就行了
Landy_cc 2014-05-22
  • 打赏
  • 举报
回复
引用 7 楼 lihonghoney 的回复:
这个问题先不管了 为何每次这个控件打开一个本地文件都要弹出个选择框 我点击打开才行 能不能默认不弹框直接打开呢
估计是因为在webBroswer里面打开Excel,系统当作在一个新的空间打开Excel.exe,所以会询问, 你在你的 private void axWebBrowser1_NavigateComplete2这个函数里面试一下下面的代码,后面两行是添加上去的: object Document = axWebBrowser1.GetType().InvokeMember("Document", System.Reflection.BindingFlags.GetProperty, null, axWebBrowser1, null); Object oApplication = axWebBrowser1.GetType().InvokeMember("Application", System.Reflection.BindingFlags.GetProperty, null, Document, null); Microsoft.Office.Interop.Excel._Application App = (Microsoft.Office.Interop.Excel._Application)oApplication;
古灵精怪_123 2014-05-22
  • 打赏
  • 举报
回复
这个问题先不管了 为何每次这个控件打开一个本地文件都要弹出个选择框 我点击打开才行 能不能默认不弹框直接打开呢
Landy_cc 2014-05-21
  • 打赏
  • 举报
回复
我是直接Navigate过去的,你可以参考一下这篇文档,另外我的excel是wps的 http://support.microsoft.com/kb/304662/zh-cn
古灵精怪_123 2014-05-20
  • 打赏
  • 举报
回复
引用 2 楼 CHEN504390172 的回复:
不知道你的源码是什么,但是,如果你还是打不开,可以试一下下面的方法:添加一下文件过滤: openFileileDialog.Filter = "Office Documents(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt"; 另外引用一下excel的dll(这个你应该已经引用过了,如果你想对excel操作的话) 路径:C:\Program Files (x86)\Microsoft Visual Studio 11.0\Visual Studio Tools for Office\PIA\Office14\Microsoft.Office.Interop.Excel.dll 总之我这边用webBroswer打开一个文件,另外一个文件是能编辑滴……
你是office那个版本的 能给个例子我测试下吗 还有我是64位操作系统和这个没有关系吧
古灵精怪_123 2014-05-20
  • 打赏
  • 举报
回复
引用 1 楼 CHEN504390172 的回复:
不知道楼主那边为什么不能编辑,我试了一下用webBroswer打开一个Excel,然后再新建一个excel是完全能编辑的……,另外我用的VS版本是vs2012,不知道跟版本有没有问题,但是应该没问题吧……
我也是vs2012的 我的office版本2010 不就是调用 this.axWebBrowser1.Navigate2(ref mm, ref noObject, ref noObject, ref noObject, ref noObject); 这个方法打开吗 难道还有啥特殊处理 我是说用这个控件打开A.xlsx文件后 我在电脑上双击B.xlsx发现B打不开打开就如截图所示空白
古灵精怪_123 2014-05-20
  • 打赏
  • 举报
回复
那就奇怪了 我把代码上传下你们帮我看下 我也是vs2012的 非常感谢
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; using Excel = Microsoft.Office.Interop.Excel; using PPT = Microsoft.Office.Interop.PowerPoint; using WORD = Microsoft.Office.Interop.Word; using System.IO; using System.Runtime.InteropServices; namespace WebbrawsersAddExcel { public partial class WebBrawserUserControl : UserControl { public delegate void OpenComplete(object obj, OfficeType type); /// <summary> /// 设置打开完毕后的处理 /// </summary> public OpenComplete openComplete; private AxSHDocVw.AxWebBrowser axWebBrowser1; public WebBrawserUserControl() { InitializeComponent(); //创建一个axwebbrawser //System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WebBrawserUserControl)); axWebBrowser1 = new AxSHDocVw.AxWebBrowser(); ((System.ComponentModel.ISupportInitialize)(this.axWebBrowser1)).BeginInit(); // this.axWebBrowser1.Enabled = true; //this.axWebBrowser1.Location = new System.Drawing.Point(0, 0); this.Controls.Add(axWebBrowser1); // this.axWebBrowser1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axWebBrowser1.OcxState"))); this.axWebBrowser1.Dock = DockStyle.Fill; //this.axWebBrowser1.Silent = true; 禁止弹出错误窗口 thOpen = new Thread(new ThreadStart(OpenOfficeByPath)); this.axWebBrowser1.NavigateComplete2 += new AxSHDocVw.DWebBrowserEvents2_NavigateComplete2EventHandler(this.axWebBrowser1_NavigateComplete2); ((System.ComponentModel.ISupportInitialize)(this.axWebBrowser1)).EndInit(); } /// <summary> /// 打开进程 /// </summary> private Thread thOpen; public string OpenPath = string.Empty; /// <summary> /// 打开指定的office文件 /// </summary> /// <param name="path"></param> public void OpenOffice(string path) { try { if (string.IsNullOrEmpty(path)) { throw new NullReferenceException(); } OpenPath = path; if (thOpen.ThreadState == ThreadState.Stopped) { thOpen = new Thread(OpenOfficeByPath); } if (thOpen.ThreadState != ThreadState.Running) { thOpen.IsBackground = true; thOpen.Start(); } } catch (Exception ex) { throw ex; } } /// <summary> /// 打开指定的文件 /// </summary> private void OpenOfficeByPath() { try { lock (axWebBrowser1) { string s = OpenPath; object sobj = (object)s; object noObject = string.Empty; object mm = "about:blank"; //先打开一个空的 再打开指定文件 this.axWebBrowser1.Navigate2(ref mm, ref noObject, ref noObject, ref noObject, ref noObject); this.axWebBrowser1.Navigate2(ref sobj, ref noObject, ref noObject, ref noObject, ref noObject); } } catch (Exception ex) { throw ex; } } public void CloseWebBrowser() { try { object noObject = string.Empty; object mm = "about:blank"; OpenPath = mm.ToString(); this.axWebBrowser1.Navigate2(ref mm, ref noObject, ref noObject, ref noObject, ref noObject); } catch (Exception ex) { throw ex; } } [DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID); // 结束 Excel 进程 public static void KillExcel(Excel.Application excel) { IntPtr t = new IntPtr(excel.Hwnd); int k = 0; GetWindowThreadProcessId(t, out k); System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); p.Kill(); } private OfficeType curType = OfficeType.OTHER; /// <summary> /// 赋值当前打开的对象 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e) { try { curType = CheckTypeByPath(); Document = axWebBrowser1.GetType().InvokeMember("Document", System.Reflection.BindingFlags.GetProperty, null, axWebBrowser1, null); if (openComplete != null) { openComplete(Document, curType); } } catch (Exception ex) { throw ex; } } /// <summary> /// 获取打开的文件类型 /// </summary> /// <returns></returns> public OfficeType CheckTypeByPath() { try { OfficeType offtype = OfficeType.OTHER; string type = Path.GetExtension(OpenPath); if (type.Equals(".xlsx") || type.Equals(".xls")) { offtype = OfficeType.EXCEL; } else if (type.Equals(".pptx") || type.Equals(".ppt")) { offtype = OfficeType.PPT; } else if (type.Equals(".docx") || type.Equals(".doc")) { offtype = OfficeType.WORD; } return offtype; } catch (Exception ex) { throw ex; } } /// <summary> /// 当前打开的对象 excel=workbook ppt=presiontation word=document /// </summary> public object Document; /// <summary> /// 设置是否显示工具菜单 /// </summary> /// <param name="showorhide"></param> /// <returns></returns> public void ToolBar(bool showorhide) { try { if (curType == OfficeType.OTHER) { return; } //显示菜单 if (showorhide) { axWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER); } else { axWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_PROMPTUSER); } this.axWebBrowser1.Refresh2(); } catch (Exception ex) { throw ex; } } } /// <summary> /// 当前打开的文件类型 /// </summary> public enum OfficeType { EXCEL, PPT, WORD, OTHER } }
Landy_cc 2014-05-19
  • 打赏
  • 举报
回复
不知道你的源码是什么,但是,如果你还是打不开,可以试一下下面的方法:添加一下文件过滤: openFileileDialog.Filter = "Office Documents(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt"; 另外引用一下excel的dll(这个你应该已经引用过了,如果你想对excel操作的话) 路径:C:\Program Files (x86)\Microsoft Visual Studio 11.0\Visual Studio Tools for Office\PIA\Office14\Microsoft.Office.Interop.Excel.dll 总之我这边用webBroswer打开一个文件,另外一个文件是能编辑滴……
Landy_cc 2014-05-19
  • 打赏
  • 举报
回复
不知道楼主那边为什么不能编辑,我试了一下用webBroswer打开一个Excel,然后再新建一个excel是完全能编辑的……,另外我用的VS版本是vs2012,不知道跟版本有没有问题,但是应该没问题吧……

110,549

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧