VB 2010中Excel文件处理的一个奇怪问题
2016-04-03 22:31
501 查看
别说VB.net过时,我从VB3.0开始就在用,一直到最新的VS2015,从来也没有放弃过VB.net,喜欢就是喜欢,之所以这篇日志写的是2010,是因为家里windows 7的机器装的就是2010,这些年也就一直用下来,并没有装高版本。单位windows 8的机器,手上还有台Surface Pro 4,装的VS2015~
言归正传~
【症状】
最近要写一个小应用,其中要改写excel模版文件中的数据,excel模版比较复杂,通过修改其中的数据,直接在excel中生成饼图、甘特图等等。在win7,VB2010环境下写的第一版,没有任何问题。其中excel操作部分是这样的:
===================
Dim Ex As Microsoft.Office.Interop.Excel.Application
Dim ExSheet As Microsoft.Office.Interop.Excel.Worksheet
Ex = New Microsoft.Office.Interop.Excel.Application
ExSheet = Ex.Workbooks.Open(AppPath & "data\" & Filename2).Sheets("导出数据")
ExSheet.Activate()
Ex.Visible = False
……
中间略
……
Ex.DisplayAlerts = False
Ex.Save()
Ex.Quit()
If Not Ex Is Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(Ex)
Ex = Nothing
GC.Collect()
End If
=====================
其中open的是事先在excel中做好的模版文件,运行时先制作一个副本然后再修改。以上代码在windows7,vb2010中一切正常。编译生成后拷贝到windows 8的机器上,运行,在最后保存时出现崩溃错误:
无法将类型为Microsoft.office.interop.Excel.ApplicationClass的COM对象强制软件为Microsoft.office.interop.Excel._Application巴拉巴拉巴拉
【找问题】
搜索后发现大多是认为引用的com对象问题或者excel版本问题,还有什么wps问题乱七八糟的一大堆,也有一些所谓的解决方法,试了以后无效。崩溃依旧。
以为自己的电脑有问题,又拷贝到windows 10的surface pro 4上运行。这次崩溃的晚一点,出来的也不是什么类型问题,不过总之还是崩溃。
打开VS把保存文件的语句EX.Save()注释掉,重新生成运行,没有出错,太TND奇怪了不是。
【解决】
由于赶时间交货,在研究了两天后,只是了解到问题出在保存文件时文件是只读状态,也无心多研究,用捷径解决吧。
===================
Dim Ex As Microsoft.Office.Interop.Excel.Application
Dim ExSheet As Microsoft.Office.Interop.Excel.Worksheet
Ex = New Microsoft.Office.Interop.Excel.Application
ExSheet = Ex.Workbooks.Open(AppPath & "data\" & Filename2).Sheets("导出数据")
ExSheet.Activate()
Ex.Visible = False
……
中间略
……
Ex.DisplayAlerts = False
Ex.ActiveWorkbook.SaveAs(AppPath & "data\" & Filename3, 1)
Ex.Quit()
If Not Ex Is Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(Ex)
Ex = Nothing
GC.Collect()
End If
If IO.File.Exists(AppPath & "data\" & Filename2) Then
IO.File.Delete(AppPath & "data\" & Filename2)
End If
=====================
言归正传~
【症状】
最近要写一个小应用,其中要改写excel模版文件中的数据,excel模版比较复杂,通过修改其中的数据,直接在excel中生成饼图、甘特图等等。在win7,VB2010环境下写的第一版,没有任何问题。其中excel操作部分是这样的:
===================
Dim Ex As Microsoft.Office.Interop.Excel.Application
Dim ExSheet As Microsoft.Office.Interop.Excel.Worksheet
Ex = New Microsoft.Office.Interop.Excel.Application
ExSheet = Ex.Workbooks.Open(AppPath & "data\" & Filename2).Sheets("导出数据")
ExSheet.Activate()
Ex.Visible = False
……
中间略
……
Ex.DisplayAlerts = False
Ex.Save()
Ex.Quit()
If Not Ex Is Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(Ex)
Ex = Nothing
GC.Collect()
End If
=====================
其中open的是事先在excel中做好的模版文件,运行时先制作一个副本然后再修改。以上代码在windows7,vb2010中一切正常。编译生成后拷贝到windows 8的机器上,运行,在最后保存时出现崩溃错误:
无法将类型为Microsoft.office.interop.Excel.ApplicationClass的COM对象强制软件为Microsoft.office.interop.Excel._Application巴拉巴拉巴拉
【找问题】
搜索后发现大多是认为引用的com对象问题或者excel版本问题,还有什么wps问题乱七八糟的一大堆,也有一些所谓的解决方法,试了以后无效。崩溃依旧。
以为自己的电脑有问题,又拷贝到windows 10的surface pro 4上运行。这次崩溃的晚一点,出来的也不是什么类型问题,不过总之还是崩溃。
打开VS把保存文件的语句EX.Save()注释掉,重新生成运行,没有出错,太TND奇怪了不是。
【解决】
由于赶时间交货,在研究了两天后,只是了解到问题出在保存文件时文件是只读状态,也无心多研究,用捷径解决吧。
===================
Dim Ex As Microsoft.Office.Interop.Excel.Application
Dim ExSheet As Microsoft.Office.Interop.Excel.Worksheet
Ex = New Microsoft.Office.Interop.Excel.Application
ExSheet = Ex.Workbooks.Open(AppPath & "data\" & Filename2).Sheets("导出数据")
ExSheet.Activate()
Ex.Visible = False
……
中间略
……
Ex.DisplayAlerts = False
Ex.ActiveWorkbook.SaveAs(AppPath & "data\" & Filename3, 1)
Ex.Quit()
If Not Ex Is Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(Ex)
Ex = Nothing
GC.Collect()
End If
If IO.File.Exists(AppPath & "data\" & Filename2) Then
IO.File.Delete(AppPath & "data\" & Filename2)
End If
=====================
相关文章推荐
- 使用Python生成Excel格式的图片
- Excel 曝出 Power Query 安全漏洞,1.2 亿用户易受远程 DDE 攻击
- VBA将excel数据表生成JSON文件
- excel vba 限制工作表的滚动区域代码
- excel vba 高亮显示当前行代码
- VB.NET校验字符串函数
- SQL 导入导出Excel数据的语句
- VB.NET实现验证信用卡卡号
- 文本、Excel、Access数据导入SQL Server2000的方法
- C#导出数据到Excel文件的方法
- Vbscript生成Excel报表的常用操作总结
- C#实现导入CSV文件到Excel工作簿的方法
- C#基于NPOI生成具有精确列宽行高的Excel文件的方法
- 总提示[Microsoft][ODBC Excel Driver] 数值字段溢出官方解决方法
- C#将Sql数据保存到Excel文件中的方法
- VB.NET中TextBox的智能感知应用实例
- VC6.0实现读取Excel数据的方法
- C#定制Excel界面并实现与数据库交互的方法
- 把excel表格里的数据导入sql数据库的两种方法
- access dbase excel foxpro 数据库浏览器V3.1版 下载