Arrays 具有n行和n列的动态数组

Arrays 具有n行和n列的动态数组,arrays,excel,escript,Arrays,Excel,Escript,我必须阅读一个excel,它可以有“n”行和“n”列,并将数据存储在一个数组中进行处理 例如: Author Book No Value ABC A 1 100 DEF D 2 20 我想将标题放在一个单独的数组中,将信息行放在另一个数组中 以下是我到目前为止的情况: 假设数据从excel工作表的第13行开始- var i, j, k ,l,m ,n; i=13; j=1, k=0; m=0; n=0; //

我必须阅读一个excel,它可以有“n”行和“n”列,并将数据存储在一个数组中进行处理

例如:

Author    Book    No    Value
ABC       A       1     100
DEF       D       2     20
我想将标题放在一个单独的数组中,将信息行放在另一个数组中

以下是我到目前为止的情况:

假设数据从excel工作表的第13行开始-

var i, j, k ,l,m ,n;
i=13; j=1, k=0; m=0; n=0;  // i represents the row and j represents excel column(A)
while(EApp.ActiveSheet.Cells(12,j).Value!="")
{
    j=j+1; // Counting the Number of Columns (Header)
}
j=j-1; //decrementing the counter j by 1
k=j;
while(j!=0)
{
    ArrField[j]=EApp.ActiveSheet.Cells(12,j).Value;
    j=j-1;
}
这就是我所尝试的,输出正如预期的那样,但是有更好的方法来编码吗?最好使用较小的变量

while(EApp.ActiveSheet.Cells(i,1).Value!="undefined") 
{
    m=k;
    j=0;
    ArrData[i]=new Array(m);
    while(m!=0)
    {                                       
        ArrData[n][j]=EApp.ActiveSheet.Cells(i,m).Value;
        m=m-1;
        j=j+1;
    }
    n=n+1;
    i=+1;
}
我还需要读取数组并将它们存储到另一个系统的相应字段中。我在这里有点迷路了

示例代码:(类似于此)

阵列输出:

Value,No,Book,Author (Header got in reverse order)

100,1,A,ABC,20,2,D,DEF (2 rows of Data also got in reverse order)

专家们有什么建议吗?

您可以很好地将csv用作动态数组。 下面是我的示例代码。我建议根据您的需要重新编写,并添加一些错误处理

以下是表格数据:

ID  AUTHOR  BOOK    NO  VALUE
1   ABC     A       1   100
2   DEFG    D       2   20
3   XYZ     Q       3   55
代码如下:

Sub test1()

    Dim arrayname As String
    Dim mytestW As Variant
    Dim mytestR As Variant '-->your array you can work with
    'give your array a arrayname = authorbook (for example)
    arrayname = "authorbook"

    mytestW = dataintoarray(arrayname)
    mytestR = AsArray(arrayname, 2) '-->get the second row
End Sub
以下是功能:

  Function dataintoarray(myarray As String) As Variant

  Dim res As Variant
  Dim wb As Workbook, ws As Worksheet
  Dim LastRow As Long, LastCol As Long
  Dim iRow As Integer, jCol As Integer
  Dim OutputFileNum As Integer
  Dim PathName As String
  Dim Line As String
      Line = ""

  Set wb = ThisWorkbook
  Set ws = wb.Worksheets("Sheet1")

  PathName = Application.ActiveWorkbook.Path
  OutputFileNum = FreeFile

  Open PathName & "\" & myarray & ".csv" For Output Lock Write As #OutputFileNum

  LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
  LastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

  For iRow = 1 To LastRow
      For jCol = 1 To LastCol
         Line = Line & ws.Cells(iRow, jCol).Value & ","
      Next jCol
      Print #OutputFileNum, Line
      Line = ""
  Next iRow

  Close OutputFileNum

  End Function


Function AsArray(myarray As String, index As Integer) As Variant

    Dim res As Variant
    Dim wb As Workbook, ws As Worksheet
    Dim objFSO As Object, objFile As Object
    Dim sLine As String

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Sheet1")

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile(Application.ActiveWorkbook.Path & "\" & myarray & ".csv", 1)
    Do Until objFile.AtEndOfStream
          sLine = objFile.ReadLine
          'the col of the ID = 0
          If Split(sLine, ",")(0) = index Then
              AsArray = Split(sLine, ",")
          End If
    Loop
    objFile.Close

 End Function
现在,您的动态数组已保存在mytestR中。 你可以这样玩:

 ?mytestR(0)
 2
 ?mytestR(1)
 DEFG
 ?mytestR(2)
 D
 ?mytestR(3)
 2
 ?mytestR(4)
 20

众所周知,数组的使用非常混乱。您是否可以在检索数据时使用集合?如果您需要数组作为输出,您可以随时轻松地从数组转换到集合(或返回)。感谢您的回复。我刚刚检查过,我的系统只识别数组。你能在这些台词中提出一些建议吗?你用的是什么系统?如果您可以访问Java,但不能访问集合,那么您是否必须使用早于1.2的JDK?请提供更多关于您的限制/能力的背景信息。我在Siebel工作,这是一个CRM应用程序。它使用eScript作为编程语言。你能给我一行简单的代码来表示集合是什么吗?我对这一点不熟悉。
 ?mytestR(0)
 2
 ?mytestR(1)
 DEFG
 ?mytestR(2)
 D
 ?mytestR(3)
 2
 ?mytestR(4)
 20