2015-07-28 4 views
4

Я пытаюсь открыть существующий файл Excel 2013, добавить данные, а затем сохранить их (с тем же именем), а затем закрыть их, а затем закрыть Excel. Код откроет файл, выберите правильный рабочий лист и запишет данные, но когда я попытаюсь сохранить его, я получаю ошибку атрибута. Я скучаю по библиотеке или чему-то еще? Вот код:Сохранить и закрыть файл Excel после добавления данных?

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' 
+0

Я запутался, почему у вас есть 'raise' строку в вашем сообщении? Это в вашем скрипте? Это было напечатано при запуске вашего скрипта? – SuperBiasedMan

+4

Не используйте модуль, а просто смотрите на непрерывность вашего кода: следует ли «сохранить» с сохранением? –

+0

@SuperBiasedMan это, вероятно, только трассировка – TankorSmash

ответ

2

Заглавная буква 's' в методе save().

+0

Спасибо, Alecg_O! Вот и все. Я не хочу использовать суровый язык, но я идиот. Я просмотрел много документации и попробовал много разных вещей, и в итоге это было что-то простое. Я буду более прилежным в будущем. Еще раз спасибо. – JeffC

+0

Вы в порядке, это случается с лучшими из нас - иногда все, что требуется, это новый набор глаз. –

2

Согласно этому resource, вам нужно позвонить SaveAs(xlsx_filepath) по книге:

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() 
Смежные вопросы