Vb.net 当值为N/A时,如何使图表不显示任何内容
我创建了一个VB.net程序来显示图表。数据取自Excel工作簿。到目前为止,我让它打开并在图表上显示数据,但我在Excel中的一些数据显示为#N/A。N/A的目的是在图表上不显示任何内容。以下是我使用Excel显示图表时的外观: 在我的工作簿中,我用来显示必要点的公式是=IF($B2>=$G2,$B2,NA())。如上图所示,当存在除N/A以外的值时,仅显示红色点。当数据为N/A时,图表上不显示任何内容 使用VB程序,它可以显示所有内容,甚至是值N/A。下面是它的外观: 完全搞砸了。我不知道如何去掉其他点,只显示第一幅图中的点。 这是我的密码:Vb.net 当值为N/A时,如何使图表不显示任何内容,vb.net,excel,charts,Vb.net,Excel,Charts,我创建了一个VB.net程序来显示图表。数据取自Excel工作簿。到目前为止,我让它打开并在图表上显示数据,但我在Excel中的一些数据显示为#N/A。N/A的目的是在图表上不显示任何内容。以下是我使用Excel显示图表时的外观: 在我的工作簿中,我用来显示必要点的公式是=IF($B2>=$G2,$B2,NA())。如上图所示,当存在除N/A以外的值时,仅显示红色点。当数据为N/A时,图表上不显示任何内容 使用VB程序,它可以显示所有内容,甚至是值N/A。下面是它的外观: 完全搞砸了。我不知
Imports System.Reflection
Imports Excel = Microsoft.Office.Interop.Excel
'Add reference Assemblies, Framework, System.Windows.Forms.DataVisualization
Imports System.Windows.Forms.DataVisualization.Charting
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim excelApp As Excel.Application
Dim excelWB As Excel.Workbook
Dim excelWS As Excel.Worksheet
'Dim FNameRng As Excel.Range
Dim AveRng As Excel.Range
Dim A_CLRng As Excel.Range
Dim A_UCLRng As Excel.Range
Dim A_LCLRng As Excel.Range
Dim A_GTRng As Excel.Range
Dim A_LTRng As Excel.Range
'Dim FNameArry As System.Array
Dim AveArry As System.Array
Dim A_CLArry As System.Array
Dim A_UCLArry As System.Array
Dim A_LCLArry As System.Array
Dim A_GTArry As System.Array
Dim A_LTArry As System.Array
excelApp = CreateObject("Excel.Application")
excelApp.Visible = False
'Open the Workbook
excelWB = excelApp.Workbooks.Open("C:\Users\Joesph\Documents\Charts\Control Limit\Test 18x17 - 10 mil stop.xlsx")
excelWS = excelApp.Sheets("10 mil stop")
'Set the Range for File Name
'FNameRng = excelWS.Range("A2", excelWS.Range("A2").End(Excel.XlDirection.xlDown))
'Set the Range for Average Data
AveRng = excelWS.Range("B2", excelWS.Range("B2").End(Excel.XlDirection.xlDown))
A_CLRng = excelWS.Range("F2", excelWS.Range("F2").End(Excel.XlDirection.xlDown))
A_UCLRng = excelWS.Range("G2", excelWS.Range("G2").End(Excel.XlDirection.xlDown))
A_LCLRng = excelWS.Range("H2", excelWS.Range("H2").End(Excel.XlDirection.xlDown))
A_GTRng = excelWS.Range("I2", excelWS.Range("I2").End(Excel.XlDirection.xlDown))
A_LTRng = excelWS.Range("J2", excelWS.Range("J2").End(Excel.XlDirection.xlDown))
'Read in the values of a range of cells
'FNameArry = CType(FNameRng.Value, System.Array)
AveArry = CType(AveRng.Value, System.Array)
A_CLArry = CType(A_CLRng.Value, System.Array)
A_UCLArry = CType(A_UCLRng.Value, System.Array)
A_LCLArry = CType(A_LCLRng.Value, System.Array)
A_GTArry = CType(A_GTRng.Value, System.Array)
A_LTArry = CType(A_LTRng.Value, System.Array)
'Set the chart title
Me.CenterToScreen()
Me.WindowState = FormWindowState.Maximized
Chart1.Titles.Add("Title1")
Chart1.Titles(0).Text = "Average"
Chart1.Titles(0).Font = New Font("Garamond", 24, FontStyle.Bold)
Chart1.ChartAreas(0).AxisX.LabelStyle.Angle = -90
'Looping through the AveArry
For x As Integer = 1 To AveArry.GetUpperBound(0)
For y As Integer = 1 To AveArry.GetUpperBound(1)
Dim Average As Object = AveArry(x, y)
Chart1.Series("Average").Points.Add(Average)
Next y
Next x
'Looping through the A_CLArry
For x As Integer = 1 To A_CLArry.GetUpperBound(0)
For y As Integer = 1 To A_CLArry.GetUpperBound(1)
Dim AveCL As Object = A_CLArry(x, y)
Chart1.Series("Mean of Means").Points.Add(AveCL)
Next y
Next x
'Looping through the A_UCLArry
For x As Integer = 1 To A_UCLArry.GetUpperBound(0)
For y As Integer = 1 To A_UCLArry.GetUpperBound(1)
Dim AveUCL As Object = A_UCLArry(x, y)
Chart1.Series("UCL (3-Sigma)").Points.Add(AveUCL)
Next y
Next x
'Looping through the A_LCLArry
For x As Integer = 1 To A_LCLArry.GetUpperBound(0)
For y As Integer = 1 To A_LCLArry.GetUpperBound(1)
Dim AveLCL As Object = A_LCLArry(x, y)
Chart1.Series("LCL (3-Sigma)").Points.Add(AveLCL)
Next y
Next x
'Looping through the A_GTArry
For x As Integer = 1 To A_GTArry.GetUpperBound(0)
For y As Integer = 1 To A_GTArry.GetUpperBound(1)
Dim AveGT As Object = A_GTArry(x, y)
For iPt = 1 To Chart1.Series("GT_UCL").Points.Count
If IsNumeric(A_LTArry(iPt, 1)) Then
'Chart1.Series("GT_UCL").Points.Add(AveGT)
Chart1.Series("GT_UCL").Points(iPt).MarkerStyle = MarkerStyle.Diamond
Else
Chart1.Series("GT_UCL").Points(iPt).MarkerStyle = MarkerStyle.None
End If
Next
Next y
Next x
'Looping through the A_LTArry
For x As Integer = 1 To A_LTArry.GetUpperBound(0)
For y As Integer = 1 To A_LTArry.GetUpperBound(1)
Dim AveLT As Object = A_LTArry(x, y)
For iPt = 1 To Chart1.Series("LT_LCL").Points.Count
If IsNumeric(A_LTArry(iPt, 1)) Then
'Chart1.Series("LT_LCL").Points.Add(AveLT)
Chart1.Series("LT_UCL").Points(iPt).MarkerStyle = MarkerStyle.Diamond
Else
Chart1.Series("LT_LCL").Points(iPt).MarkerStyle = MarkerStyle.None
End If
Next
Next y
Next x
excelApp.Workbooks.Close()
End Sub
End Class
如有任何建议,将不胜感激。谢谢大家!
编辑:
我编辑了最后两个循环的代码。它变得更好了,但现在它不会显示红色点。是订单错了还是怎么了?下面是它现在的样子:
看看Jon Peltier几天前发布的这两个链接:
是否将点显示为两个独立的序列,一个用于所有数据,另一个仅用于异常值?看起来,您的限制是根据异常值计算的 下面是一个古老的示例,演示如何在图表中突出显示最小值和最大值:。概念是一样的:在主系列中绘制所有点,然后仅在需要的地方覆盖不同格式的点