【发布时间】:2017-10-02 20:32:01
【问题描述】:
我已将 excel 文件转换为 txt。在某些文件中,某些列被跳过。由数据库控制:
file | remove_column
=======+===============
file1 | CASE NOTE
-------+---------------
file2 | Description
-------+---------------
file3 | Item | Address
Remove_Column 有标题(第一行)。如果应该跳过几列,则用'|'分隔它们
如果匹配,我必须将转换后的 txt 文件与原始 excel 文件进行比较。如何读取除 DB 表中显示的列之外的所有列?
我正在使用 UFT 12.5。通过 Excel.Application 或 ADO 读取 Excel。 谢谢)
UPD:我使用的代码:
我有列硬编码:
Select Case OrigFileName 'file names come from database
Case "Fees mm-yy.xls"
ColumnNames = Split("1,2,3,4,5,6,7,8,9,10,11,12,13", ",")
Case "Exp mm-yy.xls"
ColumnNames = Split("1,2,3,4,5,6,7,8,9,12,13,14,15,16,19,20", ",")
End Select
但是有 50 个文件,企业可能会要求删除或重新添加任何列;还有,新文件来了...(((
Dim fsox : Set fsox = CreateObject("Scripting.FileSystemObject")
Dim TargFileRead : Set TargFileRead = fsox.OpenTextFile(targetFile)
Dim OrgExcel : Set OrgExcel = CreateObject("Excel.Application")
OrgExcel.Workbooks.Open(originalfile)
Set vSheet = OrgExcel.WorkSheets(TabUse) 'excel sheet name, comes from database
print vSheet.UsedRange.Rows.Count
For rc = 1 To vSheet.UsedRange.Rows.Count
For coc = 0 To UBound(ColumnNames) 'column names hard-coded
cc = cInt(ColumnNames(coc))
vtext = vSheet.cells(rc,cc)
If NOT(vtext=ChrW(9)) Then
If vstring="" Then
vstring=vtext
Else
vstring = vstring&vbTab&vtext
End If
End If
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= mid(TargFileText,1,len(TargFileText)-1)
Else
Exit Do
End If
Loop
TargFileStr = Trim(TargFileText)
If trim(vstring) = trim(TargFileStr) Then
' print "match"
Else
print "-=Not Match=-"&VBNewLine&"txt:::"&trim(TargFileStr)&VBNewLine&"xls:::"&trim(vstring)
End If
End If
Next
【问题讨论】:
-
您是否有阅读所有列的代码,但不知道如何跳过某些列?如果是这样,请您提供您的代码。
-
哦,对了,我忘了……现在问题更新了。
-
只是为了澄清:目标是用一种算法替换 ColumnNumbers,该算法读取所有列,除了那些在第 1 行的工作表的表格中包含字符串的列,对吧?
-
@JensS,绝对正确。
-
太棒了;我已经添加了答案。
标签: excel automated-tests ado qtp hp-uft