2017-08-15 72 views
0

我的工作場所的可視化管理委員會使用Excel電子表格和許多工作表在電視上填充VMB。這些工作表中有許多圖表。在VB中我不會工作太多,所以請耐心等待。從VB.net中的Excel工作表導出ChartObject時的空bmp文件

我確信我的問題是因爲程序試圖訪問的圖表,字面上在彈出的Excel表格中不可見。我可能只是不知道我在說什麼,但這似乎是一種獲取和顯示數據的可怕方式。但我應該修復它。下面是在屏幕上彈出的片(我已經刪除了一些信息隱私的原因): enter image description here

下面是當它試圖導出一個圖表,是不是在Excel中可見正在創建的BMP的例子窗口: enter image description here 從我的研究中,我發現許多人通過在導出圖表對象之前激活圖表對象來解決此問題。我試圖在這裏做到這一點,但一個異常被拋出。這裏是代碼的圖表和出口處理,使骨形成蛋白,都應該駐留在文件夾中的所有部分:

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() 

以激活個人ChartObjects。這實際上是一個例外:enter image description here

所以,在這一點上,我卡住了。如何正確激活工作表中的圖表對象?也許還有另一個問題導致了這一點。

+1

當您嘗試激活其圖表對象時,似乎工作表可能不活動?這會在VBA中引發一個錯誤 - 就像你所得到的那樣,這是一個「COMException」的託管代碼。 –

+0

在嘗試圖表對象激活之前,我讓線程休眠了5秒鐘,但仍拋出異常。 excel窗口已經啓動並完成了加載,如果這就是你的意思是主動的。即使在睡眠之前調用xlWorkSheet.Activate()之後。感謝您的評論! –

+1

不需要睡覺線程,* *不會改變任何東西。通過「主動」,我的意思是你**必須在你嘗試'在任何工作表對象上激活()'*任何*(不管它是'ChartObject'還是'Range ' - 儘管你通常不想*激活一個'範圍')。 –

回答

0

因此,解決方案是在任何想要運行VMB的PC上更新Microsoft Office。 Corporate使用該程序試圖顯示的數據創建此Excel電子表格。最終,創建此Excel表的人得到了更新版本的Excel,它創建了一個.xlxs文件。

我真的不知道爲什麼電子表格在ReadOnly模式下成功打開,但我認爲Office 2007和2010沒有完全支持。在PC上升級Office副本後,程序創建了所有的骨形態發生蛋白。奇怪,我很抱歉,如果這不是一個很大的答案,但這解決了我的問題!

相關問題