Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 当值为N/A时,如何使图表不显示任何内容_Vb.net_Excel_Charts - Fatal编程技术网

Vb.net 当值为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。下面是它的外观: 完全搞砸了。我不知

我创建了一个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几天前发布的这两个链接:

是否将点显示为两个独立的序列,一个用于所有数据,另一个仅用于异常值?看起来,您的限制是根据异常值计算的

下面是一个古老的示例,演示如何在图表中突出显示最小值和最大值:。概念是一样的:在主系列中绘制所有点,然后仅在需要的地方覆盖不同格式的点