Мне нужно было открыть рабочую книгу external_workbook.xlsx
до обновления workbook1.xlsm
, чтобы можно было обновить данные.
Рабочий код выглядит следующим образом:
import win32com.client as w3c
import random
xlapp = w3c.gencache.EnsureDispatch('Excel.Application')
xlapp.Visible = 0
# ********************************* #
# New line that fixes it #
xlwb_data = xlapp.Workbooks.Open(r'{}\{}'.format(path, 'external_workbook.xlsx'), False, True, None)
# ********************************* #
xlwb = xlapp.Workbooks.Open(r'{}\{}'.format(path, 'workbook1.xlsm'), False, True, None)
books = w3c.Dispatch(xlwb)
sheet_temp = books.Sheets('temp')
sheet_temp.Cells(1,1).Value = random.random()
xlwb.RefreshAll() # Runs with no errors, but doesn't refresh
time.sleep(5)
xlwb.Save()
xlapp.Quit()
Могло бы быть легче работать с единственной таблицей и для доступности и для заказа с гранулярностью 1 дня:
property_date (property_id, date, status);
Статус столбца имел бы (по крайней мере), следующие 2 значения:
Ввод периода доступности, например, с 1-го до 14-го апреля повлек бы за собой (приложение) вставку 14 строк в property_date каждый с состоянием 'Доступных'. (Пользователю это должно походить на единственное действие).
Заказ свойства в течение периода с 3-го до 11-го апреля повлек бы за собой проверку, что 'Доступная' строка существовала в течение каждого дня и изменения состояния к 'Заказанному'.
Эта модель может казаться немного "подробной", но она имеет некоторые преимущества:
NB, Если "доступно" является наиболее распространенным состоянием свойства, может быть лучше инвертировать логику так, чтобы было состояние 'Unavailable', и отсутствие строки для даты означает, что это доступно.