将Excel VBA脚本翻译成Python

我有以下的VBA脚本:

Sub excelgraphme() With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;C:\DRIVE D\graphme\result.txt", Destination:=Range("$A$1")) .TextFilePlatform = 866 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = False .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With End Sub 

有人可以帮我翻译pywin32吗? 首先,我应该如何处理vb语句:WITH END WITH? 我如何翻译它?

看来你可以使用Python的pywin32库。 我重写了代码,但不确定TextFileTextQualifier的值。 你可以通过运行你的VB脚本来看到它的值(和其他variables)。

 import win32com.client excel = win32com.client.Dispatch("Excel.Application") ws = excel.Workbooks.Add().Worksheets(1) qtNew = ws.QueryTables.Add( "TEXT;C:\\DRIVE D\\graphme\\result.txt", ws.Range("A1")) qtNew.TextFilePlatform = 866 qtNew.TextFileStartRow = 1 qtNew.TextFileParseType = 1 qtNew.TextFileTextQualifier = 1 qtNew.TextFileConsecutiveDelimiter = False qtNew.TextFileTabDelimiter = True qtNew.TextFileSemicolonDelimiter = False qtNew.TextFileCommaDelimiter = False qtNew.TextFileSpaceDelimiter = False qtNew.TextFileColumnDataTypes = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] qtNew.TextFileTrailingMinusNumbers = True qtNew.Refresh() 

如果我没有使用With With End语句来重写,也许会更容易一些。 在那里,以便VBA不必检查对象(其方法被调用)是什么。

 Sub excelgraphme() Dim qtNew As QueryTable Set qtNew = ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;C:\DRIVE D\graphme\result.txt", Destination:=Range("$A$1")) '* is equivalent but slightly slower because With statement means VBA won't check each line for qtNew=Nothing qtNew.TextFilePlatform = 866 qtNew.TextFileStartRow = 1 qtNew.TextFileParseType = xlDelimited qtNew.TextFileTextQualifier = xlTextQualifierDoubleQuote qtNew.TextFileConsecutiveDelimiter = False qtNew.TextFileTabDelimiter = True qtNew.TextFileSemicolonDelimiter = False qtNew.TextFileCommaDelimiter = False qtNew.TextFileSpaceDelimiter = False qtNew.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) qtNew.TextFileTrailingMinusNumbers = True qtNew.Refresh BackgroundQuery:=False End Sub