引发的异常:EPPlus.dll中的'System.IndexOutOfRangeException'

问题描述:

使用Visual Studio Community 2017和AdvancedHMI创建基于PC的HMI应用程序。我有几个运行没有问题,所以移动到新的东西。 在每一行我有7个数组(每个数组500个实数),并且想每天捕获这些数据并保存到Excel。 使用EPPlus和AdvancedHMI我有以下代码。引发的异常:EPPlus.dll中的'System.IndexOutOfRangeException'

Private Sub DataSubscriber1_DataChanged(sender As Object, e As Drivers.Common.PlcComEventArgs) Handles DataSubscriber1.DataChanged 
    If e.ErrorId = 0 AndAlso e.Values.Count > 0 AndAlso e.Values(0) = "True" Then 
     Console.WriteLine("About to read the data") 
     Dim MyValues() As String = EthernetIPforCLXCom1.Read("VCell_1A_FES_Cycle_Average[0]", 500) 
     Console.WriteLine(MyValues.Length & "elements read.") 

     '* Transfer the values to Excel 
     Using ExcelPackage As New OfficeOpenXml.ExcelPackage(New System.IO.FileInfo("c:\Data.xlsx")) 
      For I = 0 To MyValues.Length - 1 
       Console.WriteLine("Element " & I & "=" & MyValues(I)) 
       ExcelPackage.Workbook.Worksheets(1).Cells(1, I + 1).Value = MyValues(I) 

      Next 
     End Using 
    End If 
End Sub 

运行这个并触发我的标签值来执行数据订户我得到以下。

关于读取数据

500Elements读取。

元素0 = 87.945

抛出异常:“System.IndexOutOfRangeException”在EPPlus.dll

一切看起来像它应该工作,但我是很新的VB或任何类型的编码是的物。我的特长'是PLC梯形逻辑。

谢谢。

+0

尝试写入的测试值(而不是从数组)前行的Excel文件'*转移值Excel'。你仍然得到超出范围的异常?如果没有,请停止将值写入循环中的Excel文件,并将值写入控制台。那样有用吗? –

+0

谢谢,当我今晚进入工作时,我会给它一个镜头。 – Bobby5184

+0

我能够将500标签阵列写入控制台而没有问题。我修改了我的循环,现在一切正常。谢谢。 – Bobby5184

这是我的工作。 Datascriber在PLC中有一个触发标签。一旦触发它收集数组数据,所有500个元素。创建一个新的Excel文件,并将数据写入到列A,细胞1-500

Private Sub DataSubscriber1_DataChanged(sender As Object, e As Drivers.Common.PlcComEventArgs) Handles DataSubscriber1.DataChanged 

    If e.ErrorId = 0 AndAlso e.Values.Count > 0 AndAlso e.Values(0) = "True" Then 
     Console.WriteLine("About to read the data") 
     Dim MyValues() As String = EthernetIPforCLXCom1.Read("VCell_1A_FES_Cycle_Average[0]", 500) 
     Console.WriteLine(MyValues.Length & "elements read.") 

     Transfer the values to Excel 

     Using ExcelPackage As New OfficeOpenXml.ExcelPackage(New IO.FileInfo("C:\Data.xlsx")) 
      ExcelPackage.Workbook.Worksheets.Add("test") 
      For Index = 0 To MyValues.Length - 1 
       Console.WriteLine("Element " & Index & "=" & MyValues(Index)) 
       Dim ws As OfficeOpenXml.ExcelWorksheet = ExcelPackage.Workbook.Worksheets(1) 
       Console.WriteLine("Worksheet OK") 
       Dim CellNum As String = "A" & (Index + 1) 
       ws.Cells(CellNum).Value = MyValues(Index) 
      Next 
      ExcelPackage.Save() 
     End Using 
    End If 
End Sub