我的工作場所的可視化管理委員會使用Excel電子表格和許多工作表在電視上填充VMB。這些工作表中有許多圖表。在VB中我不會工作太多,所以請耐心等待。從VB.net中的Excel工作表導出ChartObject時的空bmp文件
我確信我的問題是因爲程序試圖訪問的圖表,字面上在彈出的Excel表格中不可見。我可能只是不知道我在說什麼,但這似乎是一種獲取和顯示數據的可怕方式。但我應該修復它。下面是在屏幕上彈出的片(我已經刪除了一些信息隱私的原因):
下面是當它試圖導出一個圖表,是不是在Excel中可見正在創建的BMP的例子窗口: 從我的研究中,我發現許多人通過在導出圖表對象之前激活圖表對象來解決此問題。我試圖在這裏做到這一點,但一個異常被拋出。這裏是代碼的圖表和出口處理,使骨形成蛋白,都應該駐留在文件夾中的所有部分:
Dim xlApp As Excel.Application
Dim xlWorkBooks As Excel.Workbooks
Dim xlWorkBook As Excel.Workbook
Dim xlWorkSheets As Excel.Sheets
Dim xlWorkSheet As Excel.Worksheet
xlApp = New Excel.Application
xlApp.Visible = True
xlWorkBooks = xlApp.Workbooks
xlWorkBook = xlWorkBooks.Open(ScoreCard)
xlWorkSheets = xlWorkBook.Sheets
For x As Integer = 1 To xlWorkSheets.Count
xlWorkSheet = CType(xlWorkSheets(x), Excel.Worksheet)
If xlWorkSheet.Name = My.Settings.Org Then
xlWorkSheet.ChartObjects(2).chart.Export(Filename:=path + "\Documents\OnTimeDelivery.bmp", FilterName:="BMP")
picOnTimeDelivery.Image = New System.Drawing.Bitmap(path + "\Documents\OnTimeDelivery.bmp")
xlWorkSheet.ChartObjects(3).chart.Export(Filename:=path + "\Documents\Quality.bmp", FilterName:="BMP")
picQuality.Image = New System.Drawing.Bitmap(path + "\Documents\Quality.bmp")
xlWorkSheet.ChartObjects(1).chart.Export(Filename:=path + "\Documents\NoDemandInventory.bmp", FilterName:="BMP")
picNoDemandInventory.Image = New System.Drawing.Bitmap(path + "\Documents\NoDemandInventory.bmp")
xlWorkSheet.ChartObjects(7).chart.Export(Filename:=path + "\Documents\ExcessInventory.bmp", FilterName:="BMP")
picExcessInventory.Image = New System.Drawing.Bitmap(path + "\Documents\ExcessInventory.bmp")
xlWorkSheet.ChartObjects(4).chart.Export(Filename:=path + "\Documents\Freight.bmp", FilterName:="BMP")
picFreight.Image = New System.Drawing.Bitmap(path + "\Documents\Freight.bmp")
xlWorkSheet.ChartObjects(5).chart.Export(Filename:=path + "\Documents\ShortagesByStart.bmp", FilterName:="BMP")
picShortagesByStart.Image = New System.Drawing.Bitmap(path + "\Documents\ShortagesByStart.bmp")
xlWorkSheet.ChartObjects(6).chart.Export(Filename:=path + "\Documents\ShortagesRootCause.bmp", FilterName:="BMP")
picShortagesRootCause.Image = New System.Drawing.Bitmap(path + "\Documents\ShortagesRootCause.bmp")
End If
Runtime.InteropServices.Marshal.FinalReleaseComObject(xlWorkSheet)
Next
xlWorkBook.Close()
xlApp.UserControl = True
xlApp.Quit()
'Close connection to excel sheet
MyConnection.Close()
程序崩潰,試圖建立
picFreight.Image = New System.Drawing.Bitmap(path + "\Documents\Freight.bmp")
時拋出一個無效的參數異常
,因爲我的文檔文件夾中的Freight.bmp是一個0kb文件。如果我更改下一個加載的映像(註釋掉,並嘗試加載ShortagesByStart.bmp),則會出於同樣的原因崩潰。過去這一點的所有圖表都有一個共同點,它們在屏幕上不可見。儘管如此,這對我來說似乎是一個愚蠢的理由。肯定這樣的事情不會引起問題!
首先,我試圖激活xlWorkSheet
xlWorkSheet.Activate()
但什麼也沒有改變。
所以,我想通過出口語句之前加入
xlWorkSheet.ChartObjects(2).chart.Activate()
xlWorkSheet.ChartObjects(3).chart.Activate()
xlWorkSheet.ChartObjects(1).chart.Activate()
xlWorkSheet.ChartObjects(7).chart.Activate()
xlWorkSheet.ChartObjects(4).chart.Activate()
所以,在這一點上,我卡住了。如何正確激活工作表中的圖表對象?也許還有另一個問題導致了這一點。
當您嘗試激活其圖表對象時,似乎工作表可能不活動?這會在VBA中引發一個錯誤 - 就像你所得到的那樣,這是一個「COMException」的託管代碼。 –
在嘗試圖表對象激活之前,我讓線程休眠了5秒鐘,但仍拋出異常。 excel窗口已經啓動並完成了加載,如果這就是你的意思是主動的。即使在睡眠之前調用xlWorkSheet.Activate()之後。感謝您的評論! –
不需要睡覺線程,* *不會改變任何東西。通過「主動」,我的意思是你**必須在你嘗試'在任何工作表對象上激活()'*任何*(不管它是'ChartObject'還是'Range ' - 儘管你通常不想*激活一個'範圍')。 –