引发的异常: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梯形逻辑。
谢谢。
答
这是我的工作。 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
尝试写入的测试值(而不是从数组)前行的Excel文件'*转移值Excel'。你仍然得到超出范围的异常?如果没有,请停止将值写入循环中的Excel文件,并将值写入控制台。那样有用吗? –
谢谢,当我今晚进入工作时,我会给它一个镜头。 – Bobby5184
我能够将500标签阵列写入控制台而没有问题。我修改了我的循环,现在一切正常。谢谢。 – Bobby5184