2

このコードは、入力としてテキストファイルを受け取り、各行を文字列配列に格納し、各行をループして条件をチェックし、最終的に配列を埋めます。

この1次元配列を.rangeExcelオブジェクトライブラリのメソッドを使用してExcel列に転送しようとすると、範囲のすべてのセルが配列の最初の値(つまり、array(0))で埋められます。

 sr = openFileDialog1.FileName()
            If (sr IsNot Nothing) Then

            Dim alltextlines() As String = IO.File.ReadAllLines(sr)
            Dim name As String
            Dim isvalid As Boolean
            Dim tempstr() As String
            Dim count As Integer = 0


            For Each myLine In alltextlines
                ReDim Preserve tempstr(count)
                If myLine.Contains(">") And myLine.Contains(" sds dsd") Then

                    isvalid = Integer.TryParse((Microsoft.VisualBasic.Mid(Microsoft.VisualBasic.LTrim(myLine), 3, 1)), 0)

                    If isvalid Then

                        name = Microsoft.VisualBasic.Left(Microsoft.VisualBasic.LTrim(myLine), 5)

                    Else
                        name = Microsoft.VisualBasic.Left(Microsoft.VisualBasic.LTrim(myLine), 7)

                    End If

                    tempstr(count) = name
                    count = count + 1
                End If

            Next
            Dim message As String = String.Join("..", tempstr)
            MsgBox(message)

            Dim oExcel As Object
            Dim oBook As Object
            Dim oSheet As Object

            'Start a new workbook in Excel.
            oExcel = CreateObject("Excel.Application")
            oBook = oExcel.Workbooks.Add
            oSheet = oBook.Worksheets(1)
            oSheet.Range("A1").Value = "SiteNames"
            oSheet.Range("A1:B1").Font.Bold = True
            oSheet.Range("A2").Resize(tempstr.Length).Value = tempstr




            oSheet = Nothing
            oBook = Nothing
            oExcel.Quit()
            oExcel = Nothing
            GC.Collect()


        Else
            MsgBox("TEXT FILE IS EMPTY", MsgBoxStyle.Critical, "Error")
        End If
    End If
End Sub
4

1 に答える 1

2

範囲値を設定するには、2次元配列を渡す必要があります。これにより、ループが複雑になり、事前定義された条件を尊重する行のみが抽出され、2次元配列を埋めるために2番目のループが強制されます。

例として

Dim values(5) as string
values(0) = "Test0"
values(1) = "Test1"
values(2) = "Test2"
values(3) = "Test3"
values(4) = "Test4"

Dim tempstr(,) As String = new String(values.Length,1) {}
for x as Integer = 0 to values.Length - 1
    tempstr(x, 0) = values(x)
next


Dim oExcel as Object = CreateObject("Excel.Application")    
Dim oBook as Object = oExcel.Workbooks.Add 
Dim oSheet as Object = oBook.Worksheets(1) 
oSheet.Range("A1").Value = "SiteNames" 
oSheet.Range("A1").Font.Bold = True 
Dim r As Range = oSheet.Range("A2").Resize(tempStr.GetLength(0))
r.Value2 =  tempstr
oExcel.Visible = true
于 2012-09-22T17:09:40.590 に答える