Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if isinstance(arg1, tuple):
if len(arg1) == 2:
if 0 in arg1:
raise IndexError("Attempted to access 0-based Range. xlwings/Excel Ranges are 1-based.")
row1 = arg1[0]
col1 = arg1[1]
address1 = self.xl.rows[row1].columns[col1].get_address()
elif len(arg1) == 4:
return Range(self, arg1)
else:
raise ValueError("Invalid parameters")
elif isinstance(arg1, Range):
row1 = min(arg1.row, arg2.row)
col1 = min(arg1.column, arg2.column)
address1 = self.xl.rows[row1].columns[col1].get_address()
elif isinstance(arg1, string_types):
address1 = arg1.split(':')[0]
else:
raise ValueError("Invalid parameters")
if isinstance(arg2, tuple):
if 0 in arg2:
raise IndexError("Attempted to access 0-based Range. xlwings/Excel Ranges are 1-based.")
row2 = arg2[0]
col2 = arg2[1]
address2 = self.xl.rows[row2].columns[col2].get_address()
elif isinstance(arg2, Range):
row2 = max(arg1.row + arg1.shape[0] - 1, arg2.row + arg2.shape[0] - 1)
col2 = max(arg1.column + arg1.shape[1] - 1, arg2.column + arg2.shape[1] - 1)
address2 = self.xl.rows[row2].columns[col2].get_address()
elif isinstance(arg2, string_types):
address2 = arg2
raise ValueError("Invalid parameters")
if isinstance(arg2, tuple):
if 0 in arg2:
raise IndexError("Attempted to access 0-based Range. xlwings/Excel Ranges are 1-based.")
row2 = arg2[0]
col2 = arg2[1]
address2 = self.xl.rows[row2].columns[col2].get_address()
elif isinstance(arg2, Range):
row2 = max(arg1.row + arg1.shape[0] - 1, arg2.row + arg2.shape[0] - 1)
col2 = max(arg1.column + arg1.shape[1] - 1, arg2.column + arg2.shape[1] - 1)
address2 = self.xl.rows[row2].columns[col2].get_address()
elif isinstance(arg2, string_types):
address2 = arg2
elif arg2 is None:
if isinstance(arg1, string_types) and len(arg1.split(':')) == 2:
address2 = arg1.split(':')[1]
else:
return Range(self, "{0}".format(address1))
else:
raise ValueError("Invalid parameters")
return Range(self, "{0}:{1}".format(address1, address2))
def __getitem__(self, item):
if isinstance(item, string_types):
return self.range(item)
else:
return self.cells[item]
def __init__(self, *args, **kwargs):
# Arguments
if len(args) == 1 and isinstance(args[0], string_types):
sheet_name_or_index = None
range_address = args[0]
elif len(args) == 1 and isinstance(args[0], tuple):
sheet_name_or_index = None
range_address = None
self.row1 = args[0][0]
self.col1 = args[0][1]
self.row2 = self.row1
self.col2 = self.col1
elif (len(args) == 2
and isinstance(args[0], (numbers.Number, string_types, Sheet))
and isinstance(args[1], string_types)):
if isinstance(args[0], Sheet):
sheet_name_or_index = args[0].index
else:
sheet_name_or_index = args[0]
def __lt__(self, other):
if isinstance(other, VersionNumber):
return self.value < other.value
elif isinstance(other, string_types):
return self.value < VersionNumber(other).value
elif isinstance(other, tuple):
return self.value[:len(other)] < other
elif isinstance(other, int):
return self.major < other
else:
raise TypeError("Cannot compare other object with version number")
def __eq__(self, other):
if isinstance(other, VersionNumber):
return self.value == other.value
elif isinstance(other, string_types):
return self.value == VersionNumber(other).value
elif isinstance(other, tuple):
return self.value[:len(other)] == other
elif isinstance(other, int):
return self.major == other
else:
return False
# Also, turn into list (Python 3 can't handle arrays directly)
if np and isinstance(data, np.ndarray):
try:
data = np.where(np.isnan(data), None, data)
data = data.tolist()
except TypeError:
# isnan doesn't work on arrays of dtype=object
if pd:
data[pd.isnull(data)] = None
data = data.tolist()
else:
# expensive way of replacing nan with None in object arrays in case Pandas is not available
data = [[None if isinstance(c, float) and np.isnan(c) else c for c in row] for row in data]
# Simple Lists: Turn into list of lists (np.nan is part of numbers.Number)
if isinstance(data, list) and (isinstance(data[0], (numbers.Number, string_types, time_types))
or data[0] is None):
data = [data]
# Get dimensions and prepare data for Excel
# TODO: refactor
if isinstance(data, (numbers.Number, string_types, time_types)) or data is None:
# Single cells
row2 = self.row2
col2 = self.col2
data = xlplatform.prepare_xl_data([[data]])[0][0]
try:
# scalar np.nan need to be turned into None, otherwise Excel shows it as 65535 (same as for NumPy array)
if np and np.isnan(data):
data = None
except (TypeError, NotImplementedError):
# raised if data is not a np.nan.