2010-09-15 3 views
4

в то время как мой сценарий обновляет один первенствовать то же время, если я буду делать какие-либо другие работы вручную с другой первенствует ошибку я использую отправкуОшибки при работе с Excel с помощью питону

 from win32com.client import Dispatch 

    excel = Dispatch('Excel.Application') 
excel.Visible = True 

file_name="file_name.xls" 
workbook = excel.Workbooks.Open(file_name) 
workBook = excel.ActiveWorkbook 
sheet=workbook.Sheets(sheetno) 

Я адресность ошибки как это (, com_error (-2147418111 "Вызов был отклонен вызываемым., None, None)

есть ли способ преодолеть это ..can я обновить другой первенствует без адресности ошибка ..

+0

Включите весь трассировку, чтобы мы могли видеть, какая строка вызвала ошибку. Несколько комментариев: во-первых, у вас есть две переменные workbook и workBook, которые отличаются только одной большой буквы. Наверное, это не очень хорошая идея. Во-вторых, нет причин для захвата ActiveWorkbook, поскольку у вас уже есть ссылка на нее на предыдущей строке (сразу же открыта рабочая книга). В-третьих, вы не укажете путь для своего имени файла, поэтому, если ваш код python и таблица excel находятся в разных каталогах, Open завершится с ошибкой. Наконец, возможно, листно выходит за пределы допустимого диапазона. Excel хранит листы в массиве 1. –

ответ

0

steven может быть мои переменные имена не хороши, но там я s не gramatical ошибка в коде его workes оштрафовать мое единственное беспокойство является то, что ошибка ком

мой скрипт работает без ошибок, если я не начал другую первенствует

мой quetion кто-нибудь знает, как преодолеть его с помощью отправки ИЛИ есть ли какой-либо другой модуль excel для python, где я могу справиться с этой проблемой?

первенствует = Dispatch ('Excel.Application')

excel.Visible = True

имя_файла = "E: \ Report.xls"

Учебное пособие = excel.Workbooks.Open (имя_файла)

лист = workbook.Sheets (1)

рассмотреть я пишу что-нибудь в Excel

sheet.Cells (1,1) .Value = 'test1'

sheet.Cells (1,2) .Value = 'test2'

sheet.Cells (1,3) .Value = ' TEST3'

sheet.Cells (1,4) .Value = 'test4'

sheet.Cells (1,5) .Value = 'test5'

sheet.Cells (1,6) .Value = 'test6'

sheet.Cells (1,7) .Value = «Test7»

sheet.Cells (1,8) .Value = «test8»

4

Эта ошибка возникает из-за COM объект вы вызываете отклонит внешний вызов, если он уже обрабатывает другую операцию. Асинхронная обработка вызовов отсутствует, и поведение может показаться случайным.

В зависимости от операции вы увидите либо pythoncom.com_error, либо pywintypes.com_error. Простой (если неэлегантный) способ обойти это состоит в том, чтобы обернуть ваши вызовы в COM-объект с помощью try-except и, если вы получите одну из этих ошибок доступа, повторите свой вызов.

Для получения дополнительной информации см. Раздел «Обработка ошибок» раздела chapter 12 excerpt from Python Programming on Win32 от Марка Хэммонда. & Энди Робинсон (O'Reilly 2000).

Также есть полезная информация о Excel в формате Siew Kam Onn's blog post "Python programming with Excel, how to overcome COM_error from the makepy generated python file".

0

Недавно я столкнулся с этой проблемой. Хотя кажется, что может быть несколько причин, возникающих из-за того, что Python слишком быстро выполнял последующие вызовы для Excel, чтобы ускорить работу, особенно при обновлении внешнего запроса. Я разрешил эту прерывистую ошибку «Call was reject by callee», вставив time.sleep() между большинством моих вызовов и увеличивая аргумент sleep для любых вызовов, которые особенно длительны (обычно между 7-15 секундами). Это позволяет Excel время для выполнения каждой команды до того, как Python выпустит дополнительные команды.