从 excel sheet in VB.net 中导出 ChartObject 时为空 bmp 文件
Empty bmp file when exporting ChartObject from excel sheet in VB.net
我工作场所的可视化管理板使用 excel 传播sheet,其中有许多 sheet,用于在电视上填充 VMB。这些 sheet 中有很多图表。我在 VB 工作不多,所以请多多包涵。
我确信我的问题是因为程序试图访问的图表在弹出的 excel sheet 中确实不可见。我可能只是不知道我在说什么,但这似乎是一种获取和显示数据的糟糕方式。但我应该修复它。这是屏幕上弹出的 sheet(出于隐私原因,我删除了一些信息):
以下是在尝试导出在 excel window 中不可见的图表时创建的 bmp 示例:
根据我的研究,我发现许多人通过在导出之前激活图表对象来解决这个问题。我试图在这里这样做,但抛出了异常。以下是处理图表和导出的整个代码部分,以制作应该位于文档文件夹中的 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()
在导出语句之前。这实际上引发了一个异常:
所以,在这一点上我被卡住了。如何正确激活 worksheet 中的图表对象?可能还有其他问题导致此问题。
因此解决方案是在我们想要从中 运行 VMB 的任何 PC 上更新 Microsoft Office。 Corporate 使用此程序试图显示的数据创建此 Excel 传播 sheet。最终,创建此 excel sheet 的人获得了更新版本的 Excel,它创建了一个 .xlxs 文件。
老实说,我不知道为什么传播sheet在只读模式下成功打开,但我想那里对Office 2007和2010没有完全支持。在PC上升级office副本后该程序创建了所有 bmp。很奇怪,如果这对其他人来说不是一个很好的答案,我很抱歉,但这解决了我的问题!
我工作场所的可视化管理板使用 excel 传播sheet,其中有许多 sheet,用于在电视上填充 VMB。这些 sheet 中有很多图表。我在 VB 工作不多,所以请多多包涵。
我确信我的问题是因为程序试图访问的图表在弹出的 excel sheet 中确实不可见。我可能只是不知道我在说什么,但这似乎是一种获取和显示数据的糟糕方式。但我应该修复它。这是屏幕上弹出的 sheet(出于隐私原因,我删除了一些信息):
以下是在尝试导出在 excel window 中不可见的图表时创建的 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()
在导出语句之前。这实际上引发了一个异常:
所以,在这一点上我被卡住了。如何正确激活 worksheet 中的图表对象?可能还有其他问题导致此问题。
因此解决方案是在我们想要从中 运行 VMB 的任何 PC 上更新 Microsoft Office。 Corporate 使用此程序试图显示的数据创建此 Excel 传播 sheet。最终,创建此 excel sheet 的人获得了更新版本的 Excel,它创建了一个 .xlxs 文件。
老实说,我不知道为什么传播sheet在只读模式下成功打开,但我想那里对Office 2007和2010没有完全支持。在PC上升级office副本后该程序创建了所有 bmp。很奇怪,如果这对其他人来说不是一个很好的答案,我很抱歉,但这解决了我的问题!