从VB.net中的Excel工作表导出ChartObject时清空bmp文件

时间:2017-08-15 20:19:17

标签: excel vb.net vsto

我工作场所的可视化管理委员会使用excel电子表格,其中包含许多表格,以便在电视上填充VMB。这些表格中有许多图表。我不会在VB中工作很多,所以请耐心等待。

我确信我的问题是因为程序试图访问的图表,实际上在弹出的Excel工作表中看不到。我可能只是不知道我在说什么,但这似乎是获取和显示数据的可怕方式。但我应该修复它。这是屏幕上弹出的表格(出于隐私原因,我删除了一些信息): enter image description here

以下是尝试导出在Excel窗口中不可见的图表时创建的bmp的示例: enter image description here 从我的研究中,我发现许多人已经通过在导出之前激活图表对象来解决这个问题。我试图在这里做到这一点,但抛出异常。以下是处理图表和导出的整个代码段,以生成应该驻留在Documents文件夹中的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()

但这没有改变。

所以我尝试通过添加

来激活单个ChartObjects
            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()

在导出语句之前。这实际上引发了一个例外:enter image description here

所以,此时我被困住了。如何正确激活工作表中的图表对象?也许还有另一个问题导致了这一点。

1 个答案:

答案 0 :(得分:0)

因此,解决方案是在我们想要运行VMB的任何PC上更新Microsoft Office。 Corporate创建此Excel电子表格,其中包含该程序试图显示的数据。最终,创建此Excel工作表的人获得了更新版本的Excel,从而创建了一个.xlxs文件。

老实说,我不知道为什么电子表格在ReadOnly模式下成功打开,但我认为Office 2007和2010版本没有完全支持。在PC上升级办公室副本后,程序创建了所有的bmps 。奇怪,我很抱歉,如果这对其他人来说不是很好,但这解决了我的问题!