2017-08-15 73 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副本后,程序创建了所有的骨形态发生蛋白。奇怪,我很抱歉,如果这不是一个很大的答案,但这解决了我的问题!

相关问题