发现今天回答问题的人多,高分给个难题

龍月 2010-09-01 04:00:13
昨天发的那个EXCEL 问题 还是没有解决
原帖
只要是用了 axwebroser 控件 来读取 excel , 实现 多窗体 加载不同 excel
大家用过的人都知道 axwebroser 加载 excel 后 会 卡死 其他 axwebroser 控件上已经打开的excel 和 系统里面office 打开的excel 也会卡, 最后打开的 excel 那个控件 不会卡死, 如果最后打开的是用 office 打开的, axwebroser 控件 就会卡死
这是比较 头疼的问题。
这个问题 我采用 动态销毁 axwebroser 控件 避免了 窗体间的卡死情况,我用的是tabcontrol 切换 窗体的。 每次切换就重新 new axwebroser 加载
但是 axwebroser 加载excel 后 产生一个excel.EXE 进程 每次销毁 axwebroser 控件后 进程就会关闭,如果 打开的office excel程序的话 也会关闭。 比较悲剧!

尝试不销毁 控件的话,每次打开同一个 excel 就会提示 保存,或者已经更改,最后 打开出错。
所以想 获得 excel 对象 得到里面的 workbook 关闭 之前的 xls 之后 在打开 这样就不提示 保存 或者 已经更新了,我是这样认为的。 可是 尝试了 很多方法,均不能 关闭 excel对象 中的 workbook,怎么释放都不行。 悲剧

我现在想问下 能不能 通过 EXCEL.EXE 的进程得到 excel 实例对象 之后 关闭 里面的 workbook 。

或者还有其他方法的 都可以 说说!
...全文
437 38 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
咿呀大河马 2010-09-02
  • 打赏
  • 举报
回复
共享代码 LZ !
qiuxin425 2010-09-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 ly_longyue 的回复:]
昨天发的那个EXCEL 问题 还是没有解决
原帖
只要是用了 axwebroser 控件 来读取 excel , 实现 多窗体 加载不同 excel
大家用过的人都知道 axwebroser 加载 excel 后 会 卡死 其他 axwebroser 控件上已经打开的excel 和 系统里面office 打开的excel 也会卡, 最后打开的 excel 那个控件 不会卡死, 如果最后打开……
[/Quote]

+1
龍月 2010-09-02
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 computerfox 的回复:]
你为什么要用webbrowser去加载excle,常见的有:
1、winform程序处理excel

2、b/s应用,方式处理excel

第一次遇到你这样在winform中通过webbrowser来处理excel的。
[/Quote]

主要是 嵌入在 winfrom 窗体上 打开 excel 在 窗体上,不能直接用 office打开 excel
兔子-顾问 2010-09-01
  • 打赏
  • 举报
回复
既然.net提供了WebBrowser,你为什么还要用activeX控件呢?
捷哥1999 2010-09-01
  • 打赏
  • 举报
回复
你把主要代码,例如你如何在webbrowser中加载excle等,贴出来,大家帮你看看。
捷哥1999 2010-09-01
  • 打赏
  • 举报
回复
你为什么要用webbrowser去加载excle,常见的有:
1、winform程序处理excel

2、b/s应用,方式处理excel

第一次遇到你这样在winform中通过webbrowser来处理excel的。
studentliudong 2010-09-01
  • 打赏
  • 举报
回复
关注下~
zhubo006 2010-09-01
  • 打赏
  • 举报
回复
楼主看这个 Office编程杂谈(4):在winform、asp.net中嵌入word/excel/ppt

http://www.17fx.net/jishu/dotnet-office/winform-qianru-word-excel-.aspx
龍月 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 wcl1988 的回复:]
你这个问题,我以前也遇到过,后来解决了。微软对于WinForm里打开office已经封装了对应的com组件,具体叫什么名字我忘记了,你到微软官网上去查看看。问题很简单,你想复杂啦~!
[/Quote]

帅哥 具体点~
wcl1988 2010-09-01
  • 打赏
  • 举报
回复
你这个问题,我以前也遇到过,后来解决了。微软对于WinForm里打开office已经封装了对应的com组件,具体叫什么名字我忘记了,你到微软官网上去查看看。问题很简单,你想复杂啦~!
yangxuesong001 2010-09-01
  • 打赏
  • 举报
