Add support for calc ranges
This commit is contained in:
parent
45e3f97e6c
commit
6efa879c85
Binary file not shown.
Binary file not shown.
|
@ -435,3 +435,26 @@ Ranges
|
||||||
|
|
||||||
rango = sheet[1:5,1:4]
|
rango = sheet[1:5,1:4]
|
||||||
app.msgbox(rango.name)
|
app.msgbox(rango.name)
|
||||||
|
|
||||||
|
* Group ranges
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
doc = app.active
|
||||||
|
sheet = doc.active
|
||||||
|
last = doc[-1]
|
||||||
|
with doc.ranges as r:
|
||||||
|
# Add one range
|
||||||
|
r.add(sheet['A1:B2'])
|
||||||
|
r2 = sheet['C4:D5']
|
||||||
|
r3 = last['E7:D8']
|
||||||
|
r4 = last['E10:F12']
|
||||||
|
# Add multiple ranges
|
||||||
|
r.add((r2, r3, r4))
|
||||||
|
app.debug(r.names)
|
||||||
|
|
||||||
|
* Get the same range in all sheets
|
||||||
|
|
||||||
|
ranges = doc.get_ranges('A1:B1')
|
||||||
|
app.debug(ranges.names)
|
||||||
|
|
||||||
|
|
|
@ -425,6 +425,31 @@
|
||||||
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">rango</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">rango</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>Group ranges</p></li>
|
||||||
|
</ul>
|
||||||
|
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active</span>
|
||||||
|
<span class="n">sheet</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">active</span>
|
||||||
|
<span class="n">last</span> <span class="o">=</span> <span class="n">doc</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||||
|
<span class="k">with</span> <span class="n">doc</span><span class="o">.</span><span class="n">ranges</span> <span class="k">as</span> <span class="n">r</span><span class="p">:</span>
|
||||||
|
<span class="c1"># Add one range</span>
|
||||||
|
<span class="n">r</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">sheet</span><span class="p">[</span><span class="s1">'A1:B2'</span><span class="p">])</span>
|
||||||
|
<span class="n">r2</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">'C4:D5'</span><span class="p">]</span>
|
||||||
|
<span class="n">r3</span> <span class="o">=</span> <span class="n">last</span><span class="p">[</span><span class="s1">'E7:D8'</span><span class="p">]</span>
|
||||||
|
<span class="n">r4</span> <span class="o">=</span> <span class="n">last</span><span class="p">[</span><span class="s1">'E10:F12'</span><span class="p">]</span>
|
||||||
|
<span class="c1"># Add multiple ranges</span>
|
||||||
|
<span class="n">r</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">r2</span><span class="p">,</span> <span class="n">r3</span><span class="p">,</span> <span class="n">r4</span><span class="p">))</span>
|
||||||
|
<span class="n">app</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">names</span><span class="p">)</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<ul>
|
||||||
|
<li><p>Get the same range in all sheets</p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>ranges = doc.get_ranges(‘A1:B1’)
|
||||||
|
app.debug(ranges.names)</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -435,3 +435,26 @@ Ranges
|
||||||
|
|
||||||
rango = sheet[1:5,1:4]
|
rango = sheet[1:5,1:4]
|
||||||
app.msgbox(rango.name)
|
app.msgbox(rango.name)
|
||||||
|
|
||||||
|
* Group ranges
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
doc = app.active
|
||||||
|
sheet = doc.active
|
||||||
|
last = doc[-1]
|
||||||
|
with doc.ranges as r:
|
||||||
|
# Add one range
|
||||||
|
r.add(sheet['A1:B2'])
|
||||||
|
r2 = sheet['C4:D5']
|
||||||
|
r3 = last['E7:D8']
|
||||||
|
r4 = last['E10:F12']
|
||||||
|
# Add multiple ranges
|
||||||
|
r.add((r2, r3, r4))
|
||||||
|
app.debug(r.names)
|
||||||
|
|
||||||
|
* Get the same range in all sheets
|
||||||
|
|
||||||
|
ranges = doc.get_ranges('A1:B1')
|
||||||
|
app.debug(ranges.names)
|
||||||
|
|
||||||
|
|
|
@ -2963,6 +2963,7 @@ class LOCalcRanges(object):
|
||||||
def __init__(self, obj):
|
def __init__(self, obj):
|
||||||
self._obj = obj
|
self._obj = obj
|
||||||
self._ranges = {}
|
self._ranges = {}
|
||||||
|
self._index = 0
|
||||||
|
|
||||||
def __enter__(self):
|
def __enter__(self):
|
||||||
return self
|
return self
|
||||||
|
@ -2976,20 +2977,53 @@ class LOCalcRanges(object):
|
||||||
def __contains__(self, item):
|
def __contains__(self, item):
|
||||||
return self._obj.hasByName(item.name)
|
return self._obj.hasByName(item.name)
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
self._index = 0
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __next__(self):
|
||||||
|
try:
|
||||||
|
r = self.obj[self._index]
|
||||||
|
rango = self._ranges[r.AbsoluteName]
|
||||||
|
except IndexError:
|
||||||
|
raise StopIteration
|
||||||
|
|
||||||
|
self._index += 1
|
||||||
|
return rango
|
||||||
|
|
||||||
|
def __getitem__(self, index):
|
||||||
|
if isinstance(index, int):
|
||||||
|
r = self.obj[index]
|
||||||
|
rango = self._ranges[r.AbsoluteName]
|
||||||
|
else:
|
||||||
|
rango = self._ranges[index]
|
||||||
|
return rango
|
||||||
|
|
||||||
|
@property
|
||||||
|
def obj(self):
|
||||||
|
return self._obj
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def names(self):
|
def names(self):
|
||||||
return self._obj.ElementNames
|
return self.obj.ElementNames
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def data(self):
|
def data(self):
|
||||||
return [r.data for r in self._ranges.values()]
|
return [r.data for r in self._ranges.values()]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def style(self):
|
||||||
|
return self.obj
|
||||||
|
@style.setter
|
||||||
|
def style(self, value):
|
||||||
|
self.obj.CellStyle = value
|
||||||
|
|
||||||
def add(self, rangos):
|
def add(self, rangos):
|
||||||
if isinstance(rangos, LOCalcRange):
|
if isinstance(rangos, LOCalcRange):
|
||||||
rangos = (rangos,)
|
rangos = (rangos,)
|
||||||
for r in rangos:
|
for r in rangos:
|
||||||
self._ranges[r.name] = r
|
self._ranges[r.name] = r
|
||||||
self._obj.addRangeAddress(r.range_address, False)
|
self.obj.addRangeAddress(r.range_address, False)
|
||||||
return
|
return
|
||||||
|
|
||||||
def remove(self, rangos):
|
def remove(self, rangos):
|
||||||
|
@ -2997,7 +3031,7 @@ class LOCalcRanges(object):
|
||||||
rangos = (rangos,)
|
rangos = (rangos,)
|
||||||
for r in rangos:
|
for r in rangos:
|
||||||
del self._ranges[r.name]
|
del self._ranges[r.name]
|
||||||
self._obj.removeRangeAddress(r.range_address)
|
self.obj.removeRangeAddress(r.range_address)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue