diff --git a/HISTORY.html b/HISTORY.html
index 760599d..cfe6f18 100644
--- a/HISTORY.html
+++ b/HISTORY.html
@@ -2,74 +2,15 @@
-xlwt HISTORY
+xlwt-future history
+ Version 0.8.0: Fork of github.com/python-excel/xlwt that adds Python 3 support via python-future: 2013-11-01. Home of the fork: github.com/PythonCharmers/xlwt-future
+
+ Version 0.7.5, released 2013-04
+
Version 0.7.2, released to the general public via PyPI -- 2009-06-01
-
Revision: 3844
-
Author: sjmachin
-
Date: 11:02:54 AM, Wednesday, 20 May 2009
-
Message:
-
Added function Utils.rowcol_pair_to_cellrange. (0, 0, 65535, 255) -> "A1:IV65536"
-
----
-
Modified : /xlwt/trunk/xlwt/Utils.py
-
-
Revision: 3843
-
Author: sjmachin
-
Date: 1:46:05 AM, Tuesday, 19 May 2009
-
Message:
-
Removed Worksheet property show_empty_as_zero,
-
and added attribute show_zero_values (default: 1 == True).
-
----
-
Modified : /xlwt/trunk/xlwt/Worksheet.py
-
-
Revision: 3841
-
Author: sjmachin
-
Date: 11:58:51 AM, Wednesday, 13 May 2009
-
Message:
-
Fixed formula code generation problem with formulas
-
including MAX/SUM/etc functions with arguments like A1+123.
-
Updated version to 0.7.2alpha.
-
----
-
Modified : /xlwt/trunk/README.html
-
Modified : /xlwt/trunk/setup.py
-
Modified : /xlwt/trunk/xlwt/ExcelFormulaParser.py
-
Modified : /xlwt/trunk/xlwt/ExcelMagic.py
-
Modified : /xlwt/trunk/xlwt/__init__.py
-
Modified : /xlwt/trunk/xlwt/excel-formula.g
-
-
Revision: 3816
-
Author: sjmachin
-
Date: 8:31:39 PM, Tuesday, 24 March 2009
-
Message:
-
Added .../doc/pattern_examples.xls and put a pointer to it
-
in the easyxf part of Style.py.
-
----
-
Modified : /xlwt/trunk/xlwt/Style.py
-
Added : /xlwt/trunk/xlwt/doc/pattern_examples.xls
-
-
Revision: 3815
-
Author: sjmachin
-
Date: 7:54:52 PM, Tuesday, 24 March 2009
-
Message:
-
Fixed Row.set_cell_formula() bug introduced in 0.7.1.
-
Fixed bug(?) with SCL/magnification handling causing(?) Excel
-
to raise a dialogue box if sheet is set to open in page preview mode
-
and user then switches to normal view.
-
Added color and colour as synonyms for font.colour_index in easyxf.
-
Removed unused attribute Row.__has_default_format.
-
----
-
Modified : /xlwt/trunk/xlwt/Row.py
-
Modified : /xlwt/trunk/xlwt/Style.py
-
Modified : /xlwt/trunk/xlwt/Worksheet.py
-
-
-
-
-
-
-
Version 0.7.1, released to the general public via PyPI -- 2009-03-04
Version 0.7.0, released to the general public via PyPI
diff --git a/README.html b/README.html
index d7c9bb9..4431018 100644
--- a/README.html
+++ b/README.html
@@ -14,15 +14,15 @@
Licence: BSD-style (see licences.py)
-Version of xlwt: 0.7.2
+
Version of xlwt: 0.8.0
-Version of Python required: 2.3 to 2.6
+
Version of Python required: 2.6/2.7 or 3.3
-External modules required: None
+
External modules required: future
-The package itself is pure Python with no dependencies on modules or packages
-outside the standard Python distribution.
+The package itself is pure Python with only one dependency outside the standard
+Python distribution (the future
package for Py2/3 compatibility).
Quick start:
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..f4ec003
--- /dev/null
+++ b/README.md
@@ -0,0 +1,8 @@
+xlwt-future
+===========
+
+Fork of https://github.com/python-excel/xlwt that supports both Python 3.3 and
+Python 2.6/2.7. The original supports Python 2.3 to 2.6 only.
+
+Library to create spreadsheet files compatible with MS Excel 97/2000/XP/2003
+XLS files, on any platform.
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..3e14c5e
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1 @@
+future>=0.8.2
diff --git a/setup.py b/setup.py
index 9d3f5fa..48efa3e 100644
--- a/setup.py
+++ b/setup.py
@@ -1,25 +1,35 @@
#!/usr/bin/env python
-from distutils.core import setup
-from xlwt import __VERSION__
+try:
+ from setuptools import setup
+except ImportError:
+ from distutils.core import setup
+
+__VERSION__ = '0.8.0'
DESCRIPTION = (
'Library to create spreadsheet files compatible with '
'MS Excel 97/2000/XP/2003 XLS files, '
- 'on any platform, with Python 2.3 to 2.7'
+ 'on any platform, with Python 2.6 to 3.3'
)
LONG_DESCRIPTION = """\
+Py2.6+ and Py3.3+ fork of xlwt.
+
xlwt is a library for generating spreadsheet files that are compatible
with Excel 97/2000/XP/2003, OpenOffice.org Calc, and Gnumeric. xlwt has
full support for Unicode. Excel spreadsheets can be generated on any
platform without needing Excel or a COM server. The only requirement is
-Python 2.3 to 2.7.
+Python 2.6, 2.7, or 3.3.
"""
CLASSIFIERS = [
'Operating System :: OS Independent',
'Programming Language :: Python',
+ 'Programming Language :: Python :: 2.6',
+ 'Programming Language :: Python :: 2.7',
+ 'Programming Language :: Python :: 3',
+ 'Programming Language :: Python :: 3.3',
'License :: OSI Approved :: BSD License',
'Development Status :: 5 - Production/Stable',
'Intended Audience :: Developers',
@@ -34,12 +44,12 @@
)
setup(
- name = 'xlwt',
+ name = 'xlwt-future',
version = __VERSION__,
maintainer = 'John Machin',
maintainer_email = 'sjmachin@lexicon.net',
url = 'http://www.python-excel.org/',
- download_url = 'http://pypi.python.org/pypi/xlwt',
+ download_url = 'http://pypi.python.org/pypi/xlwt-future',
description = DESCRIPTION,
long_description = LONG_DESCRIPTION,
license = 'BSD',
@@ -54,4 +64,5 @@
'tests/*.*',
],
},
+ install_requires=['future>=0.8.2']
)
diff --git a/tests/RKbug.py b/tests/RKbug.py
index df2e85e..54aacd7 100644
--- a/tests/RKbug.py
+++ b/tests/RKbug.py
@@ -1,6 +1,13 @@
-from xlwt import *
+from __future__ import print_function
+from __future__ import absolute_import
+from __future__ import division
+from future.builtins import *
+
import sys
-from struct import pack, unpack
+
+from xlwt import *
+from xlwt.Utils import pack, unpack
+
def cellname(rowx, colx):
# quick kludge, works up to 26 cols :-)
@@ -8,13 +15,13 @@ def cellname(rowx, colx):
def RK_pack_check(num, anint, case=None):
if not(-0x7fffffff - 1 <= anint <= 0x7fffffff):
- print "RK_pack_check: not a signed 32-bit int: %r (%r); case: %r" \
- % (anint, hex(anint), case)
+ print("RK_pack_check: not a signed 32-bit int: %r (%r); case: %r" \
+ % (anint, hex(anint), case))
pstr = pack(" portion_counter:
+ if str_chunk_num != portion_counter:
portion_counter = str_chunk_num
abs_stream_pos += portions_len[portion_counter-1]
#print hex(abs_stream_pos)
@@ -1300,11 +1301,11 @@ def __init__(self, options, first_visible_row, first_visible_col,
grid_colour,
0x00,
preview_magn, normal_magn,
- 0x00L)
+ 0x00)
if scl_magn is not None:
self._scl_rec = pack('<4H', 0x00A0, 4, scl_magn, 100)
else:
- self._scl_rec = ''
+ self._scl_rec = b''
def get(self):
return self.get_rec_header() + self._rec_data + self._scl_rec
@@ -1491,7 +1492,7 @@ def __init__(self, merged_list):
i = len(merged_list) - 1
while i >= 0:
j = 0
- merged = ''
+ merged = b''
while (i >= 0) and (j < 0x403):
r1, r2, c1, c2 = merged_list[i]
merged += pack('<4H', r1, r2, c1, c2)
@@ -2378,7 +2379,7 @@ def __init__(self, refs):
def get(self):
res = []
nrefs = len(self.refs)
- for idx in xrange(0, nrefs, _maxRefPerRecord):
+ for idx in range(0, nrefs, _maxRefPerRecord):
chunk = self.refs[idx:idx+_maxRefPerRecord]
krefs = len(chunk)
if idx: # CONTINUE record
@@ -2387,7 +2388,7 @@ def get(self):
header = pack("
# Portions are Copyright (c) 2002-2004 John McNamara (Perl Spreadsheet::WriteExcel)
-from BIFFRecords import BiffRecord
-from struct import pack, unpack
+from __future__ import (absolute_import, division, unicode_literals)
+from .BIFFRecords import BiffRecord
+from .Utils import pack, unpack
+from future.builtins import *
def _size_col(sheet, col):
@@ -192,7 +194,7 @@ def _process_bitmap(bitmap):
"""
# Open file and binmode the data in case the platform needs it.
- fh = file(bitmap, "rb")
+ fh = open(bitmap, "rb")
try:
# Slurp the file into a string.
data = fh.read()
diff --git a/xlwt/Cell.py b/xlwt/Cell.py
index 23adf8a..fa518d9 100644
--- a/xlwt/Cell.py
+++ b/xlwt/Cell.py
@@ -1,7 +1,10 @@
# -*- coding: windows-1252 -*-
+from __future__ import absolute_import
+from __future__ import division
from struct import unpack, pack
-import BIFFRecords
+from . import BIFFRecords
+from future.builtins import *
class StrCell(object):
__slots__ = ["rowx", "colx", "xf_idx", "sst_idx"]
@@ -193,8 +196,8 @@ def _get_cells_biff_data_mul(rowx, cell_items):
continue
lastcolx = icolx
j = i
- packed_record = ''
- for j in xrange(i+1, nitems):
+ packed_record = b''
+ for j in range(i+1, nitems):
jcolx, jcell = cell_items[j]
if jcolx != lastcolx + 1:
nexti = j
@@ -223,7 +226,7 @@ def _get_cells_biff_data_mul(rowx, cell_items):
# MULRK record
nc = lastcolx - icolx + 1
pieces.append(pack('<4H', 0x00BD, 6 * nc + 6, rowx, icolx))
- pieces.append(''.join([pack('> 9
dir_sect_count = len(self.dir_stream) >> 9
-
+
total_sect_count = book_sect_count + dir_sect_count
SAT_sect_count = 0
MSAT_sect_count = 0
@@ -154,7 +156,7 @@ def __build_sat(self):
sect += 1
while sect < book_sect_count + MSAT_sect_count + SAT_sect_count:
- self.SAT_sect.append(sect)
+ self.SAT_sect.append(sect)
SAT[sect] = self.SID_USED_BY_SAT
sect += 1
@@ -205,17 +207,17 @@ def __build_sat(self):
def __build_header(self):
- doc_magic = '\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1'
- file_uid = '\x00'*16
- rev_num = '\x3E\x00'
- ver_num = '\x03\x00'
- byte_order = '\xFE\xFF'
+ doc_magic = b'\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1'
+ file_uid = b'\x00'*16
+ rev_num = b'\x3E\x00'
+ ver_num = b'\x03\x00'
+ byte_order = b'\xFE\xFF'
log_sect_size = struct.pack(' >= <= """):
- print t
- except TokenStreamException, e:
- print "error:", e
+ print(t)
+ except TokenStreamException as e:
+ print("error:", e)
diff --git a/xlwt/ExcelFormulaParser.py b/xlwt/ExcelFormulaParser.py
index 2c261b4..c404dfa 100644
--- a/xlwt/ExcelFormulaParser.py
+++ b/xlwt/ExcelFormulaParser.py
@@ -1,18 +1,15 @@
### $ANTLR 2.7.7 (20060930): "xlwt/excel-formula.g" -> "ExcelFormulaParser.py"$
### import antlr and other modules ..
+from __future__ import absolute_import
+from future.builtins import *
+
import sys
-import antlr
-
-version = sys.version.split()[0]
-if version < '2.2.1':
- False = 0
-if version < '2.3':
- True = not False
-### header action >>>
import struct
-import Utils
-from UnicodeUtils import upack1
-from ExcelMagic import *
+
+from . import antlr
+from . import Utils
+from .UnicodeUtils import upack1
+from .ExcelMagic import *
_RVAdelta = {"R": 0, "V": 0x20, "A": 0x40}
_RVAdeltaRef = {"R": 0, "V": 0x20, "A": 0x40, "D": 0x20}
@@ -76,7 +73,7 @@ def __init__(self, *args, **kwargs):
antlr.LLkParser.__init__(self, *args, **kwargs)
self.tokenNames = _tokenNames
### __init__ header action >>>
- self.rpn = ""
+ self.rpn = b""
self.sheet_references = []
self.xcall_references = []
### __init__ header action <<<
@@ -388,21 +385,21 @@ def primary(self,
chunklens = [len(chunk) for chunk in rpn_chunks]
skiplens = [0] * nc
skiplens[-1] = 3
- for ic in xrange(nc-1, 0, -1):
+ for ic in range(nc-1, 0, -1):
skiplens[ic-1] = skiplens[ic] + chunklens[ic] + 4
jump_pos = [2 * nc + 2]
- for ic in xrange(nc):
+ for ic in range(nc):
jump_pos.append(jump_pos[-1] + chunklens[ic] + 4)
chunk_shift = 2 * nc + 6 # size of tAttrChoose
- for ic in xrange(nc):
- for refx in xrange(ref_markers[ic], ref_markers[ic+1]):
+ for ic in range(nc):
+ for refx in range(ref_markers[ic], ref_markers[ic+1]):
ref = self.sheet_references[refx]
self.sheet_references[refx] = (ref[0], ref[1], ref[2] + chunk_shift)
chunk_shift += 4 # size of tAttrSkip
choose_rpn = []
choose_rpn.append(struct.pack(" max_argc or arg_count < min_argc:
- raise Exception, "%d parameters for function: %s" % (arg_count, func_tok.text)
+ raise Exception("%d parameters for function: %s" % (arg_count, func_tok.text))
if xcall:
func_ptg = ptgFuncVarR + _RVAdelta[func_type]
self.rpn += struct.pack("<2BH", func_ptg, arg_count + 1, 255) # 255 is magic XCALL function
@@ -669,7 +666,7 @@ def expr_list(self,
### generate bit set
def mk_tokenSet_0():
### var1
- data = [ 37681618946L, 0L]
+ data = [ 37681618946, 0]
return data
_tokenSet_0 = antlr.BitSet(mk_tokenSet_0())
diff --git a/xlwt/ExcelMagic.py b/xlwt/ExcelMagic.py
index 2c29262..1643075 100644
--- a/xlwt/ExcelMagic.py
+++ b/xlwt/ExcelMagic.py
@@ -2,6 +2,8 @@
"""
lots of Excel Magic Numbers
"""
+from __future__ import absolute_import, unicode_literals
+from future.builtins import *
# Boundaries BIFF8+
diff --git a/xlwt/Formatting.py b/xlwt/Formatting.py
index 76b8e8f..6ae1946 100644
--- a/xlwt/Formatting.py
+++ b/xlwt/Formatting.py
@@ -28,7 +28,9 @@
'''
-import BIFFRecords
+from __future__ import absolute_import
+
+from . import BIFFRecords
class Font(object):
diff --git a/xlwt/Row.py b/xlwt/Row.py
index 5664e87..a3f16b5 100644
--- a/xlwt/Row.py
+++ b/xlwt/Row.py
@@ -1,12 +1,16 @@
# -*- coding: windows-1252 -*-
-import BIFFRecords
-import Style
-from Cell import StrCell, BlankCell, NumberCell, FormulaCell, MulBlankCell, BooleanCell, ErrorCell, \
+from __future__ import absolute_import
+from __future__ import division
+from . import BIFFRecords
+from . import Style
+from .Cell import StrCell, BlankCell, NumberCell, FormulaCell, MulBlankCell, BooleanCell, ErrorCell, \
_get_cells_biff_data_mul
-import ExcelFormula
+from . import ExcelFormula
import datetime as dt
-from Formatting import Font
+from .Formatting import Font
+
+from future.builtins import *
try:
from decimal import Decimal
@@ -165,11 +169,11 @@ def insert_cell(self, col_index, cell_obj):
def insert_mulcells(self, colx1, colx2, cell_obj):
self.insert_cell(colx1, cell_obj)
- for col_index in xrange(colx1+1, colx2+1):
+ for col_index in range(colx1+1, colx2+1):
self.insert_cell(col_index, None)
def get_cells_biff_data(self):
- cell_items = [item for item in self.__cells.iteritems() if item[1] is not None]
+ cell_items = [item for item in self.__cells.items() if item[1] is not None]
cell_items.sort() # in column order
return _get_cells_biff_data_mul(self.__idx, cell_items)
# previously:
@@ -234,7 +238,7 @@ def write(self, col, label, style=Style.default_style):
self.__adjust_height(style)
self.__adjust_bound_col_idx(col)
style_index = self.__parent_wb.add_style(style)
- if isinstance(label, basestring):
+ if isinstance(label, bytes) or isinstance(label, str):
if len(label) > 0:
self.insert_cell(col,
StrCell(self.__idx, col, style_index, self.__parent_wb.add_str(label))
@@ -243,7 +247,7 @@ def write(self, col, label, style=Style.default_style):
self.insert_cell(col, BlankCell(self.__idx, col, style_index))
elif isinstance(label, bool): # bool is subclass of int; test bool first
self.insert_cell(col, BooleanCell(self.__idx, col, style_index, label))
- elif isinstance(label, (float, int, long, Decimal)):
+ elif isinstance(label, (float, Decimal)) or isinstance(label, int):
self.insert_cell(col, NumberCell(self.__idx, col, style_index, label))
elif isinstance(label, (dt.datetime, dt.date, dt.time)):
date_number = self.__excel_date_dt(label)
@@ -271,11 +275,12 @@ def __rich_text_helper(self, col, rich_text_list, style, style_index=None):
default_font = None
rt = []
for data in rich_text_list:
- if isinstance(data, basestring):
+ if isinstance(data, str) or isinstance(data, bytes):
s = data
font = default_font
elif isinstance(data, (list, tuple)):
- if not isinstance(data[0], basestring) or not isinstance(data[1], Font):
+ if not (isinstance(data[0], str) or isinstance(data[0], bytes)) \
+ or not isinstance(data[1], Font):
raise Exception ("Unexpected data type %r, %r" % (type(data[0]), type(data[1])))
s = data[0]
font = self.__parent_wb.add_font(data[1])
diff --git a/xlwt/Style.py b/xlwt/Style.py
index 2ebcffd..039e3d6 100644
--- a/xlwt/Style.py
+++ b/xlwt/Style.py
@@ -1,7 +1,11 @@
# -*- coding: windows-1252 -*-
-import Formatting
-from BIFFRecords import NumberFormatRecord, XFRecord, StyleRecord
+from __future__ import absolute_import, print_function, unicode_literals
+# -*- coding: windows-1252 -*-
+
+from . import Formatting
+from .BIFFRecords import NumberFormatRecord, XFRecord, StyleRecord
+from future.builtins import *
FIRST_USER_DEFINED_NUM_FORMAT_IDX = 164
@@ -178,7 +182,7 @@ def _add_font(self, font):
def get_biff_data(self):
- result = ''
+ result = b''
result += self._all_fonts()
result += self._all_num_formats()
result += self._all_cell_styles()
@@ -186,9 +190,9 @@ def get_biff_data(self):
return result
def _all_fonts(self):
- result = ''
+ result = b''
if self.style_compression:
- alist = self._font_x2id.items()
+ alist = list(self._font_x2id.items())
else:
alist = [(x, o) for o, x in self._font_id2x.items()]
alist.sort()
@@ -197,7 +201,7 @@ def _all_fonts(self):
return result
def _all_num_formats(self):
- result = ''
+ result = b''
alist = [
(v, k)
for k, v in self._num_formats.items()
@@ -209,11 +213,11 @@ def _all_num_formats(self):
return result
def _all_cell_styles(self):
- result = ''
+ result = b''
for i in range(0, 16):
result += XFRecord(self._default_xf, 'style').get()
if self.style_compression == 2:
- alist = self._xf_x2id.items()
+ alist = list(self._xf_x2id.items())
else:
alist = [(x, o) for o, x in self._xf_id2x.items()]
alist.sort()
@@ -658,11 +662,11 @@ def _parse_strg_to_obj(strg, obj, parse_dict,
v = ' '.join(guff[1:])
if not v:
raise EasyXFCallerError("no value supplied for %s.%s" % (section, k))
- for counter in xrange(2):
+ for counter in range(2):
result = section_dict.get(k)
if result is None:
raise EasyXFCallerError('%s.%s is not a known attribute' % (section, k))
- if not isinstance(result, basestring):
+ if not (isinstance(result, bytes) or isinstance(result, str)):
break
# synonym
old_k = k
@@ -691,7 +695,7 @@ def _parse_strg_to_obj(strg, obj, parse_dict,
orig = getattr(section_obj, k)
except AttributeError:
raise EasyXFAuthorError('%s.%s in dictionary but not in supplied object' % (section, k))
- if debug: print "+++ %s.%s = %r # %s; was %r" % (section, k, value, v, orig)
+ if debug: print("+++ %s.%s = %r # %s; was %r" % (section, k, value, v, orig))
setattr(section_obj, k, value)
def easyxf(strg_to_parse="", num_format_str=None,
diff --git a/xlwt/UnicodeUtils.py b/xlwt/UnicodeUtils.py
index 9d5a266..9d0077f 100644
--- a/xlwt/UnicodeUtils.py
+++ b/xlwt/UnicodeUtils.py
@@ -40,14 +40,17 @@
'''
-from struct import pack
+from __future__ import absolute_import, division, unicode_literals
+from future.builtins import *
+
+from .Utils import pack, unpack
def upack2(s, encoding='ascii'):
# If not unicode, make it so.
- if isinstance(s, unicode):
+ if isinstance(s, str):
us = s
else:
- us = unicode(s, encoding)
+ us = str(s, encoding)
# Limit is based on number of content characters
# (not on number of bytes in packed result)
len_us = len(us)
@@ -77,8 +80,8 @@ def upack2rt(rt, encoding='ascii'):
# convert rt strings to unicode if not already unicode
# also generate the formatting run for the styles added
for s, fontx in rt:
- if not isinstance(s, unicode):
- s = unicode(s, encoding)
+ if not isinstance(s, str):
+ s = str(s, encoding)
us += s
if fontx is not None:
# code in Rows.py ensures that
@@ -104,10 +107,10 @@ def upack2rt(rt, encoding='ascii'):
def upack1(s, encoding='ascii'):
# Same as upack2(), but with a one-byte length field.
- if isinstance(s, unicode):
+ if isinstance(s, str):
us = s
else:
- us = unicode(s, encoding)
+ us = str(s, encoding)
len_us = len(us)
if len_us > 255:
raise Exception('String longer than 255 characters')
diff --git a/xlwt/Utils.py b/xlwt/Utils.py
index 4ef94da..3934dcc 100644
--- a/xlwt/Utils.py
+++ b/xlwt/Utils.py
@@ -2,8 +2,13 @@
# Utilities for work with reference to cells and with sheetnames
+from __future__ import absolute_import, unicode_literals
+from future.builtins import *
+from future import utils
+
import re
-from ExcelMagic import MAX_ROW, MAX_COL
+import struct
+from .ExcelMagic import MAX_ROW, MAX_COL
_re_cell_ex = re.compile(r"(\$?)([A-I]?[A-Z])(\$?)(\d+)", re.IGNORECASE)
_re_row_range = re.compile(r"\$?(\d+):\$?(\d+)")
@@ -12,12 +17,30 @@
_re_cell_ref = re.compile(r"\$?([A-I]?[A-Z]\$?\d+)", re.IGNORECASE)
+def pack(*args, **kwargs):
+ """struct.pack() must take a native string as its first argument. So we
+ wrap it:
+ """
+ fmt = args[0]
+ rest = args[1:]
+ return struct.pack(utils.native_str(fmt), *rest, **kwargs)
+
+
+def unpack(*args, **kwargs):
+ """struct.unpack() must take a native string as its first argument. So we
+ wrap it:
+ """
+ fmt = args[0]
+ rest = args[1:]
+ return struct.unpack(utils.native_str(fmt), *rest, **kwargs)
+
+
def col_by_name(colname):
"""'A' -> 0, 'Z' -> 25, 'AA' -> 26, etc
"""
col = 0
power = 1
- for i in xrange(len(colname)-1, -1, -1):
+ for i in range(len(colname)-1, -1, -1):
ch = colname[i]
col += (ord(ch) - ord('A') + 1) * power
power *= 26
diff --git a/xlwt/Workbook.py b/xlwt/Workbook.py
index fecb957..9163c9b 100644
--- a/xlwt/Workbook.py
+++ b/xlwt/Workbook.py
@@ -40,8 +40,11 @@
EOF
'''
-import BIFFRecords
-import Style
+from __future__ import absolute_import, unicode_literals
+from future.builtins import *
+
+from . import BIFFRecords
+from . import Style
class Workbook(object):
@@ -338,8 +341,8 @@ def rt_index(self, rt):
return self.__sst.rt_index(rt)
def add_sheet(self, sheetname, cell_overwrite_ok=False):
- import Worksheet, Utils
- if not isinstance(sheetname, unicode):
+ from xlwt import Worksheet, Utils
+ if not isinstance(sheetname, str):
sheetname = sheetname.decode(self.encoding)
if not Utils.valid_sheet_name(sheetname):
raise Exception("invalid worksheet name %r" % sheetname)
@@ -347,7 +350,7 @@ def add_sheet(self, sheetname, cell_overwrite_ok=False):
if lower_name in self.__worksheet_idx_from_name:
raise Exception("duplicate worksheet name %r" % sheetname)
self.__worksheet_idx_from_name[lower_name] = len(self.__worksheets)
- self.__worksheets.append(Worksheet.Worksheet(sheetname, self, cell_overwrite_ok))
+ self.__worksheets.append(Worksheet(sheetname, self, cell_overwrite_ok))
return self.__worksheets[-1]
def get_sheet(self, sheetnum):
@@ -430,7 +433,7 @@ def add_sheet_reference(self, formula):
self.setup_xcall()
# print funcname, self._supbook_xref
patches.append((offset, self._xcall_supbook_ref))
- if not isinstance(funcname, unicode):
+ if not isinstance(funcname, str):
funcname = funcname.decode(self.encoding)
if funcname in self._xcall_xref:
idx = self._xcall_xref[funcname]
@@ -505,7 +508,7 @@ def __codepage_rec(self):
def __country_rec(self):
if not self.__country_code:
- return ''
+ return b''
return BIFFRecords.CountryRecord(self.__country_code, self.__country_code).get()
def __dsf_rec(self):
@@ -534,7 +537,7 @@ def __all_fonts_num_formats_xf_styles_rec(self):
def __palette_rec(self):
if self.__custom_palette_b8 is None:
- return ''
+ return b''
info = BIFFRecords.PaletteRecord(self.__custom_palette_b8).get()
return info
@@ -553,12 +556,12 @@ def __boundsheets_rec(self, data_len_before, data_len_after, sheet_biff_lens):
boundsheets_len = 0
for sheet in self.__worksheets:
boundsheets_len += len(BIFFRecords.BoundSheetRecord(
- 0x00L, sheet.visibility, sheet.name, self.encoding
+ 0x00, sheet.visibility, sheet.name, self.encoding
).get())
start = data_len_before + boundsheets_len + data_len_after
- result = ''
+ result = b''
for sheet_biff_len, sheet in zip(sheet_biff_lens, self.__worksheets):
result += BIFFRecords.BoundSheetRecord(
start, sheet.visibility, sheet.name, self.encoding
@@ -588,23 +591,23 @@ def __all_links_rec(self):
raise Exception('unknown supbook stype %r' % stype)
if len(self.__sheet_refs) > 0:
# get references in index order
- temp = [(idx, ref) for ref, idx in self.__sheet_refs.items()]
+ temp = [(idx, ref) for ref, idx in list(self.__sheet_refs.items())]
temp.sort()
temp = [ref for idx, ref in temp]
externsheet_record = BIFFRecords.ExternSheetRecord(temp).get()
pieces.append(externsheet_record)
- return ''.join(pieces)
+ return b''.join(pieces)
def __sst_rec(self):
return self.__sst.get_biff_record()
def __ext_sst_rec(self, abs_stream_pos):
- return ''
+ return b''
#return BIFFRecords.ExtSSTRecord(abs_stream_pos, self.sst_record.str_placement,
#self.sst_record.portions_len).get()
def get_biff_data(self):
- before = ''
+ before = b''
before += self.__bof_rec()
before += self.__intf_hdr_rec()
before += self.__intf_mms_rec()
@@ -641,7 +644,7 @@ def get_biff_data(self):
eof = self.__eof_rec()
self.__worksheets[self.__active_sheet].selected = True
- sheets = ''
+ sheets = b''
sheet_biff_lens = []
for sheet in self.__worksheets:
data = sheet.get_biff_data()
@@ -656,7 +659,7 @@ def get_biff_data(self):
return before + bundlesheets + after + ext_sst + eof + sheets
def save(self, filename):
- import CompoundDoc
+ from . import CompoundDoc
doc = CompoundDoc.XlsDoc()
doc.save(filename, self.get_biff_data())
diff --git a/xlwt/Worksheet.py b/xlwt/Worksheet.py
index cd90ccd..acafc03 100644
--- a/xlwt/Worksheet.py
+++ b/xlwt/Worksheet.py
@@ -34,9 +34,12 @@
EOF
'''
-import BIFFRecords
-import Bitmap
-import Style
+from __future__ import absolute_import, unicode_literals
+from future.builtins import *
+
+from . import BIFFRecords
+from . import Bitmap
+from . import Style
import tempfile
class Worksheet(object):
@@ -48,11 +51,11 @@ class Worksheet(object):
## Constructor
#################################################################
def __init__(self, sheetname, parent_book, cell_overwrite_ok=False):
- import Row
- self.Row = Row.Row
+ from xlwt import Row
+ self.Row = Row
- import Column
- self.Column = Column.Column
+ from xlwt import Column
+ self.Column = Column
self.__name = sheetname
self.__parent = parent_book
@@ -61,7 +64,7 @@ def __init__(self, sheetname, parent_book, cell_overwrite_ok=False):
self.__rows = {}
self.__cols = {}
self.__merged_ranges = []
- self.__bmp_rec = ''
+ self.__bmp_rec = b''
self.__show_formulas = 0
self.__show_grid = 1
@@ -187,7 +190,7 @@ def __init__(self, sheetname, parent_book, cell_overwrite_ok=False):
self.__obj_protect = 0
self.__protect = 0
self.__scen_protect = 0
- self.__password = ''
+ self.__password = b''
self.last_used_row = 0
self.first_used_row = 65535
@@ -719,7 +722,7 @@ def get_horz_page_breaks(self):
def set_header_str(self, value):
if isinstance(value, str):
- value = unicode(value, self.__parent.encoding)
+ value = str(value, self.__parent.encoding)
self.__header_str = value
def get_header_str(self):
@@ -731,7 +734,7 @@ def get_header_str(self):
def set_footer_str(self, value):
if isinstance(value, str):
- value = unicode(value, self.__parent.encoding)
+ value = str(value, self.__parent.encoding)
self.__footer_str = value
def get_footer_str(self):
@@ -1143,7 +1146,7 @@ def __eof_rec(self):
return BIFFRecords.EOFRecord().get()
def __colinfo_rec(self):
- result = ''
+ result = b''
for col in self.__cols:
result += self.__cols[col].get_biff_record()
return result
@@ -1194,7 +1197,7 @@ def __window2_rec(self):
def __panes_rec(self):
if self.__vert_split_pos is None and self.__horz_split_pos is None:
- return ""
+ return b""
if self.__vert_split_pos is None:
self.__vert_split_pos = 0
@@ -1231,22 +1234,22 @@ def __panes_rec(self):
# when split, the active pain can be set as required:
active_pane = self.active_pane
- result = BIFFRecords.PanesRecord(*map(int, (
+ result = BIFFRecords.PanesRecord(*list(map(int, (
self.__vert_split_pos,
self.__horz_split_pos,
self.__horz_split_first_visible,
self.__vert_split_first_visible,
active_pane
- ))).get()
+ )))).get()
return result
def __row_blocks_rec(self):
result = []
- for row in self.__rows.itervalues():
+ for row in self.__rows.values():
result.append(row.get_row_biff_data())
result.append(row.get_cells_biff_data())
- return ''.join(result)
+ return b''.join(result)
def __merged_rec(self):
return BIFFRecords.MergedCellsRecord(self.__merged_ranges).get()
@@ -1255,7 +1258,7 @@ def __bitmaps_rec(self):
return self.__bmp_rec
def __calc_settings_rec(self):
- result = ''
+ result = b''
result += BIFFRecords.CalcModeRecord(self.__calc_mode & 0x01).get()
result += BIFFRecords.CalcCountRecord(self.__calc_count & 0xFFFF).get()
result += BIFFRecords.RefModeRecord(self.__RC_ref_mode & 0x01).get()
@@ -1265,7 +1268,7 @@ def __calc_settings_rec(self):
return result
def __print_settings_rec(self):
- result = ''
+ result = b''
result += BIFFRecords.PrintHeadersRecord(self.__print_headers).get()
result += BIFFRecords.PrintGridLinesRecord(self.__print_grid).get()
result += BIFFRecords.GridSetRecord(self.__grid_set).get()
@@ -1305,7 +1308,7 @@ def __print_settings_rec(self):
return result
def __protection_rec(self):
- result = ''
+ result = b''
result += BIFFRecords.ProtectRecord(self.__protect).get()
result += BIFFRecords.ScenProtectRecord(self.__scen_protect).get()
result += BIFFRecords.WindowProtectRecord(self.__wnd_protect).get()
@@ -1342,7 +1345,7 @@ def get_biff_data(self):
self.__panes_rec(),
self.__eof_rec(),
])
- return ''.join(result)
+ return b''.join(result)
def flush_row_data(self):
if self.row_tempfile is None:
diff --git a/xlwt/__init__.py b/xlwt/__init__.py
index a0fd772..6c3b5fe 100644
--- a/xlwt/__init__.py
+++ b/xlwt/__init__.py
@@ -1,9 +1,11 @@
-__VERSION__ = '0.7.5'
+from __future__ import absolute_import
-from Workbook import Workbook
-from Worksheet import Worksheet
-from Row import Row
-from Column import Column
-from Formatting import Font, Alignment, Borders, Pattern, Protection
-from Style import XFStyle, easyxf, easyfont, add_palette_colour
-from ExcelFormula import *
+from .Workbook import Workbook
+from .Worksheet import Worksheet
+from .Row import Row
+from .Column import Column
+from .Formatting import Font, Alignment, Borders, Pattern, Protection
+from .Style import XFStyle, easyxf, easyfont, add_palette_colour
+from .ExcelFormula import *
+
+__VERSION__ = '0.8.0'
diff --git a/xlwt/antlr.py b/xlwt/antlr.py
index f77314f..1aaf269 100644
--- a/xlwt/antlr.py
+++ b/xlwt/antlr.py
@@ -41,13 +41,11 @@
## End of contents of the ANTLR 2.7.7 LICENSE.txt ########################
## get sys module
+from __future__ import (absolute_import, division, print_function)
+from future.builtins import *
+from future.utils import PY2, PY3, implements_iterator
import sys
-version = sys.version.split()[0]
-if version < '2.2.1':
- False = 0
-if version < '2.3':
- True = not False
###xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx###
### global symbols ###
@@ -84,7 +82,7 @@ def version():
def error(fmt,*args):
if fmt:
- print "error: ", fmt % tuple(args)
+ print("error: ", fmt % tuple(args))
def ifelse(cond,_then,_else):
if cond :
@@ -96,7 +94,9 @@ def ifelse(cond,_then,_else):
def is_string_type(x):
# return (isinstance(x,str) or isinstance(x,unicode))
# Simplify; xlwt doesn't support Python < 2.3
- return isinstance(basestring)
+ # return isinstance(x, basestring)
+ # Complicate again: xlwt does support Python 3.x
+ return isinstance(x, str) or isinstance(x, bytes)
def assert_string_type(x):
assert is_string_type(x)
@@ -590,9 +590,9 @@ def toString(self):
Token.badToken = Token( type=INVALID_TYPE, text="")
if __name__ == "__main__":
- print "testing .."
+ print("testing ..")
T = Token.badToken
- print T
+ print(T)
###xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx###
### CommonToken ###
@@ -663,16 +663,16 @@ def toString(self):
if __name__ == '__main__' :
T = CommonToken()
- print T
+ print(T)
T = CommonToken(col=15,line=1,text="some text", type=5)
- print T
+ print(T)
T = CommonToken()
T.setLine(1).setColumn(15).setText("some text").setType(5)
- print T
- print T.getLine()
- print T.getColumn()
- print T.getText()
- print T.getType()
+ print(T)
+ print(T.getLine())
+ print(T.getColumn())
+ print(T.getText())
+ print(T.getType())
###xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx###
### CommonHiddenStreamToken ###
@@ -852,7 +852,7 @@ def fill(self,amount):
### use unicode chars instead of ASCII ..
self.queue.append(c)
- except Exception,e:
+ except Exception as e:
raise CharStreamIOException(e)
##except: # (mk) Cannot happen ...
##error ("unexpected exception caught ..")
@@ -900,6 +900,7 @@ def __iter__(self):
### TokenStreamIterator ###
###xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx###
+@implements_iterator
class TokenStreamIterator(object):
def __init__(self,inst):
if isinstance(inst,TokenStream):
@@ -907,7 +908,7 @@ def __init__(self,inst):
return
raise TypeError("TokenStreamIterator requires TokenStream object")
- def next(self):
+ def __next__(self):
assert self.inst
item = self.inst.nextToken()
if not item or item.isEOF():
@@ -942,7 +943,7 @@ def nextToken(self):
while 1:
try:
return self._input.nextToken()
- except TokenStreamRetryException,r:
+ except TokenStreamRetryException as r:
### just retry "forever"
pass
@@ -1383,23 +1384,23 @@ def tab(self) :
self.setColumn(nc)
def panic(self,s='') :
- print "CharScanner: panic: " + s
+ print("CharScanner: panic: " + s)
sys.exit(1)
def reportError(self,ex) :
- print ex
+ print(ex)
def reportError(self,s) :
if not self.getFilename():
- print "error: " + str(s)
+ print("error: " + str(s))
else:
- print self.getFilename() + ": error: " + str(s)
+ print(self.getFilename() + ": error: " + str(s))
def reportWarning(self,s) :
if not self.getFilename():
- print "warning: " + str(s)
+ print("warning: " + str(s))
else:
- print self.getFilename() + ": warning: " + str(s)
+ print(self.getFilename() + ": warning: " + str(s))
def resetText(self) :
self.text.setLength(0)
@@ -1459,16 +1460,16 @@ def toLower(self,c):
return c.__class__.lower()
def traceIndent(self):
- print ' ' * self.traceDepth
+ print(' ' * self.traceDepth)
def traceIn(self,rname):
self.traceDepth += 1
self.traceIndent()
- print "> lexer %s c== %s" % (rname,self.LA(1))
+ print("> lexer %s c== %s" % (rname,self.LA(1)))
def traceOut(self,rname):
self.traceIndent()
- print "< lexer %s c== %s" % (rname,self.LA(1))
+ print("< lexer %s c== %s" % (rname,self.LA(1)))
self.traceDepth -= 1
def uponEOF(self):
@@ -1532,8 +1533,8 @@ def filterdefault(self,la1,*args):
try:
func=args[0]
args=args[1:]
- apply(func,args)
- except RecognitionException, e:
+ func(*args)
+ except RecognitionException as e:
## catastrophic failure
self.reportError(e);
self.consume();
@@ -1558,6 +1559,7 @@ def set_return_token(self,_create,_token,_ttype,_offset):
### CharScannerIterator ###
###xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx###
+@implements_iterator
class CharScannerIterator:
def __init__(self,inst):
@@ -1566,7 +1568,7 @@ def __init__(self,inst):
return
raise TypeError("CharScannerIterator requires CharScanner object")
- def next(self):
+ def __next__(self):
assert self.inst
item = self.inst.nextToken()
if not item or item.isEOF():
@@ -1581,6 +1583,17 @@ def next(self):
### a long is of any size. That means we can use a single long as the
### bitset (!), ie. Python would do almost all the work (TBD).
+def longify(data):
+ """
+ Turns data (a list or int or long) into a list of longs
+ """
+ if not data:
+ return [int(0)]
+ if not isinstance(data,list):
+ return [int(data)]
+ return list(map(int, data)) # same as returning data, but safer (data must be int-like
+
+
class BitSet(object):
BITS = 64
NIBBLE = 4
@@ -1588,28 +1601,16 @@ class BitSet(object):
MOD_MASK = BITS -1
def __init__(self,data=None):
- if not data:
- BitSet.__init__(self,[long(0)])
- return
- if isinstance(data,int):
- BitSet.__init__(self,[long(data)])
- return
- if isinstance(data,long):
- BitSet.__init__(self,[data])
- return
- if not isinstance(data,list):
+ try:
+ self.data = longify(data)
+ except ValueError:
raise TypeError("BitSet requires integer, long, or " +
"list argument")
- for x in data:
- if not isinstance(x,long):
- raise TypeError(self,"List argument item is " +
- "not a long: %s" % (x))
- self.data = data
def __str__(self):
bits = len(self.data) * BitSet.BITS
s = ""
- for i in xrange(0,bits):
+ for i in range(0,bits):
if self.at(i):
s += "1"
else:
@@ -1648,7 +1649,7 @@ def wordNumber(self,bit):
def bitMask(self,bit):
pos = bit & BitSet.MOD_MASK ## bit mod BITS
- return (1L << pos)
+ return (1 << pos)
def set(self,bit,on=True):
# grow bitset as required (use with care!)
@@ -1656,8 +1657,8 @@ def set(self,bit,on=True):
mask = self.bitMask(bit)
if i>=len(self.data):
d = i - len(self.data) + 1
- for x in xrange(0,d):
- self.data.append(0L)
+ for x in range(0,d):
+ self.data.append(0)
assert len(self.data) == i+1
if on:
self.data[i] |= mask
@@ -1684,12 +1685,12 @@ def at(self,bit):
def illegalarg_ex(func):
raise ValueError(
"%s is only valid if parser is built for debugging" %
- (func.func_name))
+ (func.__name__))
def runtime_ex(func):
raise RuntimeException(
"%s is only valid if parser is built for debugging" %
- (func.func_name))
+ (func.__name__))
###xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx###
### TokenBuffer ###
@@ -1949,16 +1950,16 @@ def reportError(self,x) :
col = x.getLine()
text = x.getText()
fmt = fmt + 'unexpected symbol at line %s (column %s) : "%s"'
- print >>sys.stderr, fmt % (line,col,text)
+ print(fmt % (line,col,text), file=sys.stderr)
else:
- print >>sys.stderr, fmt,str(x)
+ print(fmt,str(x), file=sys.stderr)
def reportWarning(self,s):
f = self.getFilename()
if f:
- print "%s:warning: %s" % (f,str(x))
+ print("%s:warning: %s" % (f,str(x)))
else:
- print "warning: %s" % (str(x))
+ print("warning: %s" % (str(x)))
def rewind(self, pos) :
self.inputState.input.rewind(pos)
@@ -1986,7 +1987,7 @@ def setTokenBuffer(self, t) :
self.inputState.input = t
def traceIndent(self):
- print " " * self.traceDepth
+ print(" " * self.traceDepth)
def traceIn(self,rname):
self.traceDepth += 1
@@ -2075,20 +2076,20 @@ def set_k(self,index,*args):
self.k = 1
def trace(self,ee,rname):
- print type(self)
+ print(type(self))
self.traceIndent()
guess = ""
if self.inputState.guessing > 0:
guess = " [guessing]"
- print(ee + rname + guess)
- for i in xrange(1,self.k+1):
+ print((ee + rname + guess))
+ for i in range(1,self.k+1):
if i != 1:
print(", ")
if self.LT(i) :
v = self.LT(i).getText()
else:
v = "null"
- print "LA(%s) == %s" % (i,v)
+ print("LA(%s) == %s" % (i,v))
print("\n")
def traceIn(self,rname):
@@ -2149,10 +2150,10 @@ def matchNot(self,t, ttype) :
raise MismatchedTokenException(getTokenNames(), t, ttype, True)
def reportError(self,ex):
- print >>sys.stderr,"error:",ex
+ print("error:",ex, file=sys.stderr)
def reportWarning(self, s):
- print "warning:",s
+ print("warning:",s)
def setASTFactory(self,f):
self.astFactory = f
@@ -2164,20 +2165,20 @@ def setASTNodeClass(self,nodeType):
self.astFactory.setASTNodeType(nodeType)
def traceIndent(self):
- print " " * self.traceDepth
+ print(" " * self.traceDepth)
def traceIn(self,rname,t):
self.traceDepth += 1
self.traceIndent()
- print("> " + rname + "(" +
+ print(("> " + rname + "(" +
ifelse(t,str(t),"null") + ")" +
- ifelse(self.inputState.guessing>0,"[guessing]",""))
+ ifelse(self.inputState.guessing>0,"[guessing]","")))
def traceOut(self,rname,t):
self.traceIndent()
- print("< " + rname + "(" +
+ print(("< " + rname + "(" +
ifelse(t,str(t),"null") + ")" +
- ifelse(self.inputState.guessing>0,"[guessing]",""))
+ ifelse(self.inputState.guessing>0,"[guessing]","")))
self.traceDepth -= 1
### wh: moved from ASTFactory to TreeParser
@@ -2724,7 +2725,7 @@ def setTokenTypeToASTClassMap(self,amap):
def error(self, e):
import sys
- print >> sys.stderr, e
+ print(e, file=sys.stderr)
def setTokenTypeASTNodeType(self, tokenType, className):
"""
@@ -2811,7 +2812,7 @@ def make(*nodes):
if not nodes:
return None
- for i in xrange(0,len(nodes)):
+ for i in range(0,len(nodes)):
node = nodes[i]
if node:
assert isinstance(node,AST)
@@ -2821,7 +2822,7 @@ def make(*nodes):
if root:
root.setFirstChild(None)
- for i in xrange(1,len(nodes)):
+ for i in range(1,len(nodes)):
if not nodes[i]:
continue
if not root:
diff --git a/xlwt/examples/big-16Mb.py b/xlwt/examples/big-16Mb.py
index 91db123..d4a7665 100644
--- a/xlwt/examples/big-16Mb.py
+++ b/xlwt/examples/big-16Mb.py
@@ -1,6 +1,8 @@
#!/usr/bin/env python
# tries stress SST, SAT and MSAT
+from __future__ import print_function
+from __future__ import absolute_import
from time import *
from xlwt.Workbook import *
from xlwt.Style import *
@@ -14,22 +16,22 @@
rowcount = 6000 + 1
t0 = time()
-print "\nstart: %s" % ctime(t0)
+print("\nstart: %s" % ctime(t0))
-print "Filling..."
-for col in xrange(colcount):
- print "[%d]" % col,
- for row in xrange(rowcount):
+print("Filling...")
+for col in range(colcount):
+ print("[%d]" % col, end=' ')
+ for row in range(rowcount):
#ws0.write(row, col, "BIG(%d, %d)" % (row, col))
ws0.write(row, col, "BIG")
t1 = time() - t0
-print "\nsince starting elapsed %.2f s" % (t1)
+print("\nsince starting elapsed %.2f s" % (t1))
-print "Storing..."
+print("Storing...")
wb.save('big-16Mb.xls')
t2 = time() - t0
-print "since starting elapsed %.2f s" % (t2)
+print("since starting elapsed %.2f s" % (t2))
diff --git a/xlwt/examples/big-35Mb.py b/xlwt/examples/big-35Mb.py
index 837a6df..dc5463d 100644
--- a/xlwt/examples/big-35Mb.py
+++ b/xlwt/examples/big-35Mb.py
@@ -1,6 +1,8 @@
#!/usr/bin/env python
# tries stress SST, SAT and MSAT
+from __future__ import print_function
+from __future__ import absolute_import
from time import *
from xlwt import *
@@ -14,17 +16,17 @@
t0 = time()
-for col in xrange(colcount):
- for row in xrange(rowcount):
+for col in range(colcount):
+ for row in range(rowcount):
ws0.write(row, col, "BIG(%d, %d)" % (row, col))
t1 = time() - t0
-print "\nsince starting elapsed %.2f s" % (t1)
+print("\nsince starting elapsed %.2f s" % (t1))
-print "Storing..."
+print("Storing...")
wb.save('big-35Mb.xls')
t2 = time() - t0
-print "since starting elapsed %.2f s" % (t2)
+print("since starting elapsed %.2f s" % (t2))
diff --git a/xlwt/examples/formula_names.py b/xlwt/examples/formula_names.py
index f0354bc..69a2292 100644
--- a/xlwt/examples/formula_names.py
+++ b/xlwt/examples/formula_names.py
@@ -2,6 +2,8 @@
# -*- coding: windows-1251 -*-
# Copyright (C) 2005 Kiseliov Roman
+from __future__ import print_function
+from __future__ import absolute_import
from xlwt import *
from xlwt.ExcelFormulaParser import FormulaParseException
@@ -21,8 +23,8 @@
text = n + "($A$1)"
try:
formula = Formula(text)
- except FormulaParseException,e:
- print "Could not parse %r: %s" % (text,e.args[0])
+ except FormulaParseException as e:
+ print("Could not parse %r: %s" % (text,e.args[0]))
fail_count += 1
else:
ws.write(i, 3, formula)
@@ -31,4 +33,4 @@
w.save('formula_names.xls')
-print "succeeded with %i functions, failed with %i" % (succeed_count,fail_count)
+print("succeeded with %i functions, failed with %i" % (succeed_count,fail_count))
diff --git a/xlwt/examples/panes.py b/xlwt/examples/panes.py
index 9fd83b0..c086ae3 100644
--- a/xlwt/examples/panes.py
+++ b/xlwt/examples/panes.py
@@ -13,22 +13,22 @@
ws6 = w.add_sheet('sheet 6')
for i in range(0x100):
- ws1.write(i/0x10, i%0x10, i)
+ ws1.write(i//0x10, i%0x10, i)
for i in range(0x100):
- ws2.write(i/0x10, i%0x10, i)
+ ws2.write(i//0x10, i%0x10, i)
for i in range(0x100):
- ws3.write(i/0x10, i%0x10, i)
+ ws3.write(i//0x10, i%0x10, i)
for i in range(0x100):
- ws4.write(i/0x10, i%0x10, i)
+ ws4.write(i//0x10, i%0x10, i)
for i in range(0x100):
- ws5.write(i/0x10, i%0x10, i)
+ ws5.write(i//0x10, i%0x10, i)
for i in range(0x100):
- ws6.write(i/0x10, i%0x10, i)
+ ws6.write(i//0x10, i%0x10, i)
ws1.panes_frozen = True
ws1.horz_split_pos = 2
diff --git a/xlwt/examples/panes2.py b/xlwt/examples/panes2.py
index 09f8719..26f2a1f 100644
--- a/xlwt/examples/panes2.py
+++ b/xlwt/examples/panes2.py
@@ -5,7 +5,7 @@
import xlwt
w = xlwt.Workbook()
-sheets = [w.add_sheet('sheet ' + str(sheetx+1)) for sheetx in xrange(7)]
+sheets = [w.add_sheet('sheet ' + str(sheetx+1)) for sheetx in range(7)]
ws1, ws2, ws3, ws4, ws5, ws6, ws7 = sheets
for sheet in sheets:
for i in range(0x100):
diff --git a/xlwt/examples/parse-fmla.py b/xlwt/examples/parse-fmla.py
index 06f68eb..ba6a72e 100644
--- a/xlwt/examples/parse-fmla.py
+++ b/xlwt/examples/parse-fmla.py
@@ -1,3 +1,4 @@
+from __future__ import absolute_import
from xlwt import ExcelFormulaParser, ExcelFormula
import sys
diff --git a/xlwt/examples/sst.py b/xlwt/examples/sst.py
index b91c2f5..01960a4 100644
--- a/xlwt/examples/sst.py
+++ b/xlwt/examples/sst.py
@@ -44,7 +44,7 @@
wb.add_style(st3)
ws0 = wb.add_sheet('0')
-ws0.write(0, 0, 'Olya'*0x4000, st0)
+ws0.write(0, 0, b'Olya'*0x1000, st0)
#for i in range(0, 0x10):
# ws0.write(i, 2, ('%d'%i)*0x4000, st1)
diff --git a/xlwt/examples/unicode0.py b/xlwt/examples/unicode0.py
index 3651ec9..dd0e79a 100644
--- a/xlwt/examples/unicode0.py
+++ b/xlwt/examples/unicode0.py
@@ -2,11 +2,11 @@
import xlwt
# Strings passed to (for example) Worksheet.write can be unicode objects,
-# or str (8-bit) objects, which are then decoded into unicode.
+# or bytes (8-bit) objects, which are then decoded into unicode.
# The encoding to be used defaults to 'ascii'. This can be overridden
# when the Workbook instance is created:
book = xlwt.Workbook(encoding='cp1251')
sheet = book.add_sheet('cp1251-demo')
-sheet.write(0, 0, '\xce\xeb\xff')
+sheet.write(0, 0, b'\xce\xeb\xff')
book.save('unicode0.xls')
diff --git a/xlwt/examples/unicode2.py b/xlwt/examples/unicode2.py
index 18904b0..cc31ba1 100644
--- a/xlwt/examples/unicode2.py
+++ b/xlwt/examples/unicode2.py
@@ -2,6 +2,10 @@
# -*- coding: windows-1251 -*-
# Copyright (C) 2005 Kiseliov Roman
+from __future__ import absolute_import
+from __future__ import division
+from future.builtins import *
+
from xlwt import *
w = Workbook()
@@ -13,7 +17,7 @@
style.font = fnt
for i in range(0x10000):
- ws1.write(i/0x10, i%0x10, unichr(i), style)
+ ws1.write(i//0x10, i%0x10, chr(i), style)
w.save('unicode2.xls')
diff --git a/xlwt/examples/wsprops.py b/xlwt/examples/wsprops.py
index adc5a04..5601977 100644
--- a/xlwt/examples/wsprops.py
+++ b/xlwt/examples/wsprops.py
@@ -1,3 +1,5 @@
+from __future__ import print_function
+from __future__ import absolute_import
props = \
[
'name',
@@ -80,76 +82,76 @@
wb = Workbook()
ws = wb.add_sheet('sheet')
-print ws.name
-print ws.parent
-print ws.rows
-print ws.cols
-print ws.merged_ranges
-print ws.bmp_rec
-print ws.show_formulas
-print ws.show_grid
-print ws.show_headers
-print ws.panes_frozen
-print ws.show_empty_as_zero
-print ws.auto_colour_grid
-print ws.cols_right_to_left
-print ws.show_outline
-print ws.remove_splits
-print ws.selected
+print(ws.name)
+print(ws.parent)
+print(ws.rows)
+print(ws.cols)
+print(ws.merged_ranges)
+print(ws.bmp_rec)
+print(ws.show_formulas)
+print(ws.show_grid)
+print(ws.show_headers)
+print(ws.panes_frozen)
+print(ws.show_empty_as_zero)
+print(ws.auto_colour_grid)
+print(ws.cols_right_to_left)
+print(ws.show_outline)
+print(ws.remove_splits)
+print(ws.selected)
# print ws.hidden
-print ws.page_preview
-print ws.first_visible_row
-print ws.first_visible_col
-print ws.grid_colour
-print ws.preview_magn
-print ws.normal_magn
+print(ws.page_preview)
+print(ws.first_visible_row)
+print(ws.first_visible_col)
+print(ws.grid_colour)
+print(ws.preview_magn)
+print(ws.normal_magn)
#print ws.row_gut_width
#print ws.col_gut_height
-print ws.show_auto_page_breaks
-print ws.dialogue_sheet
-print ws.auto_style_outline
-print ws.outline_below
-print ws.outline_right
-print ws.fit_num_pages
-print ws.show_row_outline
-print ws.show_col_outline
-print ws.alt_expr_eval
-print ws.alt_formula_entries
-print ws.row_default_height
-print ws.col_default_width
-print ws.calc_mode
-print ws.calc_count
-print ws.RC_ref_mode
-print ws.iterations_on
-print ws.delta
-print ws.save_recalc
-print ws.print_headers
-print ws.print_grid
+print(ws.show_auto_page_breaks)
+print(ws.dialogue_sheet)
+print(ws.auto_style_outline)
+print(ws.outline_below)
+print(ws.outline_right)
+print(ws.fit_num_pages)
+print(ws.show_row_outline)
+print(ws.show_col_outline)
+print(ws.alt_expr_eval)
+print(ws.alt_formula_entries)
+print(ws.row_default_height)
+print(ws.col_default_width)
+print(ws.calc_mode)
+print(ws.calc_count)
+print(ws.RC_ref_mode)
+print(ws.iterations_on)
+print(ws.delta)
+print(ws.save_recalc)
+print(ws.print_headers)
+print(ws.print_grid)
#print ws.grid_set
-print ws.vert_page_breaks
-print ws.horz_page_breaks
-print ws.header_str
-print ws.footer_str
-print ws.print_centered_vert
-print ws.print_centered_horz
-print ws.left_margin
-print ws.right_margin
-print ws.top_margin
-print ws.bottom_margin
-print ws.paper_size_code
-print ws.print_scaling
-print ws.start_page_number
-print ws.fit_width_to_pages
-print ws.fit_height_to_pages
-print ws.print_in_rows
-print ws.portrait
-print ws.print_colour
-print ws.print_draft
-print ws.print_notes
-print ws.print_notes_at_end
-print ws.print_omit_errors
-print ws.print_hres
-print ws.print_vres
-print ws.header_margin
-print ws.footer_margin
-print ws.copies_num
+print(ws.vert_page_breaks)
+print(ws.horz_page_breaks)
+print(ws.header_str)
+print(ws.footer_str)
+print(ws.print_centered_vert)
+print(ws.print_centered_horz)
+print(ws.left_margin)
+print(ws.right_margin)
+print(ws.top_margin)
+print(ws.bottom_margin)
+print(ws.paper_size_code)
+print(ws.print_scaling)
+print(ws.start_page_number)
+print(ws.fit_width_to_pages)
+print(ws.fit_height_to_pages)
+print(ws.print_in_rows)
+print(ws.portrait)
+print(ws.print_colour)
+print(ws.print_draft)
+print(ws.print_notes)
+print(ws.print_notes_at_end)
+print(ws.print_omit_errors)
+print(ws.print_hres)
+print(ws.print_vres)
+print(ws.header_margin)
+print(ws.footer_margin)
+print(ws.copies_num)