Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Python+EXCEL / 4 сообщений из 4, страница 1 из 1
30.06.2008, 14:12
    #35401992
AntonSlepnev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python+EXCEL
Пытаюсь писать в текущий активный лист Excel в заданную ячейку строку посредством Thread-а. Вылетает сообщение об ошибке, которое без поллитра не поймешь..

Кто-нибудь знает, что за ошибка и как устранить?

скрипт:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
import sys,  time
import threading
import pythoncom
from win32com.client import Dispatch

class coterwriter(threading.Thread):
    def __init__(self,i):
        threading.Thread.__init__(self)
        self.xlApp = Dispatch('Excel.Application')
        self.xlApp.ActiveWorkbook.ActiveSheet.Cells( 1 , 1 ).Value = "blablabla"
    def put_mark(self,mark):
        self.xlApp.ActiveWorkbook.ActiveSheet.Cells( 1 , 1 ).Value = mark
    def run(self):
        self.put_mark("blablabla")
       
a = coterwriter( 1 )
a.start()
...
Рейтинг: 0 / 0
30.06.2008, 16:31
    #35402317
Devider
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python+EXCEL
Ошибку в студию! Я за поллитрой..
...
Рейтинг: 0 / 0
30.06.2008, 16:37
    #35402328
Devider
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python+EXCEL
Впрочем, рискну предположить, что сначала надо ActiveWorkbook заполучить, написав что-то типа Workbooks.Add(..)
...
Рейтинг: 0 / 0
30.06.2008, 17:22
    #35402436
AntonSlepnev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Python+EXCEL
Не, эксель уже открыт.

Я разобрался, напишу для тех, кто тоже может столкнуться:

НЕ РАБОТАЕТ:
import sys, time
import threading
import pythoncom
from win32com.client import Dispatch

class coterwriter(threading.Thread):
def __init__(self,i):
threading.Thread.__init__(self)
self.xlApp = Dispatch('Excel.Application')
self.xlApp.ActiveWorkbook.ActiveSheet.Cells(1,1).Value = "blablabla"
def put_mark(self,mark):
self.xlApp.ActiveWorkbook.ActiveSheet.Cells(1,1).Value = mark
def run(self):
self.put_mark("blablabla")

a = coterwriter(1)
a.start()


РАБОТАЕТ:
import sys, time
import threading
import pythoncom
from win32com.client import Dispatch

class coterwriter(threading.Thread):
def __init__(self,i):
threading.Thread.__init__(self)
def put_mark(self,mark):
self.xlApp.ActiveWorkbook.ActiveSheet.Cells(1,1).Value = mark
def run(self):
pythoncom.CoInitialize()
try:
self.xlApp = Dispatch('Excel.Application')
self.xlApp.ActiveWorkbook.ActiveSheet.Cells(1,1).Value = "blablabla"
self.put_mark("blablabla")
finally:
pythoncom.CoUninitialize()

a = coterwriter(1)
a.start()


разницу предлагаю найти читателю:)

COM хитро взаимодействует с потоками - не дает себя трогать всем и каждому..
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Python+EXCEL / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]