JeffC
JeffC

Reputation: 133

Save and close an Excel file after adding data?

I am trying to open an existing Excel 2013 file, add data and then save it(same name) and then close it and then close Excel. The code will open the file, select the correct worksheet and write the data, but when I try save it I get an attribute error. Am I missing a library or something? Here is the code:

import win32com.client as win32

def Inventory_Status():
    excel = win32.gencache.EnsureDispatch('Excel.Application') # opens Excel
    wb = excel.Workbooks.Open(r'C:/pytest/Test.xlsx') # opens "Test" file
    wb.Sheets(2).Select() # select 2nd worksheet "Aisle_2"
    excel.Visible = True
    excel.Range("A1").Select()
    excel.ActiveCell.Value = "1234"   # Fill in test data #
    wb.save()
    wb.Close()
    excel.Quit()

Inventory_Status()

raise AttributeError("'%s' object has no attribute '%s'" % (repr(self), attr))

AttributeError: '<win32com.gen_py.Microsoft Excel 15.0 Object Library._Workbook instance at 0x5901424>' object has no attribute 'save'

Upvotes: 5

Views: 22083

Answers (2)

Alecg_O
Alecg_O

Reputation: 1039

Capitalize the 's' on the save() method.

Upvotes: 5

TankorSmash
TankorSmash

Reputation: 12747

According to this resource, you need to call SaveAs(xlsx_filepath) on the workbook:

def Inventory_Status():
    excel = win32.gencache.EnsureDispatch('Excel.Application') # opens Excel
    file_path = r'C:/pytest/Test.xlsx'
    wb = excel.Workbooks.Open(file_path) # opens "Test" file

    wb.Sheets(2).Select() # select 2nd worksheet "Aisle_2"
    excel.Visible = True
    excel.Range("A1").Select()
    excel.ActiveCell.Value = "1234"   # Fill in test data #

    wb.SaveAs(file_path)
    wb.Close()
    excel.Quit()

Upvotes: 2

Related Questions