Если вы хотите сохранить простоту без формул VBA или массива, я бы создал дополнительный столбец, который объединяет «start» и «stop», а затем использовал vlookup для поиска правильных строк:
Добавьте эту формулу для обеих таблиц в дополнительном столбце (A легче всего искать), допустим, что start и stop находятся в E и F
=E1&"-"&F1"
. Убедитесь, что что-то между значениями установлено, чтобы избежать дублирования.
И используйте VLOOKUP
для добавления столбцов C и D к A и B путем поиска вновь созданного значения start-stop.
не уверен насчет версии для mac, но в wxPython есть встроенный способ перенаправления ошибок в окно (которое, к сожалению, закроется при сбое приложения, но полезно для перехвата ошибок, которые молча терпят неудачу) или в файл журнала (обновляется только после закрытия приложения):
app = wx.App(redirect=True)
app = wx.App(redirect=True,filename="mylogfile.txt")
они будут работать независимо от того, как вы запустили приложение. См. здесь для получения дополнительной информации
.Запуск из Python IDE с помощью отладчика.
Запуск в WingIDE сразу обнаруживает две проблемы:
ID_ABOUT
должно быть wx.ID_ABOUT
(строка № 4 из __ init __
). OnAboutBox
(весь метод) слишком сильно отступает на один шаг. Как написано, это локальная функция внутри __ init __
. Переместите весь метод на один шаг влево, чтобы сделать его методом MyApp
. Вот способ сообщить об ошибке в графическом интерфейсе вместо консоли через MessageDialog. Вы можете использовать метод show_error () везде, где перехватывается исключение, здесь я просто перехватываю его на самом верхнем уровне. Вы можете изменить его так, чтобы приложение продолжало работать после возникновения ошибки, если ошибка может быть обработана.
import wx
import sys
import traceback
def show_error():
message = ''.join(traceback.format_exception(*sys.exc_info()))
dialog = wx.MessageDialog(None, message, 'Error!', wx.OK|wx.ICON_ERROR)
dialog.ShowModal()
class Frame(wx.Frame):
def __init__(self):
super(Frame, self).__init__(None, -1, 'My Frame')
def cause_error(self):
raise Exception, 'This is a test.'
def main():
app = wx.PySimpleApp()
try:
frame = Frame()
frame.Show()
frame.cause_error()
app.MainLoop()
except:
show_error()
if __name__ == '__main__':
main()
Запустите приложение из командной строки (я думаю, что оно называется «Терминал» в OS X), как указано ниже, вместо двойного щелчка по файлу python. Таким образом, при сбое приложения вы увидите трассировку стека.
python NameOfScript.py
Кроме того, вы можете перенаправить вывод в файл журнала:
f=open('app.log','w')
import sys
sys.stdout=f
sys.stderr=f
Добавьте операторы печати в вашу программу, чтобы вы могли сказать, как она запускается и где она заканчивается (умирая из терминала, как вы уже сказали, что делаете).
Вы также можете запустить свой проект из Python IDE, например Eric IDE . Вы получаете дополнительный бонус за возможность отслеживать, просматривать переменные и множество других интересных вещей! : -)