Hi,
class easyExcel: def __init__(self, filename=None): self.xlApp = Dispatch('Excel.Application') if filename: self.filename = filename self.xlBook = self.xlApp.Workbooks.Open(filename) else: self.xlBook = self.xlApp.Workbooks.Add() self.filename = '' def save(self, newfilename=None): if newfilename: self.filename = newfilename self.xlBook.SaveAs(newfilename) else: self.xlBook.Save() def close(self): self.xlBook.Close(SaveChanges=0) del self.xlApp def getSheets(self): return self.xlBook.Worksheets def getCell(self, sheet, row, col): sht = self.xlBook.Worksheets(sheet) return sht.Cells(row, col).Value def setCell(self, sheet, row, col, value, noerr=True): sht = self.xlBook.Worksheets(sheet) sht.Cells(row, col).Value = value def cpSheet(self, before): shts = self.xlBook.Worksheets shts(1).Copy(None,shts(1)) def show(self, visible=True): self.xlApp.Visible = visible easyExcel comes from <<Python Programming on Win32>>, it provides a easy way to process excel files. However, I found a problem today - it works fine in single thread version but can not work properly in multi-thread version - If I move excel file operations to sub-thread, it will complain 'CoInitialize has not been called'. I noticed the exception is thrown in "Lib\site-packages\win32com\client\dynamic.py", I tried to add "pythoncom.CoInitialize()" in line 78 and "pythoncom.CoUninitialize()" in line 330, it will be ok. I have following questions and hope someone can give me some comments. Thanks a lot. 1. After doing such modifications, the excel file will be opened as "read only" mode, how to avoid this? 2. Is it necessary to add these two lines? Is there any mistake I made? Below is information of my python: ActivePython 2.4.3 Build 12 (ActiveState Software Inc.) based on Python 2.4.3 (#69, Apr 11 2006, 15:32:42) [MSC v.1310 32 bit (Intel)] on win32 - Tommy
-- http://mail.python.org/mailman/listinfo/python-list