PyExcelerator: How does one close a file?
sjmachin at lexicon.net
Wed May 10 01:02:15 CEST 2006
On 10/05/2006 7:57 AM, tkpmep at hotmail.com wrote:
> I use PyExcelerator to write data into Excel files, and repeatedly call
> the function writeData with different filenames fn from my main
> routine. Unfortunately, only one file - the last one - is created. The
> problem seems to lie with the fact that I do not close the existing
> file before calling the function again,
If you needed to close a file that was opened in another module, that
would be a very peculiar API design. You don't need to.
> and the existing file is
> therefore just saved with a new name.
Your function creates a new instance of the Workbook class, as it
should. The instance is abandoned when your function exits. One would
not expect any carry-over between instances.
Is there a way to close a
> PyExcelerator Excel file so that each call to the function results in a
> new file? There is no close() method as far as I can tell.
> def writeData(fn, Data):
> """Write the data into an Excel file named fn using PyExcelerator
> Data is a list of real numbers"""
Last time I looked, the name was pyExcelerator -- that's a lower-case
"p" at the front. How come you didn't get an exception here (or on
earlier import)? Have you posted the actual code you executed???
> ws = w.add_sheet("Sheet1")
> for i in range(len(Data)):
> ws.write(i, 0, Data[i])
pyExcelerator is open-source; you should read it. According to my
reading of the version 0.6.3 source (which version are you using?), the
Workbook.save method calls the CompoundDoc.save method, which opens a
physical file with the supplied name, writes to it, and closes it.
AFAICT, there is no hint of anything that could cause the symptoms you
I did a quick test using the following code and your function (with
appropriate module name) on version 0.6.3. It worked as expected (Python
2.4.3 on Windows XP). Which Python version are you using? What OS?
for k in range(3):
writeData("zzz%d.xls" % k, range(k, k+10))
Perhaps the problem is closer to home; try inserting
before each call to your function, and
os.system("ls -l " + fn) # or "dir " + fn, or whatever it takes
after each call.
More information about the Python-list