VBA 到 Python 转换
VBA to Python conversion
我有一个 vba 宏,它在 excel 中的 D 列中嵌入了一系列文本文件,该文件引用 A 列中的值,并向下迭代该列。
在将其转换为 Python 时,我遇到了指定文件嵌入位置的问题。 vba 宏将每个文件嵌入相关行,而在其当前形式中,Python 脚本将所有文件嵌入同一单元格 (B2)。我尝试了各种策略,主要是将 Offset 放在不同的地方,但没有成功,并且无法在网上找到任何示例。
以下是代码片段:
VBA:
Sub Insert_Text_File()
Dim ol As OLEObject
Dim file As String
Dim cell As Range
' loop each cell in column A
For Each cell In Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
If Not IsEmpty(cell) Then
file = cell.Value & ".txt"
' create and insert a new OleObject based on the path
' ThisWorkbook.path & "\" & cell & file will make the filename
Set ol = Worksheets("Inventory").OLEObjects.Add(Filename:=ThisWorkbook.path & "\" & file, Link:=False, DisplayAsIcon:=True, Height:=10)
' align the OleObject with Column D - (0 rows, 3 columns to the right from column A)
ol.Top = cell.Offset(0, 3).Top
ol.Left = cell.Offset(0, 3).Left
End If
Next
End Sub
Python:
folder = 'C:\Users\ioe\' #raw_input("Please specify Show Files directory: ")
inventory_csv = 'inventory.csv'
book = Workbook()
sheet = book.add_sheet('Inventory',cell_overwrite_ok=True)
inventory_data_to_csvfile(folder)
csv_to_xls(inventory_csv)
os.remove('inventory.csv')
xl = win32.gencache.EnsureDispatch('Excel.Application')
xl.Visible = 1
wb = xl.Workbooks.Open("C:\Users\robertph\Share\inventory\INVENTORY.xls")
column = wb.ActiveSheet.Range("A2:A200")
for cell in column:
if cell.Value is not None:
f = 'C:\Users\robertph\Share\ioe\' + str(cell.Value) + '.txt'
ol = wb.ActiveSheet.OLEObjects().Add(Filename=f, Link=False)
#ol.Offset(0, 3)
#cell.GetOffset(0, 3).Value = ol
#ol_offset = ol.Cells(cell).GetOffset(0, 3)
#ol.Top = cell.Offset(0, 3)
#ol.Left = cell.Offset(0, 3)
非常感谢任何建议。谢谢
如果其他人发现自己处于相同的位置;我终于解决了它:(Phew!)
range = wb.ActiveSheet.Range("A2:A200")
for cell in range:
if cell.Value is not None:
f = 'C:\Users\robertph\Share\ioe\' + str(cell.Value) + '.txt'
ol = wb.ActiveSheet.OLEObjects().Add(Filename=f, Link=False)
ol.Top = cell.GetOffset(0, 3).Top
ol.Left = cell.GetOffset(0, 3).Left
我有一个 vba 宏,它在 excel 中的 D 列中嵌入了一系列文本文件,该文件引用 A 列中的值,并向下迭代该列。 在将其转换为 Python 时,我遇到了指定文件嵌入位置的问题。 vba 宏将每个文件嵌入相关行,而在其当前形式中,Python 脚本将所有文件嵌入同一单元格 (B2)。我尝试了各种策略,主要是将 Offset 放在不同的地方,但没有成功,并且无法在网上找到任何示例。 以下是代码片段: VBA:
Sub Insert_Text_File()
Dim ol As OLEObject
Dim file As String
Dim cell As Range
' loop each cell in column A
For Each cell In Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
If Not IsEmpty(cell) Then
file = cell.Value & ".txt"
' create and insert a new OleObject based on the path
' ThisWorkbook.path & "\" & cell & file will make the filename
Set ol = Worksheets("Inventory").OLEObjects.Add(Filename:=ThisWorkbook.path & "\" & file, Link:=False, DisplayAsIcon:=True, Height:=10)
' align the OleObject with Column D - (0 rows, 3 columns to the right from column A)
ol.Top = cell.Offset(0, 3).Top
ol.Left = cell.Offset(0, 3).Left
End If
Next
End Sub
Python:
folder = 'C:\Users\ioe\' #raw_input("Please specify Show Files directory: ")
inventory_csv = 'inventory.csv'
book = Workbook()
sheet = book.add_sheet('Inventory',cell_overwrite_ok=True)
inventory_data_to_csvfile(folder)
csv_to_xls(inventory_csv)
os.remove('inventory.csv')
xl = win32.gencache.EnsureDispatch('Excel.Application')
xl.Visible = 1
wb = xl.Workbooks.Open("C:\Users\robertph\Share\inventory\INVENTORY.xls")
column = wb.ActiveSheet.Range("A2:A200")
for cell in column:
if cell.Value is not None:
f = 'C:\Users\robertph\Share\ioe\' + str(cell.Value) + '.txt'
ol = wb.ActiveSheet.OLEObjects().Add(Filename=f, Link=False)
#ol.Offset(0, 3)
#cell.GetOffset(0, 3).Value = ol
#ol_offset = ol.Cells(cell).GetOffset(0, 3)
#ol.Top = cell.Offset(0, 3)
#ol.Left = cell.Offset(0, 3)
非常感谢任何建议。谢谢
如果其他人发现自己处于相同的位置;我终于解决了它:(Phew!)
range = wb.ActiveSheet.Range("A2:A200")
for cell in range:
if cell.Value is not None:
f = 'C:\Users\robertph\Share\ioe\' + str(cell.Value) + '.txt'
ol = wb.ActiveSheet.OLEObjects().Add(Filename=f, Link=False)
ol.Top = cell.GetOffset(0, 3).Top
ol.Left = cell.GetOffset(0, 3).Left