#!/usr/bin/env python
# -*- coding: windows-1251 -*-
# Copyright (C) 2005 Kiseliov Roman
__rev_id__ = """$Id: xls2csv-gerry.py,v 1.1 2005/10/26 07:44:24 rvk Exp $"""
###--xls2csv.py
###--modified by gerry 10/5/2005
###--with args, processes just those files
###--with no args, processes all csvs in the current directory
###--args may include or exclude the .xls suffix
###--no files are written for empty sheets
from pyExcelerator import *
import re
import os
import sys
def process(fname):
if fname[-4:] != ".xls":
fname = fname + ".xls"
print "processing", fname
for sheet_name, values in parse_xls(fname, 'cp1251'): # parse_xls(arg) -- default encoding
print " starting", sheet_name,
keys = values.keys()
rows = []
cols = []
for key in keys:
row, col = key
if not col in cols: cols.append(col)
if not row in rows: rows.append(row)
try: n_rows = max(rows)
except:
print "which is null."
continue
n_cols = max(cols)
print "which has", n_rows+1, "rows, and", n_cols+1, "columns."
ofile = open(fname + "." + sheet_name + ".csv", "w")
for row in range(n_rows+1):
line = ""
for col in range(n_cols+1):
try: cell = str(values[(row, col)])
except: cell = ""
if commas.search(cell) != None: cell = '"' + cell + '"'
line = line + cell + ","
print >> ofile, line[:-1]
ofile.close()
print '----------------'
commas = re.compile(",")
try: args = sys.argv[1:]
except: args = []
if len(args) < 1:
fnames = os.listdir(".")
fnames.sort()
for fname in fnames:
parts = fname.split(".")
if parts[-1] != "xls": continue
process(fname)
sys.exit()
else:
for arg in args:
process(arg)
|