VB 2010中Excel文件处理的一个奇怪问题
別說VB.net過時(shí),我從VB3.0開始就在用,一直到最新的VS2015,從來也沒有放棄過VB.net,喜歡就是喜歡,之所以這篇日志寫的是2010,是因?yàn)榧依飛indows 7的機(jī)器裝的就是2010,這些年也就一直用下來,并沒有裝高版本。單位windows 8的機(jī)器,手上還有臺(tái)Surface Pro 4,裝的VS2015~
言歸正傳~
【癥狀】
? ? ?最近要寫一個(gè)小應(yīng)用,其中要改寫excel模版文件中的數(shù)據(jù),excel模版比較復(fù)雜,通過修改其中的數(shù)據(jù),直接在excel中生成餅圖、甘特圖等等。在win7,VB2010環(huán)境下寫的第一版,沒有任何問題。其中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("導(dǎo)出數(shù)據(jù)")
? ? ? ? ? ? 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中做好的模版文件,運(yùn)行時(shí)先制作一個(gè)副本然后再修改。以上代碼在windows7,vb2010中一切正常。編譯生成后拷貝到windows 8的機(jī)器上,運(yùn)行,在最后保存時(shí)出現(xiàn)崩潰錯(cuò)誤:
無法將類型為Microsoft.office.interop.Excel.ApplicationClass的COM對象強(qiáng)制軟件為Microsoft.office.interop.Excel._Application巴拉巴拉巴拉
【找問題】
搜索后發(fā)現(xiàn)大多是認(rèn)為引用的com對象問題或者excel版本問題,還有什么wps問題亂七八糟的一大堆,也有一些所謂的解決方法,試了以后無效。崩潰依舊。
以為自己的電腦有問題,又拷貝到windows 10的surface pro 4上運(yùn)行。這次崩潰的晚一點(diǎn),出來的也不是什么類型問題,不過總之還是崩潰。
打開VS把保存文件的語句EX.Save()注釋掉,重新生成運(yùn)行,沒有出錯(cuò),太TND奇怪了不是。
【解決】
由于趕時(shí)間交貨,在研究了兩天后,只是了解到問題出在保存文件時(shí)文件是只讀狀態(tài),也無心多研究,用捷徑解決吧。
===================
? ? ? ? ? ??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("導(dǎo)出數(shù)據(jù)")
? ? ? ? ? ? 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
=====================
總結(jié)
以上是生活随笔為你收集整理的VB 2010中Excel文件处理的一个奇怪问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐阅读《大话设计模式》的策划编辑陈禹成
- 下一篇: 架构师速成4.6-软技能和硬技能