2017-08-31 9 views
0

アプリケーションはExcelファイルをtxtに変換します。私はそれぞれの行が一致することを確認する必要があります。以下はそのことを確認する関数ですが、txtファイルまたはExcelファイルから空文字列を返すことがあり、両方のファイルに行/行のテキストが含まれていることがあります。データベースからQTP:関数は、Excel /テキストファイルから空の文字列を返します

私は、ファイルやフォルダ名を取得するだけでなく、(田臥として)使用するシートをエクセル何

Function excelcomparison (ByRef ObjFolder, ByRef OrgFolder, ByRef originalfile, ByRef targetFile, ByRef TabUse) 
print originalfile&":::"&TabUse&" -=VS=- "&targetFile 
Dim fsox : Set fsox = CreateObject("Scripting.FileSystemObject") 
Dim TargFileRead : Set TargFileRead = fsox.OpenTextFile(targetFile) 

Dim OrgExcel : Set OrgExcel = CreateObject("Excel.Application") 
'Application.DisplayAlerts = False 
OrgExcel.Workbooks.Open(originalfile) 
Set vSheet = OrgExcel.ActiveWorkbook.WorkSheets(TabUse) 
For rc = 1 To vSheet.UsedRange.Rows.Count 
     For cc = 1 To vSheet.UsedRange.Columns.Count 
     vtext = (vSheet.cells(rc,cc)) 
      If vstring="" Then 
       vstring=vtext 
      Else 
       vstring = vstring&vbTab&vtext 
      End If 
     Next 

任意の先頭と末尾のタブの「トリム」:

Do 
    If Left(vstring , 1)=ChrW(9) Then 
    vstring = MID(vstring, 2) 
    Else 
    Exit Do 
    End If 
Loop 
Do 
    If RIGHT(vstring, 1)=ChrW(9) Then 
     vstring= REPLACE(RIGHT(vstring, 1),ChrW(9), ChrW(32)) 
     vstring=Trim(vstring) 
    Else 
     Exit Do 
    End If 
Loop 

     vstring = Trim(vstring) 

いくつかの細胞Excelで結合され、2行以上の高さを持ちます。だから、それらは行とTXTラインをエクセルスキップ:

If len(vstring)>0 Then 
     TargFileText = TargFileRead.ReadLine 
     Do 
      If Left(TargFileText, 1)=ChrW(9) Then 
       TargFileText = MID(TargFileText, 2) 
      Else 
       Exit Do 
      End If 
     Loop 
     Do 
      If RIGHT(TargFileText, 1)=ChrW(9) Then 
       TargFileText = REPLACE(RIGHT(TargFileText, 1),ChrW(9), ChrW(32)) 
       TargFileText=Trim(TargFileText) 
      Else 
       Exit Do 
      End If 
     Loop 
     TargFileStr = Trim(TargFileText) 


     If trim(vstring) = trim(TargFileStr) Then 
'   print "match" 
      Else 
      print "Not Match" 
      print "+"&trim(TargFileStr) 
      print "*"&trim(vstring) 
     End If 
    Else 
    print "Lenth=0" 
    End If 
    vstring = "" 
    vtext = "" 
    TargFileStr="" 
Next 

OrgExcel.ActiveWorkbook.Close 
TargFileRead.Close 

fsox = Nothing 
TargFileRead = Nothing 
vSheet = Nothing 
OrgExcel = Nothing 
End Function 

問題1:それはいくつかのテキストを読んだり、ファイルをエクセルいない、ランダムに(エクセル/テキストファイルから空の文字列を返します)

問題2 :開かれたExcelを閉じず、膨大なメモリを消費する(検証するファイルは最大50ファイル)

質問:修正する必要があるのは何ですか?

答えて

2

私はExcelとテキストファイルの両方の文字列の右端側からvbtabを削除しようとしているときに問題が発生していると思います。 Excelの

、あなたが使用している:

If RIGHT(vstring, 1)=ChrW(9) Then 
    vstring= REPLACE(RIGHT(vstring, 1),ChrW(9), ChrW(32))  'This may be the source of your problem 
    vstring=Trim(vstring) 
Else 
    Exit Do 
End If 

説明:

あなたはchrw(9)しか含まれていない文字列[RIGHT(vstring, 1)]でchrw(32)ChrW(9)を交換しているが。この置換を実行した後、変数vstringに結果[chrw(32)またはspace]を割り当てます。この行の後に、あなたが使用しているため、テキストファイルのどのvstring=""

にこの変数をトリム:

If RIGHT(TargFileText, 1)=ChrW(9) Then 
    TargFileText = REPLACE(RIGHT(TargFileText, 1),ChrW(9), ChrW(32)) 'This may be the source of the problem 
    TargFileText=Trim(TargFileText) 
Else 
    Exit Do 
End If 

説明:あなたは、文字列にchrw(32)ChrW(9)を交換する

[RIGHT(TargFileText, 1)]何も含まれていませんchrw(9)。この置換を実行した後、変数TargFileTextに結果[chrw(32)またはspace]を割り当てています。この行の後に、あなたが原因これにTargFileText=""

SOLUTIONこの変数をトリム:どちらの場合も 、あなたはちょうどあなたがの左端側からvbTabを取り外し方法のように右側からタブを削除する必要がありますストリングi。E、MID関数を使用して:テキストファイルのため、

If RIGHT(vstring, 1)=ChrW(9) Then 
    vstring= mid(vstring,1,len(vstring)-1)  'If there is a tab in the right side of the string, just capture till second last character of the string thus excluding the vbTab. 
Else 
    Exit Do 
End If 

同様に:VSTRINGが空白でない場合にのみ、

TargFileText= mid(TargFileText,1,len(TargFileText)-1) 

はまた、テキストファイルを読んでいます。したがって、vstringが空白の場合、 "pointer"というテキストファイルは、Excelと同じ行に1行ずつ増分されます。これにより、誤った比較が行われることがあります。以下に示すようにこれを避けるために、あなたは他の部分にSkiplineメソッドを使用することができます。

If len(vstring)>0 Then 
    '----your code---- 
    '... 
    '... 
else 
    TargFileRead.Skipline   'so that it skips the line corresponding to the case when vstring is "" 
    '--remaining code--- 
End If 

Excelを閉じるため、は、Excelアプリケーションの Quitメソッドを使用します。

OrgExcel.Quit 
+0

ありがとうございました!私は絶対にlen(vstring)-1)を使用するとは思わなかった) Excelの文字列が空白でないときだけテキストを読む理由は、Excelの行が空の場合、ソフトウェアにはtxtファイルに空白行がありません。他のすべては良いです、thnx) – Salek

+0

うれしかった:) – Gurman

関連する問題