回复
我给你一个工具,你可以下载试试看看能否解决你的问题:www.aduse.com.cn
龍月 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 zsblue 的回复:]
请用垃圾回收 GC.Collect();
[/Quote]

没用
zsblue 2010-09-01
  • 打赏
  • 举报
回复
请用垃圾回收 GC.Collect();
Mang_liu 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 ly_longyue 的回复:]

顶起
顶的 有分
[/Quote]

那我也顶一个```
龍月 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 wuzhicheng5 的回复:]
C# code


xlApp = new Microsoft.Office.Interop.Excel.Application();
//将新建的工作薄数量设为1
xlApp.SheetsInNewWorkbook = 1;
Workbooks workbooks = xlApp.Workbooks;

Workbook workbook = workbooks.Add(XlW……
[/Quote]
我这里 不是新建的 Excel.Application 是 获得 axwebroser 加载后 的 Excel.Application 自己生成的没用
wuzhicheng5 2010-09-01
  • 打赏
  • 举报
回复


xlApp = new Microsoft.Office.Interop.Excel.Application();
//将新建的工作薄数量设为1
xlApp.SheetsInNewWorkbook = 1;
Workbooks workbooks = xlApp.Workbooks;

Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
workbook.Sheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value);

Sheets sheets = workbook.Worksheets;

Worksheet worksheet = (Worksheet)sheets.get_Item(1);
string strTableExcel = _MyStatistics.X.Name;
//对象名称strTableExcel
worksheet.Name = strTableExcel;

龍月 2010-09-01
  • 打赏
  • 举报
回复
顶起
顶的 有分
shancheng44 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 louti 的回复:]
引用 1 楼 porschev 的回复:

友情帮顶。。呵呵。。不会。。。

昨天我也看你那帖了。。。

我也是
[/Quote]

我也是
龍月 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 cloudhsu 的回复:]
Microsoft 提供的编程示例只,用于说明不附带任何明示或暗示保证。这包括,但不限于对适销性或针对特定用途的适用性的暗示的担保。本文假定您熟悉演示了正在使用的编程语言以及用于创建和调试过程的工具。Microsoft 支持工程师可以帮助解释某个特定过程的功能,但他们不会修改这些示例以提供额外的功能或构建过程来满足您的具体要求。当您打开一个特定的工作簿时,请关闭所有其他工作簿,请按照下列步骤操作:……
[/Quote]

你试一下 axwebroser 就知道了
他获得的 excel 对象 不能关闭
云瑀 2010-09-01
  • 打赏
  • 举报
回复
Microsoft 提供的编程示例只,用于说明不附带任何明示或暗示保证。这包括,但不限于对适销性或针对特定用途的适用性的暗示的担保。本文假定您熟悉演示了正在使用的编程语言以及用于创建和调试过程的工具。Microsoft 支持工程师可以帮助解释某个特定过程的功能,但他们不会修改这些示例以提供额外的功能或构建过程来满足您的具体要求。当您打开一个特定的工作簿时,请关闭所有其他工作簿,请按照下列步骤操作:


创建一个新的工作簿并将其命名 Closetst.xls。
将下面的 Sub 过程复制到新模块工作表:
Sub Auto_Open()
' This sub will close all workbooks
' except the workbook in which the code is located.
Dim WkbkName As Object

On Error GoTo Close_Error
Application.ScreenUpdating = False

For Each WkbkName In Application.Workbooks()
If WkbkName.Name <> ThisWorkbook.Name Then WkbkName.Close
Next

' If everything runs all right, exit the sub.
Exit Sub

' Error handler.
Close_Error:
MsgBox Str(Err) & " " & Error()
Resume Next
End Sub


保存工作簿并将其关闭。
打开 Closetst.xls 以外的多个工作簿。
打开 Closetst.xls。请注意 Auto_Open Sub 过程运行,并关闭 Closetst.xls 除外的所有工作簿。
http://support.microsoft.com/kb/147742/zh-cn
加载更多回复(10)

111,097

社区成员

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

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

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