Add insert math in writer

This commit is contained in:
Mauricio Baeza 2021-07-10 17:30:36 -05:00
commit 23135d9ad7
37 changed files with 3778 additions and 151 deletions

View File

@ -1,7 +1,12 @@
v 0.17.0 [10-jul-2021]
- Add insert math in writer
v 0.16.1 [01-jul-2021]
- Change property is_connected in db
- Update doc
v 0.16.0 [20-jun-2021]
- Add connection for postgres and mariadb
- Fix in call macro Basic

View File

@ -4,9 +4,9 @@ Scripts and library for develop macros and extensions for LibreOffice with Pytho
Develop in pure Python, not need any dependence.
Python 3.7+
LibreOffice 7.0+
LibreOffice SDK 7.0+
* Python 3.7+
* LibreOffice 7.0+
* LibreOffice SDK 7.0+
* Look [documentation](https://doc.cuates.net/zaz/)
@ -23,9 +23,11 @@ This extension have a cost of maintenance of 1 euros every year.
In order of preferred.
Mauricio Baeza
```
Euros
IBAN: BE60 9671 0556 5870
SWIFT / BIC: TRWIBEB1XXX
```
* FairCoin: `fJ7emvtyGfvcMuxk1nHSnS7gmeScdcZXL5`
* Monero: `43H43TpQKYdYcw2ZCnn2nbjDh3imNQg8RGYS4oP4p7Z8aeBHg6VpeaFfBoMzDTUUDdQBiGkiQUSydJB96m6MqiEuEeyoopQ`

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -231,8 +231,20 @@ Export
filter_name = 'doc'
doc.export(path, filter_name)
path = '/home/mau/myfile.rtf'
filter_name = 'rtf'
doc.export(path, filter_name)
* For all support formats look `Apendix`_
* Export in memory.
.. code-block:: python
doc = app.docs.new()
filter_name = 'xlsx'
excel_doc = doc.export(filter_name=filter_name)
Fonst
^^^^^
@ -294,12 +306,14 @@ title
doc = app.active
app.msgbox(doc.title)
doc.title = 'New title'
app.msgbox(doc.title)
type
~~~~
* Get type document: calc, writer, etc.
* Get type document: calc, writer, etc. (read only)
.. code-block:: python
@ -310,7 +324,7 @@ type
uid
~~~
* Get internal RuntimeUID form document.
* Get internal RuntimeUID form document. (read only)
.. code-block:: python
@ -321,7 +335,7 @@ uid
is_saved
~~~~~~~~
* If document is saved in this or not
* If document is saved in this or not (read only)
.. code-block:: python
@ -332,7 +346,7 @@ is_saved
is_modified
~~~~~~~~~~~
* If document has been modified
* If document has been modified (read only)
.. code-block:: python
@ -352,7 +366,7 @@ is_read_only
path
~~~~
* Get path of document.
* Get path of document. (read only)
.. code-block:: python
@ -361,9 +375,9 @@ path
dir
~~~~
~~~
* Get only directory from path saved
* Get only directory from path saved (read only)
.. code-block:: python
@ -371,7 +385,124 @@ dir
app.msgbox(doc.dir)
file_name
~~~~~~~~~
* Get only file name from path saved (read only)
.. code-block:: python
doc = app.active
app.msgbox(doc.file_name)
name
~~~~
* Get only name without extension (read only)
.. code-block:: python
doc = app.active
app.msgbox(doc.file_name)
visible
~~~~~~~
* Hide or show document.
.. code-block:: python
doc = app.active
doc.visible = False
app.msgbox(doc.visible)
doc.visible = True
zoom
~~~~
* Get or set zoom value.
.. code-block:: python
doc = app.active
zoom = doc.zoom
app.msgbox(zoom)
doc.zoom = zoom * 2
app.msgbox(doc.zoom)
doc.zoom = zoom
selection
~~~~~~~~~
* **CAUTION**: Selection can be many things.
.. code-block:: python
doc = app.active
selection = doc.selection
app.msgbox(selection)
status_bar
~~~~~~~~~~
* Get status bar, always control in other thread.
.. code-block:: python
@app.run_in_thread
def update_status_bar(sb, text, limit):
sb.start(text, limit)
for i in range(limit):
sb.setValue(i)
app.sleep(1)
# ~ Is important free status bar
sb.end()
return
def main():
doc = app.active
update_status_bar(doc.status_bar, 'Line', 10)
return
Methods
^^^^^^^
set_focus
~~~~~~~~~
.. code-block:: python
name = 'MyDoc.ods'
if name in app.docs:
doc = app.docs[name]
doc.set_focus()
copy
~~~~
* Copy current selection
.. code-block:: python
doc = app.active
doc.copy()
paste
~~~~~
* Paste any content in clipboard
.. code-block:: python
doc = app.active
doc.paste()
.. _dispatch command: https://wiki.documentfoundation.org/Development/DispatchCommands

View File

@ -1,27 +1,18 @@
Calc
----
Remember, always import library.
Remember, always import library.
.. code-block:: python
import easymacro as app
Current doc
^^^^^^^^^^^
.. toctree::
:maxdepth: 2
.. code-block:: python
doc = app.active
app.msgbox(doc.type)
Active sheet
^^^^^^^^^^^^
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.name)
calc_doc.rst
calc_sheets.rst
calc_ranges.rst
calc_ranges2.rst
calc_data.rst

View File

@ -0,0 +1,92 @@
Data
~~~~
Read
^^^^
* Get value from cell, automatic detect type and get value.
.. code-block:: python
sheet = app.active_sheet
cell = sheet['A1']
value = cell.value
info = f'Cell Type = {cell.type}\n\nCell Value = {cell.value}'
app.msgbox(info)
* Get date, time and datetime like data Python.
.. code-block:: python
sheet = app.active_sheet
cell = sheet['A1']
app.msgbox(cell.date)
app.msgbox(cell.time)
app.msgbox(cell.datetime)
* Get values from cell range.
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:B5']
app.msgbox(rango.data)
* Get formulas
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:B5']
app.msgbox(rango.formula)
* Get array formula
.. code-block:: python
sheet = app.active_sheet
rango = sheet['C10:E15']
app.msgbox(rango.array_formula)
* Get like dictionary
The first row in range are the keys.
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:B5']
app.msgbox(rango.dict)
Write
^^^^^
* Automatic detect data type.
.. code-block:: python
sheet = app.active_sheet
# ~ Set int
sheet['A1'].value = 1
# ~ Set float
sheet['A2'].value = 10.5
# ~ Set string
sheet['A3'].value = 'Damn World'
# ~ Set formula
sheet['A4'].value = '=RAND()'
# ~ Set date
sheet['A5'].value = app.today()
# ~ Set time
sheet['A6'].value = app.now(True)
# ~ Set datetime
sheet['A7'].value = app.now()

View File

@ -0,0 +1,50 @@
Document
~~~~~~~~
Current doc
^^^^^^^^^^^
.. code-block:: python
doc = app.active
app.msgbox(doc.type)
Selection
^^^^^^^^^
* If selection is range get LOCalcRange, if selection is shape get LOShape, other selection get original pyuno object.
.. code-block:: python
doc = app.active
selection = doc.selection
app.msgbox(type(selection))
Headers
^^^^^^^
* Hide or show columns and rows headers.
.. code-block:: python
doc = app.active
app.msgbox(doc.headers)
doc.headers = not doc.headers
app.msgbox(doc.headers)
doc.headers = not doc.headers
Tabs
^^^^
* Hide or show tab sheets.
.. code-block:: python
doc = app.active
app.msgbox(doc.tabs)
doc.tabs = not doc.tabs
app.msgbox(doc.tabs)
doc.tabs = not doc.tabs

View File

@ -0,0 +1,190 @@
Cell and ranges
~~~~~~~~~~~~~~~
Cells
^^^^^
* By name
.. code-block:: python
sheet = app.active_sheet
cell = sheet['A1']
app.msgbox(cell.name)
* By position [row, column]
.. code-block:: python
cell = sheet[1, 4]
app.msgbox(cell.name)
Ranges
^^^^^^
* By name
.. code-block:: python
sheet = app.active_sheet
rango = sheet['B2:D5']
app.msgbox(rango.name)
* By position [start_row:end_row, start_column:end_column]
.. code-block:: python
rango = sheet[1:5,1:4]
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
.. code-block:: python
ranges = doc.get_ranges('A1:B1')
app.debug(ranges.names)
* Get columns by name.
.. code-block:: python
sheet = app.active_sheet
rango = sheet['B:B']
app.debug(rango.name)
rango = sheet['D:F']
app.debug(rango.name)
* Get columns by position.
.. code-block:: python
sheet = app.active_sheet
# Column B
rango = sheet[0:,1]
app.debug(rango.name)
# Columnas D:F
rango = sheet[0:,3:6]
app.debug(rango.name)
* Get rows
.. code-block:: python
sheet = app.active_sheet
# One row
row = sheet[1]
app.debug(row.name)
# Range rows
row = sheet[3:10,0:]
app.debug(row.name)
Info ranges
^^^^^^^^^^^
* Get absolute name
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:E10']
app.msgbox(rango.name)
* Get address
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1']
a = rango.address
data = f"""Cell Address
Row: {a.Row}
Column: {a.Column}
"""
app.msgbox(data)
rango = sheet['A1:E10']
ra = rango.range_address
data = (
f'Range Address:\n\n'
f'Star Row: {ra.StartRow}\n'
f'End Row: {ra.EndRow}\n'
f'Star Column: {ra.StartColumn}\n'
f'End Column: {ra.EndColumn}\n'
)
app.msgbox(data)
Special ranges
^^^^^^^^^^^^^^
* Get used area
.. code-block:: python
sheet = app.active_sheet
rango = sheet.used_area
app.msgbox(rango.name)
* Get current region
.. code-block:: python
rango = sheet['A1'].current_region
app.msgbox(rango.name)
* Get next free cell
.. code-block:: python
cell = sheet['A1'].next_cell
app.msgbox(cell.name)
* Get merged area
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1'].merged_area
app.msgbox(rango.name)
* Get visible cells
.. code-block:: python
sheet = app.active_sheet
rangos = sheet['A1:E10'].visible
for r in rangos:
app.debug(r.name)
* Get empty cells
.. code-block:: python
sheet = app.active_sheet
rangos = sheet['A1:E10'].empty
for r in rangos:
app.debug(r.name)

View File

@ -0,0 +1,124 @@
Manipulate ranges
~~~~~~~~~~~~~~~~~
**Not, not is necesary select range for manipulate**
Select
^^^^^^
* Select from doc
.. code-block:: python
doc = app.active
sheet = app.active_sheet
cell = sheet['A1']
doc.select(cell)
* Select in self range
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:C5']
rango.select()
Move
^^^^
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:C5']
rango.move(sheet['E6'])
* Move to other sheet
.. code-block:: python
rango.move(doc[-1]['E6'])
Insert
^^^^^^
* Default insert down
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:C1']
rango.insert()
* Insert and move right
.. code-block:: python
rango.insert(app.CellInsertMode.RIGHT)
* Insert entire rows
.. code-block:: python
rango.insert(app.CellInsertMode.ROWS)
* Insert entire columns
.. code-block:: python
rango.insert(app.CellInsertMode.COLUMNS)
Delete
^^^^^^
* Default move up
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:C1']
rango.delete()
* Delete and move left
.. code-block:: python
rango.delete(app.CellDeleteMode.LEFT)
* Delete entire rows
.. code-block:: python
rango.delete(app.CellDeleteMode.ROWS)
* Delete entire columns
.. code-block:: python
rango.delete(app.CellDeleteMode.COLUMNS)
Copy
^^^^
* Using native method `copyRange`, current range always should be a cell and source should be a range.
.. code-block:: python
sheet = app.active_sheet
cell = sheet['A5']
source = sheet['D1:E4']
cell.copy_from(source)
* From range to cell
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:C5']
target = sheet['E1']
rango.copy_to(target)

View File

@ -0,0 +1,332 @@
Sheets
~~~~~~
Active sheet
^^^^^^^^^^^^
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.name)
# or
doc = app.active
sheet = doc.active
Get by index
^^^^^^^^^^^^
.. code-block:: python
doc = app.active
sheet = doc[0]
app.msgbox(sheet.name)
Get by name
^^^^^^^^^^^
.. code-block:: python
doc = app.active
sheet = doc['Sheet1']
app.msgbox(sheet.name)
Contains
^^^^^^^^
.. code-block:: python
doc = app.active
app.msgbox('Sheet1' in doc)
Get tuple with all names
^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
doc = app.active
app.msgbox(doc.names)
Count
^^^^^
.. code-block:: python
doc = app.active
app.msgbox(len(doc))
New
^^^
* Always validate if new name not exists.
.. code-block:: python
doc = app.active
sheet = doc.new_sheet()
# CAUTION: If 'NewSheet' exists, reset it to clean sheet.
doc['NewSheet'] = sheet
# ~ or
sheet = doc.insert('NewSheet2')
* Insert multiple, get last insert.
.. code-block:: python
names = ('One', 'Two', 'Three')
sheet = doc.insert(names)
Move
^^^^
* Move by object to last position.
.. code-block:: python
sheet = doc[0]
doc.move(sheet)
* Move by name to last position.
.. code-block:: python
doc.move('Sheet1')
* Move to position.
.. code-block:: python
sheet = doc[0]
doc.move(sheet, 2)
* Move from sheet
.. code-block:: python
sheet = app.active_sheet
sheet.move()
* Move to position.
.. code-block:: python
sheet = app.active_sheet
sheet.move(2)
Remove
^^^^^^
* Remove by object.
.. code-block:: python
sheet = doc[0]
doc.remove(sheet)
* Remove by name.
.. code-block:: python
doc.remove('One')
* Remove from sheet.
.. code-block:: python
sheet = app.active_sheet
sheet.remove()
Copy
^^^^
* Copy inside the same spreadsheet.
* By object
.. code-block:: python
sheet = doc[0]
doc.copy(sheet, 'OtherSheet')
* By name
.. code-block:: python
doc.copy('Sheet1', 'Sheet2')
* From sheet
.. code-block:: python
sheet = app.active_sheet
sheet.copy(sheet.name + '_2')
Copy from
^^^^^^^^^
* Copy sheet from one spreadsheet to other.
.. code-block:: python
doc = app.active
doc_source = app.docs['Contacts.ods']
name_source = 'Names'
name_target = 'Names'
position = 0
doc.copy_from(doc_source, name_source, name_target, position)
Copy to
^^^^^^^
* Copy from sheet with the same name
.. code-block:: python
doc = app.docs.new()
sheet = app.active_sheet
sheet.copy_to(doc)
* Used new name
.. code-block:: python
doc = app.docs.new()
sheet = app.active_sheet
sheet.copy_to(doc, 'NewName')
Sort
^^^^
* Sort sheets by names.
.. code-block:: python
doc = app.active
doc.sort()
Name
^^^^
* Name visible by the user.
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.name)
sheet.name = 'NewName'
app.msgbox(sheet.name)
Code name
^^^^^^^^^
* Name only accessible by code.
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.code_name)
sheet.code_name = 'my_name'
app.msgbox(sheet.code_name)
Visible
^^^^^^^
* Apply only with spreadsheet with two or more sheets.
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.visible)
sheet.visible = not sheet.visible
app.msgbox(sheet.visible)
sheet.visible = not sheet.visible
Is protected
^^^^^^^^^^^^
* If sheet is protected with password.
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.is_protected)
Set password
^^^^^^^^^^^^
.. code-block:: python
sheet = app.active_sheet
sheet.password = 'letmein'
app.msgbox(sheet.is_protected)
Remove password
^^^^^^^^^^^^^^^
.. code-block:: python
sheet = app.active_sheet
sheet.password = 'letmein'
app.msgbox(sheet.is_protected)
sheet.unprotect('letmein')
app.msgbox(sheet.is_protected)
Tab color
^^^^^^^^^
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.color)
sheet.color = 'red'
app.msgbox(sheet.color)
# RGB
sheet.color = (125, 200, 10)
app.msgbox(sheet.color)
Document parent
^^^^^^^^^^^^^^^
.. code-block:: python
doc = sheet.doc
Activate
^^^^^^^^
.. code-block:: python
doc = app.active
# Get last sheet
sheet = doc[-1]
# Activate from doc
doc.activate(sheet)
# Activate from sheet
sheet.activate()

View File

@ -220,11 +220,21 @@
<span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/myfile.doc&#39;</span>
<span class="n">filter_name</span> <span class="o">=</span> <span class="s1">&#39;doc&#39;</span>
<span class="n">doc</span><span class="o">.</span><span class="n">export</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">filter_name</span><span class="p">)</span>
<span class="n">path</span> <span class="o">=</span> <span class="s1">&#39;/home/mau/myfile.rtf&#39;</span>
<span class="n">filter_name</span> <span class="o">=</span> <span class="s1">&#39;rtf&#39;</span>
<span class="n">doc</span><span class="o">.</span><span class="n">export</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">filter_name</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>For all support formats look <a class="reference external" href="apendixes.html">Apendix</a></p></li>
<li><p>Export in memory.</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">docs</span><span class="o">.</span><span class="n">new</span><span class="p">()</span>
<span class="n">filter_name</span> <span class="o">=</span> <span class="s1">&#39;xlsx&#39;</span>
<span class="n">excel_doc</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">export</span><span class="p">(</span><span class="n">filter_name</span><span class="o">=</span><span class="n">filter_name</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="fonst">
<h2>Fonst<a class="headerlink" href="#fonst" title="Permalink to this headline"></a></h2>
@ -276,13 +286,15 @@
<h3>title<a class="headerlink" href="#title" title="Permalink to this headline"></a></h3>
<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">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">title</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="s1">&#39;New title&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">title</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="type">
<h3>type<a class="headerlink" href="#type" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Get type document: calc, writer, etc.</p></li>
<li><p>Get type document: calc, writer, etc. (read only)</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">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
@ -292,7 +304,7 @@
<section id="uid">
<h3>uid<a class="headerlink" href="#uid" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Get internal RuntimeUID form document.</p></li>
<li><p>Get internal RuntimeUID form document. (read only)</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">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">uid</span><span class="p">)</span>
@ -302,7 +314,7 @@
<section id="is-saved">
<h3>is_saved<a class="headerlink" href="#is-saved" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>If document is saved in this or not</p></li>
<li><p>If document is saved in this or not (read only)</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">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">is_saved</span><span class="p">)</span>
@ -312,7 +324,7 @@
<section id="is-modified">
<h3>is_modified<a class="headerlink" href="#is-modified" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>If document has been modified</p></li>
<li><p>If document has been modified (read only)</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">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">is_modified</span><span class="p">)</span>
@ -329,7 +341,7 @@
<section id="path">
<h3>path<a class="headerlink" href="#path" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Get path of document.</p></li>
<li><p>Get path of document. (read only)</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">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
@ -339,13 +351,124 @@
<section id="dir">
<h3>dir<a class="headerlink" href="#dir" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Get only directory from path saved</p></li>
<li><p>Get only directory from path saved (read only)</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">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">dir</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="file-name">
<h3>file_name<a class="headerlink" href="#file-name" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Get only file name from path saved (read only)</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">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">file_name</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="name">
<h3>name<a class="headerlink" href="#name" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Get only name without extension (read only)</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">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">file_name</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="visible">
<h3>visible<a class="headerlink" href="#visible" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Hide or show document.</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">doc</span><span class="o">.</span><span class="n">visible</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">visible</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">visible</span> <span class="o">=</span> <span class="kc">True</span>
</pre></div>
</div>
</section>
<section id="zoom">
<h3>zoom<a class="headerlink" href="#zoom" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Get or set zoom value.</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">zoom</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">zoom</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">zoom</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">zoom</span> <span class="o">=</span> <span class="n">zoom</span> <span class="o">*</span> <span class="mi">2</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">zoom</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">zoom</span> <span class="o">=</span> <span class="n">zoom</span>
</pre></div>
</div>
</section>
<section id="selection">
<h3>selection<a class="headerlink" href="#selection" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p><strong>CAUTION</strong>: Selection can be many things.</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">selection</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">selection</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">selection</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="status-bar">
<h3>status_bar<a class="headerlink" href="#status-bar" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Get status bar, always control in other thread.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="nd">@app</span><span class="o">.</span><span class="n">run_in_thread</span>
<span class="k">def</span> <span class="nf">update_status_bar</span><span class="p">(</span><span class="n">sb</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">limit</span><span class="p">):</span>
<span class="n">sb</span><span class="o">.</span><span class="n">start</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">limit</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">limit</span><span class="p">):</span>
<span class="n">sb</span><span class="o">.</span><span class="n">setValue</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="n">app</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="c1"># ~ Is important free status bar</span>
<span class="n">sb</span><span class="o">.</span><span class="n">end</span><span class="p">()</span>
<span class="k">return</span>
<span class="k">def</span> <span class="nf">main</span><span class="p">():</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">update_status_bar</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">status_bar</span><span class="p">,</span> <span class="s1">&#39;Line&#39;</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
<span class="k">return</span>
</pre></div>
</div>
</section>
</section>
<section id="methods">
<h2>Methods<a class="headerlink" href="#methods" title="Permalink to this headline"></a></h2>
<section id="set-focus">
<h3>set_focus<a class="headerlink" href="#set-focus" title="Permalink to this headline"></a></h3>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">name</span> <span class="o">=</span> <span class="s1">&#39;MyDoc.ods&#39;</span>
<span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="p">:</span>
<span class="n">doc</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
<span class="n">doc</span><span class="o">.</span><span class="n">set_focus</span><span class="p">()</span>
</pre></div>
</div>
</section>
<section id="copy">
<h3>copy<a class="headerlink" href="#copy" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Copy current selection</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">doc</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</pre></div>
</div>
</section>
<section id="paste">
<h3>paste<a class="headerlink" href="#paste" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Paste any content in clipboard</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">doc</span><span class="o">.</span><span class="n">paste</span><span class="p">()</span>
</pre></div>
</div>
</section>
</section>
</section>

View File

@ -15,7 +15,7 @@
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Writer" href="writer.html" />
<link rel="next" title="Document" href="calc_doc.html" />
<link rel="prev" title="Application" href="application.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
@ -35,24 +35,66 @@
<section id="calc">
<h1>Calc<a class="headerlink" href="#calc" title="Permalink to this headline"></a></h1>
<p>Remember, always import library.</p>
<p>Remember, always import library.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">easymacro</span> <span class="k">as</span> <span class="nn">app</span>
</pre></div>
</div>
<section id="current-doc">
<h2>Current doc<a class="headerlink" href="#current-doc" title="Permalink to this headline"></a></h2>
<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">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
</pre></div>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="calc_doc.html">Document</a><ul>
<li class="toctree-l2"><a class="reference internal" href="calc_doc.html#current-doc">Current doc</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_doc.html#selection">Selection</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_doc.html#headers">Headers</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_doc.html#tabs">Tabs</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="calc_sheets.html">Sheets</a><ul>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#active-sheet">Active sheet</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#get-by-index">Get by index</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#get-by-name">Get by name</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#contains">Contains</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#get-tuple-with-all-names">Get tuple with all names</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#count">Count</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#new">New</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#move">Move</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#remove">Remove</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#copy">Copy</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#copy-from">Copy from</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#copy-to">Copy to</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#sort">Sort</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#name">Name</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#code-name">Code name</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#visible">Visible</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#is-protected">Is protected</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#set-password">Set password</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#remove-password">Remove password</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#tab-color">Tab color</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#document-parent">Document parent</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html#activate">Activate</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="calc_ranges.html">Cell and ranges</a><ul>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges.html#cells">Cells</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges.html#ranges">Ranges</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges.html#info-ranges">Info ranges</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges.html#special-ranges">Special ranges</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="calc_ranges2.html">Manipulate ranges</a><ul>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges2.html#select">Select</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges2.html#move">Move</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges2.html#insert">Insert</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges2.html#delete">Delete</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges2.html#copy">Copy</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="calc_data.html">Data</a><ul>
<li class="toctree-l2"><a class="reference internal" href="calc_data.html#read">Read</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_data.html#write">Write</a></li>
</ul>
</li>
</ul>
</div>
</section>
<section id="active-sheet">
<h2>Active sheet<a class="headerlink" href="#active-sheet" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
</section>
</section>
@ -88,6 +130,7 @@
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
@ -96,7 +139,7 @@
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="easymacro.html">Library easymacro.py</a><ul>
<li>Previous: <a href="application.html" title="previous chapter">Application</a></li>
<li>Next: <a href="writer.html" title="next chapter">Writer</a></li>
<li>Next: <a href="calc_doc.html" title="next chapter">Document</a></li>
</ul></li>
</ul></li>
</ul>

214
doc/build/main/calc_data.html vendored Normal file
View File

@ -0,0 +1,214 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Data &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Writer" href="writer.html" />
<link rel="prev" title="Manipulate ranges" href="calc_ranges2.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="data">
<h1>Data<a class="headerlink" href="#data" title="Permalink to this headline"></a></h1>
<section id="read">
<h2>Read<a class="headerlink" href="#read" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Get value from cell, automatic detect type and get value.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">cell</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1&#39;</span><span class="p">]</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">cell</span><span class="o">.</span><span class="n">value</span>
<span class="n">info</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;Cell Type = </span><span class="si">{</span><span class="n">cell</span><span class="o">.</span><span class="n">type</span><span class="si">}</span><span class="se">\n\n</span><span class="s1">Cell Value = </span><span class="si">{</span><span class="n">cell</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">info</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get date, time and datetime like data Python.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">cell</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1&#39;</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">cell</span><span class="o">.</span><span class="n">date</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">cell</span><span class="o">.</span><span class="n">time</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">cell</span><span class="o">.</span><span class="n">datetime</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get values from cell range.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:B5&#39;</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">data</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get formulas</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:B5&#39;</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">formula</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get array formula</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;C10:E15&#39;</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">array_formula</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get like dictionary</p></li>
</ul>
<p>The first row in range are the keys.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:B5&#39;</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">dict</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="write">
<h2>Write<a class="headerlink" href="#write" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Automatic detect data type.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="c1"># ~ Set int</span>
<span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="mi">1</span>
<span class="c1"># ~ Set float</span>
<span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A2&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="mf">10.5</span>
<span class="c1"># ~ Set string</span>
<span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A3&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="s1">&#39;Damn World&#39;</span>
<span class="c1"># ~ Set formula</span>
<span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A4&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="s1">&#39;=RAND()&#39;</span>
<span class="c1"># ~ Set date</span>
<span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A5&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">today</span><span class="p">()</span>
<span class="c1"># ~ Set time</span>
<span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A6&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">now</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="c1"># ~ Set datetime</span>
<span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A7&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="easymacro.html">Library easymacro.py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html">Tools for debug</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html">Paths and files</a></li>
<li class="toctree-l2"><a class="reference internal" href="email.html">Email</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html">Application</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="calc.html">Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="writer.html">Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="base.html">Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="easymacro.html">Library easymacro.py</a><ul>
<li><a href="calc.html">Calc</a><ul>
<li>Previous: <a href="calc_ranges2.html" title="previous chapter">Manipulate ranges</a></li>
<li>Next: <a href="writer.html" title="next chapter">Writer</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/calc_data.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

171
doc/build/main/calc_doc.html vendored Normal file
View File

@ -0,0 +1,171 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Document &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Sheets" href="calc_sheets.html" />
<link rel="prev" title="Calc" href="calc.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="document">
<h1>Document<a class="headerlink" href="#document" title="Permalink to this headline"></a></h1>
<section id="current-doc">
<h2>Current doc<a class="headerlink" href="#current-doc" title="Permalink to this headline"></a></h2>
<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">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">type</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="selection">
<h2>Selection<a class="headerlink" href="#selection" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>If selection is range get LOCalcRange, if selection is shape get LOShape, other selection get original pyuno object.</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">selection</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">selection</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">selection</span><span class="p">))</span>
</pre></div>
</div>
</section>
<section id="headers">
<h2>Headers<a class="headerlink" href="#headers" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Hide or show columns and rows headers.</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">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">headers</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">headers</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">doc</span><span class="o">.</span><span class="n">headers</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">headers</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">headers</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">doc</span><span class="o">.</span><span class="n">headers</span>
</pre></div>
</div>
</section>
<section id="tabs">
<h2>Tabs<a class="headerlink" href="#tabs" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Hide or show tab sheets.</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">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">tabs</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">tabs</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">doc</span><span class="o">.</span><span class="n">tabs</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">tabs</span><span class="p">)</span>
<span class="n">doc</span><span class="o">.</span><span class="n">tabs</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">doc</span><span class="o">.</span><span class="n">tabs</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="easymacro.html">Library easymacro.py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html">Tools for debug</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html">Paths and files</a></li>
<li class="toctree-l2"><a class="reference internal" href="email.html">Email</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html">Application</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="calc.html">Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="writer.html">Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="base.html">Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="easymacro.html">Library easymacro.py</a><ul>
<li><a href="calc.html">Calc</a><ul>
<li>Previous: <a href="calc.html" title="previous chapter">Calc</a></li>
<li>Next: <a href="calc_sheets.html" title="next chapter">Sheets</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/calc_doc.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

310
doc/build/main/calc_ranges.html vendored Normal file
View File

@ -0,0 +1,310 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Cell and ranges &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Data" href="calc_data.html" />
<link rel="prev" title="Sheets" href="calc_sheets.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="cell-and-ranges">
<h1>Cell and ranges<a class="headerlink" href="#cell-and-ranges" title="Permalink to this headline"></a></h1>
<section id="cells">
<h2>Cells<a class="headerlink" href="#cells" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>By name</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">cell</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1&#39;</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">cell</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>By position [row, column]</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">cell</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">4</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">cell</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="ranges">
<h2>Ranges<a class="headerlink" href="#ranges" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>By name</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;B2:D5&#39;</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>
</div>
<ul class="simple">
<li><p>By position [start_row:end_row, start_column:end_column]</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="mi">5</span><span class="p">,</span><span class="mi">1</span><span class="p">:</span><span class="mi">4</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>
</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">&#39;A1:B2&#39;</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">&#39;C4:D5&#39;</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">&#39;E7:D8&#39;</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">&#39;E10:F12&#39;</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 class="simple">
<li><p>Get the same range in all sheets</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">ranges</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">get_ranges</span><span class="p">(</span><span class="s1">&#39;A1:B1&#39;</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">ranges</span><span class="o">.</span><span class="n">names</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get columns by name.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;B:B&#39;</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">rango</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;D:F&#39;</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">rango</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get columns by position.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="c1"># Column B</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="mi">0</span><span class="p">:,</span><span class="mi">1</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">rango</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="c1"># Columnas D:F</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="mi">0</span><span class="p">:,</span><span class="mi">3</span><span class="p">:</span><span class="mi">6</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">rango</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get rows</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="c1"># One row</span>
<span class="n">row</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="mi">1</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">row</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="c1"># Range rows</span>
<span class="n">row</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="mi">3</span><span class="p">:</span><span class="mi">10</span><span class="p">,</span><span class="mi">0</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">row</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="info-ranges">
<h2>Info ranges<a class="headerlink" href="#info-ranges" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Get absolute name</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:E10&#39;</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>
</div>
<ul class="simple">
<li><p>Get address</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1&#39;</span><span class="p">]</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">rango</span><span class="o">.</span><span class="n">address</span>
<span class="n">data</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;Cell Address</span>
<span class="s2">Row: </span><span class="si">{</span><span class="n">a</span><span class="o">.</span><span class="n">Row</span><span class="si">}</span><span class="s2"></span>
<span class="s2">Column: </span><span class="si">{</span><span class="n">a</span><span class="o">.</span><span class="n">Column</span><span class="si">}</span><span class="s2"></span>
<span class="s2">&quot;&quot;&quot;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:E10&#39;</span><span class="p">]</span>
<span class="n">ra</span> <span class="o">=</span> <span class="n">rango</span><span class="o">.</span><span class="n">range_address</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">(</span>
<span class="sa">f</span><span class="s1">&#39;Range Address:</span><span class="se">\n\n</span><span class="s1">&#39;</span>
<span class="sa">f</span><span class="s1">&#39;Star Row: </span><span class="si">{</span><span class="n">ra</span><span class="o">.</span><span class="n">StartRow</span><span class="si">}</span><span class="se">\n</span><span class="s1">&#39;</span>
<span class="sa">f</span><span class="s1">&#39;End Row: </span><span class="si">{</span><span class="n">ra</span><span class="o">.</span><span class="n">EndRow</span><span class="si">}</span><span class="se">\n</span><span class="s1">&#39;</span>
<span class="sa">f</span><span class="s1">&#39;Star Column: </span><span class="si">{</span><span class="n">ra</span><span class="o">.</span><span class="n">StartColumn</span><span class="si">}</span><span class="se">\n</span><span class="s1">&#39;</span>
<span class="sa">f</span><span class="s1">&#39;End Column: </span><span class="si">{</span><span class="n">ra</span><span class="o">.</span><span class="n">EndColumn</span><span class="si">}</span><span class="se">\n</span><span class="s1">&#39;</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">data</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="special-ranges">
<h2>Special ranges<a class="headerlink" href="#special-ranges" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Get used area</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="o">.</span><span class="n">used_area</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>
</div>
<ul class="simple">
<li><p>Get current region</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">current_region</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>
</div>
<ul class="simple">
<li><p>Get next free cell</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">cell</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">next_cell</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">cell</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get merged area</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">merged_area</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>
</div>
<ul class="simple">
<li><p>Get visible cells</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rangos</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:E10&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">visible</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">rangos</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">name</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Get empty cells</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rangos</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:E10&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">empty</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">rangos</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">name</span><span class="p">)</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="easymacro.html">Library easymacro.py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html">Tools for debug</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html">Paths and files</a></li>
<li class="toctree-l2"><a class="reference internal" href="email.html">Email</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html">Application</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="calc.html">Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="writer.html">Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="base.html">Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="easymacro.html">Library easymacro.py</a><ul>
<li><a href="calc.html">Calc</a><ul>
<li>Previous: <a href="calc_sheets.html" title="previous chapter">Sheets</a></li>
<li>Next: <a href="calc_data.html" title="next chapter">Data</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/calc_ranges.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

242
doc/build/main/calc_ranges2.html vendored Normal file
View File

@ -0,0 +1,242 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Manipulate ranges &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Data" href="calc_data.html" />
<link rel="prev" title="Cell and ranges" href="calc_ranges.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="manipulate-ranges">
<h1>Manipulate ranges<a class="headerlink" href="#manipulate-ranges" title="Permalink to this headline"></a></h1>
<p><strong>Not, not is necesary select range for manipulate</strong></p>
<section id="select">
<h2>Select<a class="headerlink" href="#select" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Select from doc</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">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">cell</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1&#39;</span><span class="p">]</span>
<span class="n">doc</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="n">cell</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Select in self range</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:C5&#39;</span><span class="p">]</span>
<span class="n">rango</span><span class="o">.</span><span class="n">select</span><span class="p">()</span>
</pre></div>
</div>
</section>
<section id="move">
<h2>Move<a class="headerlink" href="#move" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:C5&#39;</span><span class="p">]</span>
<span class="n">rango</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;E6&#39;</span><span class="p">])</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Move to other sheet</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">rango</span><span class="o">.</span><span class="n">move</span><span class="p">(</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="s1">&#39;E6&#39;</span><span class="p">])</span>
</pre></div>
</div>
</section>
<section id="insert">
<h2>Insert<a class="headerlink" href="#insert" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Default insert down</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:C1&#39;</span><span class="p">]</span>
<span class="n">rango</span><span class="o">.</span><span class="n">insert</span><span class="p">()</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Insert and move right</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">rango</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">CellInsertMode</span><span class="o">.</span><span class="n">RIGHT</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Insert entire rows</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">rango</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">CellInsertMode</span><span class="o">.</span><span class="n">ROWS</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Insert entire columns</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">rango</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">CellInsertMode</span><span class="o">.</span><span class="n">COLUMNS</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="delete">
<h2>Delete<a class="headerlink" href="#delete" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Default move up</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:C1&#39;</span><span class="p">]</span>
<span class="n">rango</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Delete and move left</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">rango</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">CellDeleteMode</span><span class="o">.</span><span class="n">LEFT</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Delete entire rows</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">rango</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">CellDeleteMode</span><span class="o">.</span><span class="n">ROWS</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Delete entire columns</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">rango</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">app</span><span class="o">.</span><span class="n">CellDeleteMode</span><span class="o">.</span><span class="n">COLUMNS</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="copy">
<h2>Copy<a class="headerlink" href="#copy" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Using native method <cite>copyRange</cite>, current range always should be a cell and source should be a range.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">cell</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A5&#39;</span><span class="p">]</span>
<span class="n">source</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;D1:E4&#39;</span><span class="p">]</span>
<span class="n">cell</span><span class="o">.</span><span class="n">copy_from</span><span class="p">(</span><span class="n">source</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>From range to cell</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">rango</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;A1:C5&#39;</span><span class="p">]</span>
<span class="n">target</span> <span class="o">=</span> <span class="n">sheet</span><span class="p">[</span><span class="s1">&#39;E1&#39;</span><span class="p">]</span>
<span class="n">rango</span><span class="o">.</span><span class="n">copy_to</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="easymacro.html">Library easymacro.py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html">Tools for debug</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html">Paths and files</a></li>
<li class="toctree-l2"><a class="reference internal" href="email.html">Email</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html">Application</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="calc.html">Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="writer.html">Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="base.html">Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="easymacro.html">Library easymacro.py</a><ul>
<li><a href="calc.html">Calc</a><ul>
<li>Previous: <a href="calc_ranges.html" title="previous chapter">Cell and ranges</a></li>
<li>Next: <a href="calc_data.html" title="next chapter">Data</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/calc_ranges2.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

426
doc/build/main/calc_sheets.html vendored Normal file
View File

@ -0,0 +1,426 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Sheets &#8212; ZAZ documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Data" href="calc_data.html" />
<link rel="prev" title="Document" href="calc_doc.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="sheets">
<h1>Sheets<a class="headerlink" href="#sheets" title="Permalink to this headline"></a></h1>
<section id="active-sheet">
<h2>Active sheet<a class="headerlink" href="#active-sheet" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="c1"># or</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>
</pre></div>
</div>
</section>
<section id="get-by-index">
<h2>Get by index<a class="headerlink" href="#get-by-index" title="Permalink to this headline"></a></h2>
<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="p">[</span><span class="mi">0</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">sheet</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="get-by-name">
<h2>Get by name<a class="headerlink" href="#get-by-name" title="Permalink to this headline"></a></h2>
<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="p">[</span><span class="s1">&#39;Sheet1&#39;</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">sheet</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="contains">
<h2>Contains<a class="headerlink" href="#contains" title="Permalink to this headline"></a></h2>
<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">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="s1">&#39;Sheet1&#39;</span> <span class="ow">in</span> <span class="n">doc</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="get-tuple-with-all-names">
<h2>Get tuple with all names<a class="headerlink" href="#get-tuple-with-all-names" title="Permalink to this headline"></a></h2>
<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">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">doc</span><span class="o">.</span><span class="n">names</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="count">
<h2>Count<a class="headerlink" href="#count" title="Permalink to this headline"></a></h2>
<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">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">doc</span><span class="p">))</span>
</pre></div>
</div>
</section>
<section id="new">
<h2>New<a class="headerlink" href="#new" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Always validate if new name not exists.</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">new_sheet</span><span class="p">()</span>
<span class="c1"># CAUTION: If &#39;NewSheet&#39; exists, reset it to clean sheet.</span>
<span class="n">doc</span><span class="p">[</span><span class="s1">&#39;NewSheet&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">sheet</span>
<span class="c1"># ~ or</span>
<span class="n">sheet</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="s1">&#39;NewSheet2&#39;</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Insert multiple, get last insert.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">names</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;One&#39;</span><span class="p">,</span> <span class="s1">&#39;Two&#39;</span><span class="p">,</span> <span class="s1">&#39;Three&#39;</span><span class="p">)</span>
<span class="n">sheet</span> <span class="o">=</span> <span class="n">doc</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">names</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="move">
<h2>Move<a class="headerlink" href="#move" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Move by object to last position.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">doc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">doc</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="n">sheet</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Move by name to last position.</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">move</span><span class="p">(</span><span class="s1">&#39;Sheet1&#39;</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Move to position.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">doc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">doc</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="n">sheet</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Move from sheet</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">move</span><span class="p">()</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Move to position.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="remove">
<h2>Remove<a class="headerlink" href="#remove" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Remove by object.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">doc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">doc</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">sheet</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Remove by name.</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">remove</span><span class="p">(</span><span class="s1">&#39;One&#39;</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Remove from sheet.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">remove</span><span class="p">()</span>
</pre></div>
</div>
</section>
<section id="copy">
<h2>Copy<a class="headerlink" href="#copy" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Copy inside the same spreadsheet.</p></li>
<li><p>By object</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">doc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">doc</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">sheet</span><span class="p">,</span> <span class="s1">&#39;OtherSheet&#39;</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>By name</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">copy</span><span class="p">(</span><span class="s1">&#39;Sheet1&#39;</span><span class="p">,</span> <span class="s1">&#39;Sheet2&#39;</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>From sheet</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s1">&#39;_2&#39;</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="copy-from">
<h2>Copy from<a class="headerlink" href="#copy-from" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Copy sheet from one spreadsheet to other.</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">doc_source</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">docs</span><span class="p">[</span><span class="s1">&#39;Contacts.ods&#39;</span><span class="p">]</span>
<span class="n">name_source</span> <span class="o">=</span> <span class="s1">&#39;Names&#39;</span>
<span class="n">name_target</span> <span class="o">=</span> <span class="s1">&#39;Names&#39;</span>
<span class="n">position</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">doc</span><span class="o">.</span><span class="n">copy_from</span><span class="p">(</span><span class="n">doc_source</span><span class="p">,</span> <span class="n">name_source</span><span class="p">,</span> <span class="n">name_target</span><span class="p">,</span> <span class="n">position</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="copy-to">
<h2>Copy to<a class="headerlink" href="#copy-to" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Copy from sheet with the same name</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">docs</span><span class="o">.</span><span class="n">new</span><span class="p">()</span>
<span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">copy_to</span><span class="p">(</span><span class="n">doc</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Used new name</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">docs</span><span class="o">.</span><span class="n">new</span><span class="p">()</span>
<span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">copy_to</span><span class="p">(</span><span class="n">doc</span><span class="p">,</span> <span class="s1">&#39;NewName&#39;</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="sort">
<h2>Sort<a class="headerlink" href="#sort" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Sort sheets by names.</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">doc</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
</pre></div>
</div>
</section>
<section id="name">
<h2>Name<a class="headerlink" href="#name" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Name visible by the user.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s1">&#39;NewName&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="code-name">
<h2>Code name<a class="headerlink" href="#code-name" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Name only accessible by code.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">code_name</span><span class="p">)</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">code_name</span> <span class="o">=</span> <span class="s1">&#39;my_name&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">code_name</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="visible">
<h2>Visible<a class="headerlink" href="#visible" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Apply only with spreadsheet with two or more sheets.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">visible</span><span class="p">)</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">visible</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">sheet</span><span class="o">.</span><span class="n">visible</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">visible</span><span class="p">)</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">visible</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">sheet</span><span class="o">.</span><span class="n">visible</span>
</pre></div>
</div>
</section>
<section id="is-protected">
<h2>Is protected<a class="headerlink" href="#is-protected" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>If sheet is protected with password.</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">is_protected</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="set-password">
<h2>Set password<a class="headerlink" href="#set-password" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">password</span> <span class="o">=</span> <span class="s1">&#39;letmein&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">is_protected</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="remove-password">
<h2>Remove password<a class="headerlink" href="#remove-password" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">password</span> <span class="o">=</span> <span class="s1">&#39;letmein&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">is_protected</span><span class="p">)</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">unprotect</span><span class="p">(</span><span class="s1">&#39;letmein&#39;</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">sheet</span><span class="o">.</span><span class="n">is_protected</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="tab-color">
<h2>Tab color<a class="headerlink" href="#tab-color" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">sheet</span> <span class="o">=</span> <span class="n">app</span><span class="o">.</span><span class="n">active_sheet</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">color</span><span class="p">)</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">color</span> <span class="o">=</span> <span class="s1">&#39;red&#39;</span>
<span class="n">app</span><span class="o">.</span><span class="n">msgbox</span><span class="p">(</span><span class="n">sheet</span><span class="o">.</span><span class="n">color</span><span class="p">)</span>
<span class="c1"># RGB</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">color</span> <span class="o">=</span> <span class="p">(</span><span class="mi">125</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="mi">10</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">sheet</span><span class="o">.</span><span class="n">color</span><span class="p">)</span>
</pre></div>
</div>
</section>
<section id="document-parent">
<h2>Document parent<a class="headerlink" href="#document-parent" title="Permalink to this headline"></a></h2>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">doc</span> <span class="o">=</span> <span class="n">sheet</span><span class="o">.</span><span class="n">doc</span>
</pre></div>
</div>
</section>
<section id="activate">
<h2>Activate<a class="headerlink" href="#activate" title="Permalink to this headline"></a></h2>
<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="c1"># Get last sheet</span>
<span class="n">sheet</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="c1"># Activate from doc</span>
<span class="n">doc</span><span class="o">.</span><span class="n">activate</span><span class="p">(</span><span class="n">sheet</span><span class="p">)</span>
<span class="c1"># Activate from sheet</span>
<span class="n">sheet</span><span class="o">.</span><span class="n">activate</span><span class="p">()</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">ZAZ</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="easymacro.html">Library easymacro.py</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="tools_for_debug.html">Tools for debug</a></li>
<li class="toctree-l2"><a class="reference internal" href="tools.html">Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="paths.html">Paths and files</a></li>
<li class="toctree-l2"><a class="reference internal" href="email.html">Email</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html">Application</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="calc.html">Calc</a></li>
<li class="toctree-l2"><a class="reference internal" href="writer.html">Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="base.html">Base</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
<li class="toctree-l1"><a class="reference internal" href="apendixes.html">Apendixes</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li><a href="easymacro.html">Library easymacro.py</a><ul>
<li><a href="calc.html">Calc</a><ul>
<li>Previous: <a href="calc_doc.html" title="previous chapter">Document</a></li>
<li>Next: <a href="calc_data.html" title="next chapter">Data</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, Mauricio Baeza.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.0.2</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/main/calc_sheets.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@ -136,11 +136,15 @@
<li class="toctree-l2"><a class="reference internal" href="application.html#filters">Filters</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html#call-dispatch">Call dispatch</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html#properties">Properties</a></li>
<li class="toctree-l2"><a class="reference internal" href="application.html#methods">Methods</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="calc.html">Calc</a><ul>
<li class="toctree-l2"><a class="reference internal" href="calc.html#current-doc">Current doc</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc.html#active-sheet">Active sheet</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_doc.html">Document</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_sheets.html">Sheets</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges.html">Cell and ranges</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_ranges2.html">Manipulate ranges</a></li>
<li class="toctree-l2"><a class="reference internal" href="calc_data.html">Data</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="writer.html">Writer</a><ul>

BIN
doc/build/objects.inv vendored

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -231,8 +231,20 @@ Export
filter_name = 'doc'
doc.export(path, filter_name)
path = '/home/mau/myfile.rtf'
filter_name = 'rtf'
doc.export(path, filter_name)
* For all support formats look `Apendix`_
* Export in memory.
.. code-block:: python
doc = app.docs.new()
filter_name = 'xlsx'
excel_doc = doc.export(filter_name=filter_name)
Fonst
^^^^^
@ -395,7 +407,102 @@ name
app.msgbox(doc.file_name)
visible
~~~~~~~
* Hide or show document.
.. code-block:: python
doc = app.active
doc.visible = False
app.msgbox(doc.visible)
doc.visible = True
zoom
~~~~
* Get or set zoom value.
.. code-block:: python
doc = app.active
zoom = doc.zoom
app.msgbox(zoom)
doc.zoom = zoom * 2
app.msgbox(doc.zoom)
doc.zoom = zoom
selection
~~~~~~~~~
* **CAUTION**: Selection can be many things.
.. code-block:: python
doc = app.active
selection = doc.selection
app.msgbox(selection)
status_bar
~~~~~~~~~~
* Get status bar, always control in other thread.
.. code-block:: python
@app.run_in_thread
def update_status_bar(sb, text, limit):
sb.start(text, limit)
for i in range(limit):
sb.setValue(i)
app.sleep(1)
# ~ Is important free status bar
sb.end()
return
def main():
doc = app.active
update_status_bar(doc.status_bar, 'Line', 10)
return
Methods
^^^^^^^
set_focus
~~~~~~~~~
.. code-block:: python
name = 'MyDoc.ods'
if name in app.docs:
doc = app.docs[name]
doc.set_focus()
copy
~~~~
* Copy current selection
.. code-block:: python
doc = app.active
doc.copy()
paste
~~~~~
* Paste any content in clipboard
.. code-block:: python
doc = app.active
doc.paste()
.. _dispatch command: https://wiki.documentfoundation.org/Development/DispatchCommands

View File

@ -1,27 +1,18 @@
Calc
----
Remember, always import library.
Remember, always import library.
.. code-block:: python
import easymacro as app
Current doc
^^^^^^^^^^^
.. toctree::
:maxdepth: 2
.. code-block:: python
doc = app.active
app.msgbox(doc.type)
Active sheet
^^^^^^^^^^^^
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.name)
calc_doc.rst
calc_sheets.rst
calc_ranges.rst
calc_ranges2.rst
calc_data.rst

View File

@ -0,0 +1,92 @@
Data
~~~~
Read
^^^^
* Get value from cell, automatic detect type and get value.
.. code-block:: python
sheet = app.active_sheet
cell = sheet['A1']
value = cell.value
info = f'Cell Type = {cell.type}\n\nCell Value = {cell.value}'
app.msgbox(info)
* Get date, time and datetime like data Python.
.. code-block:: python
sheet = app.active_sheet
cell = sheet['A1']
app.msgbox(cell.date)
app.msgbox(cell.time)
app.msgbox(cell.datetime)
* Get values from cell range.
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:B5']
app.msgbox(rango.data)
* Get formulas
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:B5']
app.msgbox(rango.formula)
* Get array formula
.. code-block:: python
sheet = app.active_sheet
rango = sheet['C10:E15']
app.msgbox(rango.array_formula)
* Get like dictionary
The first row in range are the keys.
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:B5']
app.msgbox(rango.dict)
Write
^^^^^
* Automatic detect data type.
.. code-block:: python
sheet = app.active_sheet
# ~ Set int
sheet['A1'].value = 1
# ~ Set float
sheet['A2'].value = 10.5
# ~ Set string
sheet['A3'].value = 'Damn World'
# ~ Set formula
sheet['A4'].value = '=RAND()'
# ~ Set date
sheet['A5'].value = app.today()
# ~ Set time
sheet['A6'].value = app.now(True)
# ~ Set datetime
sheet['A7'].value = app.now()

View File

@ -0,0 +1,50 @@
Document
~~~~~~~~
Current doc
^^^^^^^^^^^
.. code-block:: python
doc = app.active
app.msgbox(doc.type)
Selection
^^^^^^^^^
* If selection is range get LOCalcRange, if selection is shape get LOShape, other selection get original pyuno object.
.. code-block:: python
doc = app.active
selection = doc.selection
app.msgbox(type(selection))
Headers
^^^^^^^
* Hide or show columns and rows headers.
.. code-block:: python
doc = app.active
app.msgbox(doc.headers)
doc.headers = not doc.headers
app.msgbox(doc.headers)
doc.headers = not doc.headers
Tabs
^^^^
* Hide or show tab sheets.
.. code-block:: python
doc = app.active
app.msgbox(doc.tabs)
doc.tabs = not doc.tabs
app.msgbox(doc.tabs)
doc.tabs = not doc.tabs

View File

@ -0,0 +1,190 @@
Cell and ranges
~~~~~~~~~~~~~~~
Cells
^^^^^
* By name
.. code-block:: python
sheet = app.active_sheet
cell = sheet['A1']
app.msgbox(cell.name)
* By position [row, column]
.. code-block:: python
cell = sheet[1, 4]
app.msgbox(cell.name)
Ranges
^^^^^^
* By name
.. code-block:: python
sheet = app.active_sheet
rango = sheet['B2:D5']
app.msgbox(rango.name)
* By position [start_row:end_row, start_column:end_column]
.. code-block:: python
rango = sheet[1:5,1:4]
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
.. code-block:: python
ranges = doc.get_ranges('A1:B1')
app.debug(ranges.names)
* Get columns by name.
.. code-block:: python
sheet = app.active_sheet
rango = sheet['B:B']
app.debug(rango.name)
rango = sheet['D:F']
app.debug(rango.name)
* Get columns by position.
.. code-block:: python
sheet = app.active_sheet
# Column B
rango = sheet[0:,1]
app.debug(rango.name)
# Columnas D:F
rango = sheet[0:,3:6]
app.debug(rango.name)
* Get rows
.. code-block:: python
sheet = app.active_sheet
# One row
row = sheet[1]
app.debug(row.name)
# Range rows
row = sheet[3:10,0:]
app.debug(row.name)
Info ranges
^^^^^^^^^^^
* Get absolute name
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:E10']
app.msgbox(rango.name)
* Get address
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1']
a = rango.address
data = f"""Cell Address
Row: {a.Row}
Column: {a.Column}
"""
app.msgbox(data)
rango = sheet['A1:E10']
ra = rango.range_address
data = (
f'Range Address:\n\n'
f'Star Row: {ra.StartRow}\n'
f'End Row: {ra.EndRow}\n'
f'Star Column: {ra.StartColumn}\n'
f'End Column: {ra.EndColumn}\n'
)
app.msgbox(data)
Special ranges
^^^^^^^^^^^^^^
* Get used area
.. code-block:: python
sheet = app.active_sheet
rango = sheet.used_area
app.msgbox(rango.name)
* Get current region
.. code-block:: python
rango = sheet['A1'].current_region
app.msgbox(rango.name)
* Get next free cell
.. code-block:: python
cell = sheet['A1'].next_cell
app.msgbox(cell.name)
* Get merged area
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1'].merged_area
app.msgbox(rango.name)
* Get visible cells
.. code-block:: python
sheet = app.active_sheet
rangos = sheet['A1:E10'].visible
for r in rangos:
app.debug(r.name)
* Get empty cells
.. code-block:: python
sheet = app.active_sheet
rangos = sheet['A1:E10'].empty
for r in rangos:
app.debug(r.name)

View File

@ -0,0 +1,124 @@
Manipulate ranges
~~~~~~~~~~~~~~~~~
**Not, not is necesary select range for manipulate**
Select
^^^^^^
* Select from doc
.. code-block:: python
doc = app.active
sheet = app.active_sheet
cell = sheet['A1']
doc.select(cell)
* Select in self range
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:C5']
rango.select()
Move
^^^^
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:C5']
rango.move(sheet['E6'])
* Move to other sheet
.. code-block:: python
rango.move(doc[-1]['E6'])
Insert
^^^^^^
* Default insert down
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:C1']
rango.insert()
* Insert and move right
.. code-block:: python
rango.insert(app.CellInsertMode.RIGHT)
* Insert entire rows
.. code-block:: python
rango.insert(app.CellInsertMode.ROWS)
* Insert entire columns
.. code-block:: python
rango.insert(app.CellInsertMode.COLUMNS)
Delete
^^^^^^
* Default move up
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:C1']
rango.delete()
* Delete and move left
.. code-block:: python
rango.delete(app.CellDeleteMode.LEFT)
* Delete entire rows
.. code-block:: python
rango.delete(app.CellDeleteMode.ROWS)
* Delete entire columns
.. code-block:: python
rango.delete(app.CellDeleteMode.COLUMNS)
Copy
^^^^
* Using native method `copyRange`, current range always should be a cell and source should be a range.
.. code-block:: python
sheet = app.active_sheet
cell = sheet['A5']
source = sheet['D1:E4']
cell.copy_from(source)
* From range to cell
.. code-block:: python
sheet = app.active_sheet
rango = sheet['A1:C5']
target = sheet['E1']
rango.copy_to(target)

View File

@ -0,0 +1,332 @@
Sheets
~~~~~~
Active sheet
^^^^^^^^^^^^
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.name)
# or
doc = app.active
sheet = doc.active
Get by index
^^^^^^^^^^^^
.. code-block:: python
doc = app.active
sheet = doc[0]
app.msgbox(sheet.name)
Get by name
^^^^^^^^^^^
.. code-block:: python
doc = app.active
sheet = doc['Sheet1']
app.msgbox(sheet.name)
Contains
^^^^^^^^
.. code-block:: python
doc = app.active
app.msgbox('Sheet1' in doc)
Get tuple with all names
^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
doc = app.active
app.msgbox(doc.names)
Count
^^^^^
.. code-block:: python
doc = app.active
app.msgbox(len(doc))
New
^^^
* Always validate if new name not exists.
.. code-block:: python
doc = app.active
sheet = doc.new_sheet()
# CAUTION: If 'NewSheet' exists, reset it to clean sheet.
doc['NewSheet'] = sheet
# ~ or
sheet = doc.insert('NewSheet2')
* Insert multiple, get last insert.
.. code-block:: python
names = ('One', 'Two', 'Three')
sheet = doc.insert(names)
Move
^^^^
* Move by object to last position.
.. code-block:: python
sheet = doc[0]
doc.move(sheet)
* Move by name to last position.
.. code-block:: python
doc.move('Sheet1')
* Move to position.
.. code-block:: python
sheet = doc[0]
doc.move(sheet, 2)
* Move from sheet
.. code-block:: python
sheet = app.active_sheet
sheet.move()
* Move to position.
.. code-block:: python
sheet = app.active_sheet
sheet.move(2)
Remove
^^^^^^
* Remove by object.
.. code-block:: python
sheet = doc[0]
doc.remove(sheet)
* Remove by name.
.. code-block:: python
doc.remove('One')
* Remove from sheet.
.. code-block:: python
sheet = app.active_sheet
sheet.remove()
Copy
^^^^
* Copy inside the same spreadsheet.
* By object
.. code-block:: python
sheet = doc[0]
doc.copy_sheet(sheet, 'OtherSheet')
* By name
.. code-block:: python
doc.copy_sheet('Sheet1', 'Sheet2')
* From sheet
.. code-block:: python
sheet = app.active_sheet
sheet.copy(sheet.name + '_2')
Copy from
^^^^^^^^^
* Copy sheet from one spreadsheet to other.
.. code-block:: python
doc = app.active
doc_source = app.docs['Contacts.ods']
name_source = 'Names'
name_target = 'Names'
position = 0
doc.copy_from(doc_source, name_source, name_target, position)
Copy to
^^^^^^^
* Copy from sheet with the same name
.. code-block:: python
doc = app.docs.new()
sheet = app.active_sheet
sheet.copy_to(doc)
* Used new name
.. code-block:: python
doc = app.docs.new()
sheet = app.active_sheet
sheet.copy_to(doc, 'NewName')
Sort
^^^^
* Sort sheets by names.
.. code-block:: python
doc = app.active
doc.sort()
Name
^^^^
* Name visible by the user.
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.name)
sheet.name = 'NewName'
app.msgbox(sheet.name)
Code name
^^^^^^^^^
* Name only accessible by code.
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.code_name)
sheet.code_name = 'my_name'
app.msgbox(sheet.code_name)
Visible
^^^^^^^
* Apply only with spreadsheet with two or more sheets.
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.visible)
sheet.visible = not sheet.visible
app.msgbox(sheet.visible)
sheet.visible = not sheet.visible
Is protected
^^^^^^^^^^^^
* If sheet is protected with password.
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.is_protected)
Set password
^^^^^^^^^^^^
.. code-block:: python
sheet = app.active_sheet
sheet.password = 'letmein'
app.msgbox(sheet.is_protected)
Remove password
^^^^^^^^^^^^^^^
.. code-block:: python
sheet = app.active_sheet
sheet.password = 'letmein'
app.msgbox(sheet.is_protected)
sheet.unprotect('letmein')
app.msgbox(sheet.is_protected)
Tab color
^^^^^^^^^
.. code-block:: python
sheet = app.active_sheet
app.msgbox(sheet.color)
sheet.color = 'red'
app.msgbox(sheet.color)
# RGB
sheet.color = (125, 200, 10)
app.msgbox(sheet.color)
Document parent
^^^^^^^^^^^^^^^
.. code-block:: python
doc = sheet.doc
Activate
^^^^^^^^
.. code-block:: python
doc = app.active
# Get last sheet
sheet = doc[-1]
# Activate from doc
doc.activate(sheet)
# Activate from sheet
sheet.activate()

View File

@ -21,3 +21,18 @@ Automatic calculate size range.
)
sheet['A1'].data = data
return
Copy visible cells
^^^^^^^^^^^^^^^^^^
.. code-block:: python
doc = app.active
rangos = doc.active['A1'].current_region.visible
doc.select(rangos)
doc.copy()
doc.active['A15'].select()
doc.paste()

View File

@ -1,9 +1,9 @@
For Writer
-------------------
----------
Set autostyle in table
^^^^^^^^^^^^^^^^^^^^^^
~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
@ -12,3 +12,13 @@ Set autostyle in table
table = doc.tables[0]
table.style = 'Academic'
return
Insert math formula
~~~~~~~~~~~~~~~~~~~
.. code-block:: python
formula = '%LAMBDA_{deg","t}=1 + %alpha_deg SQRT {M_t over M_{(t=0)}-1}~"."'
text = app.selection
text.insert_math(formula)

View File

@ -83,7 +83,6 @@ from com.sun.star.table.CellContentType import EMPTY, VALUE, TEXT, FORMULA
from com.sun.star.util import Time, Date, DateTime
from com.sun.star.text.ControlCharacter import PARAGRAPH_BREAK
from com.sun.star.text.TextContentAnchorType import AS_CHARACTER
from com.sun.star.lang import Locale
from com.sun.star.lang import XEventListener
@ -163,15 +162,25 @@ TYPE_DOC = {
OBJ_CELL = 'ScCellObj'
OBJ_RANGE = 'ScCellRangeObj'
OBJ_RANGES = 'ScCellRangesObj'
TYPE_RANGES = (OBJ_CELL, OBJ_RANGE, OBJ_RANGES)
TYPE_RANGES = (OBJ_CELL, OBJ_RANGE)
OBJ_SHAPES = 'com.sun.star.drawing.SvxShapeCollection'
OBJ_SHAPE = 'com.sun.star.comp.sc.ScShapeObj'
OBJ_SHAPES = 'com.sun.star.drawing.SvxShapeCollection'
OBJ_GRAPHIC = 'SwXTextGraphicObject'
OBJ_TEXTS = 'SwXTextRanges'
OBJ_TEXT = 'SwXTextRange'
CLSID = {
'FORMULA': '078B7ABA-54FC-457F-8551-6147e776a997',
}
SERVICES = {
'TEXT_EMBEDDED': 'com.sun.star.text.TextEmbeddedObject',
'TEXT_TABLE': 'com.sun.star.text.TextTable',
'GRAPHIC': 'com.sun.star.text.GraphicObject',
}
# ~ from com.sun.star.sheet.FilterOperator import EMPTY, NO_EMPTY, EQUAL, NOT_EQUAL
class FilterOperator(IntEnum):
@ -215,6 +224,27 @@ class DataPilotFieldOrientation():
DPFO = DataPilotFieldOrientation
class CellInsertMode():
from com.sun.star.sheet.CellInsertMode import DOWN, RIGHT, ROWS, COLUMNS
CIM = CellInsertMode
class CellDeleteMode():
from com.sun.star.sheet.CellDeleteMode import UP, LEFT, ROWS, COLUMNS
CDM = CellDeleteMode
class FormButtonType():
from com.sun.star.form.FormButtonType import PUSH, SUBMIT, RESET, URL
FBT = FormButtonType
class TextContentAnchorType():
from com.sun.star.text.TextContentAnchorType \
import AT_PARAGRAPH, AS_CHARACTER, AT_PAGE, AT_FRAME, AT_CHARACTER
TCAT = TextContentAnchorType
OS = platform.system()
IS_WIN = OS == 'Windows'
IS_MAC = OS == 'Darwin'
@ -700,7 +730,8 @@ def sha512(data):
def get_config(key='', prefix='conf', default={}):
name_file = FILE_NAME_CONFIG.format(prefix)
values = None
path = _P.join(_P.config('UserConfig'), name_file)
# ~ path = _P.join(_P.config('UserConfig'), name_file)
path = _P.join(_P.user_config, name_file)
if not _P.exists(path):
return default
@ -713,7 +744,8 @@ def get_config(key='', prefix='conf', default={}):
def set_config(key, value, prefix='conf'):
name_file = FILE_NAME_CONFIG.format(prefix)
path = _P.join(_P.config('UserConfig'), name_file)
# ~ path = _P.join(_P.config('UserConfig'), name_file)
path = _P.join(_P.user_config, name_file)
values = get_config(default={}, prefix=prefix)
values[key] = value
result = _P.to_json(path, values)
@ -1121,10 +1153,6 @@ class LODocument(object):
def name(self):
return _P(self.path).name
@property
def status_bar(self):
return self._cc.getStatusIndicator()
@property
def visible(self):
w = self.frame.ContainerWindow
@ -1163,7 +1191,6 @@ class LODocument(object):
@property
def selection(self):
sel = self.obj.CurrentSelection
# ~ return _get_class_uno(sel)
return sel
@property
@ -1171,6 +1198,11 @@ class LODocument(object):
taf = create_instance('com.sun.star.sheet.TableAutoFormats')
return taf.ElementNames
@property
def status_bar(self):
bar = self._cc.getStatusIndicator()
return bar
def create_instance(self, name):
obj = self.obj.createInstance(name)
return obj
@ -1195,14 +1227,15 @@ class LODocument(object):
# ~ return self.obj.getCurrentSelection()
return
def select(self, obj):
self._cc.select(obj)
return
# ~ def select(self, obj):
# ~ self._cc.select(obj)
# ~ return
def to_pdf(self, path: str='', args: dict={}):
def to_pdf(self, path: str='', options: dict={}):
"""
https://wiki.documentfoundation.org/Macros/Python_Guide/PDF_export_filter_data
"""
args = options.copy()
stream = None
path_pdf = 'private:stream'
if path:
@ -1229,40 +1262,56 @@ class LODocument(object):
return stream
def export(self, path: str, filter_name: str, args: dict={}):
def export(self, path: str='', filter_name: str='', options: dict={}):
FILTERS = {
'xlsx': 'Calc MS Excel 2007 XML',
'xls': 'MS Excel 97',
'docx': 'MS Word 2007 XML',
'doc': 'MS Word 97',
'rtf': 'Rich Text Format',
}
args = options.copy()
stream = None
path_target = 'private:stream'
if path:
path_target = _P.to_url(path)
filter_name = FILTERS.get(filter_name, filter_name)
filter_data = dict_to_property(args, True)
args = {
'FilterName': filter_name,
'FilterData': filter_data,
}
if not path:
stream = IOStream.output()
args['OutputStream'] = stream
opt = dict_to_property(args)
try:
self.obj.storeToURL(_P.to_url(path), opt)
self.obj.storeToURL(path_target, opt)
except Exception as e:
error(e)
path = ''
return _P.exists(path)
if not stream is None:
stream = stream.buffer
def save(self, path: str='', args: dict={}) -> bool:
result = True
opt = dict_to_property(args)
if path:
try:
self.obj.storeAsURL(_P.to_url(path), opt)
except Exception as e:
error(e)
result = False
else:
return stream
def save(self, path: str='', options: dict={}):
if not path:
self.obj.store()
return result
return
args = options.copy()
path_target = _P.to_url(path)
opt = dict_to_property(args)
try:
self.obj.storeAsURL(path_target, opt)
except Exception as e:
error(e)
return
def close(self):
self.obj.close(True)
@ -1356,10 +1405,11 @@ class LOCalc(LODocument):
sel = self.obj.CurrentSelection
if sel.ImplementationName in TYPE_RANGES:
sel = LOCalcRange(sel)
elif sel.ImplementationName in OBJ_RANGES:
sel = LOCalcRanges(sel)
elif sel.ImplementationName == OBJ_SHAPES:
if len(sel) == 1:
sel = sel[0]
sel = LODrawPage(sel.Parent)[sel.Name]
sel = LOShape(sel[0])
else:
debug(sel.ImplementationName)
return sel
@ -1395,6 +1445,16 @@ class LOCalc(LODocument):
# ~ return LOCalcDataBaseRanges(self.obj.DataBaseRanges)
return self.obj.DatabaseRanges
@property
def ranges(self):
obj = self.create_instance('com.sun.star.sheet.SheetCellRanges')
return LOCalcRanges(obj)
def get_ranges(self, address: str):
ranges = self.ranges
ranges.add([sheet[address] for sheet in self])
return ranges
def activate(self, sheet):
obj = sheet
if isinstance(sheet, LOCalcSheet):
@ -1431,7 +1491,7 @@ class LOCalc(LODocument):
self._sheets.removeByName(name)
return
def copy(self, name, new_name='', pos=-1):
def copy_sheet(self, name, new_name='', pos=-1):
if isinstance(name, LOCalcSheet):
name = name.name
index = pos
@ -1474,6 +1534,10 @@ class LOCalc(LODocument):
sheet = self.active
return sheet.render(data, clean=clean)
def select(self, rango):
self._cc.select(rango.obj)
return
class LOChart(object):
@ -1708,7 +1772,8 @@ class LOSheetTables(object):
return
class LOFormControl(LOBaseObject):
# ~ class LOFormControl(LOBaseObject):
class LOFormControl():
EVENTS = {
'action': 'actionPerformed',
'click': 'mousePressed',
@ -1719,21 +1784,25 @@ class LOFormControl(LOBaseObject):
}
def __init__(self, obj, view, form):
super().__init__(obj)
self._obj = obj
self._view = view
self._form = form
self._m = view.Model
self._index = -1
def __setattr__(self, name, value):
if name in ('_form', '_view', '_m', '_index'):
self.__dict__[name] = value
else:
super().__setattr__(name, value)
# ~ def __setattr__(self, name, value):
# ~ if name in ('_form', '_view', '_m', '_index'):
# ~ self.__dict__[name] = value
# ~ else:
# ~ super().__setattr__(name, value)
def __str__(self):
return f'{self.name} ({self.type}) {[self.index]}'
@property
def obj(self):
return self._obj
@property
def form(self):
return self._form
@ -1770,6 +1839,30 @@ class LOFormControl(LOBaseObject):
def enabled(self, value):
self._m.Enabled = value
@property
def anchor(self):
return self.obj.Anchor
@anchor.setter
def anchor(self, value):
size = None
if hasattr(value, 'obj'):
size = getattr(value, 'size', None)
value = value.obj
self.obj.Anchor = value
if not size is None:
self.size = size
try:
self.obj.ResizeWithCell = True
except:
pass
@property
def size(self):
return self.obj.Size
@size.setter
def size(self, value):
self.obj.Size = value
@property
def events(self):
return self.form.getScriptEvents(self.index)
@ -1849,6 +1942,14 @@ class LOFormControlButton(LOFormControl):
def value(self, value):
self._m.Text = Label
@property
def url(self):
return self._m.TargetURL
@url.setter
def url(self, value):
self._m.TargetURL = value
self._m.ButtonType = FormButtonType.URL
FORM_CONTROL_CLASS = {
'label': LOFormControlLabel,
@ -1899,7 +2000,7 @@ class LOForm(object):
name = control.Name
tipo = types[control.ImplementationName]
view = self.doc.CurrentController.getControl(control)
control = FORM_CONTROL_CLASS[tipo](control, view)
control = FORM_CONTROL_CLASS[tipo](control, view, self._obj)
control.index = i
setattr(self, name, control)
self._controls[name] = control
@ -1952,8 +2053,8 @@ class LOForm(object):
def add(self, args):
name = args['Name']
tipo = args.pop('Type').lower()
w = args.pop('Width')
h = args.pop('Height')
w = args.pop('Width', 1000)
h = args.pop('Height', 200)
x = args.pop('X', 0)
y = args.pop('Y', 0)
control = self.doc.createInstance('com.sun.star.drawing.ControlShape')
@ -2011,7 +2112,9 @@ class LOSheetForms(object):
def names(self):
return self.obj.ElementNames
def insert(self, name):
def insert(self, name=''):
if not name:
name = f'form{self.count + 1}'
form = self.doc.createInstance('com.sun.star.form.component.Form')
self.obj.insertByName(name, form)
return LOForm(form, self._dp)
@ -2278,6 +2381,7 @@ class LOCalcSheet(object):
self.doc.activate(self.obj)
return
# ~ ???
def clean(self):
doc = self.doc
sheet = doc.create_instance('com.sun.star.sheet.Spreadsheet')
@ -2306,12 +2410,10 @@ class LOCalcSheet(object):
index = pos
if pos < 0:
index = len(doc)
name = self.name
if not target:
new_name = name
doc._sheets.importSheet(self.doc.obj, name, index)
sheet = doc[name]
new_name = target or self.name
new_pos = doc._sheets.importSheet(self.doc.obj, self.name, index)
sheet = doc[new_pos]
sheet.name = new_name
return sheet
@ -2446,6 +2548,10 @@ class LOCalcRange(object):
def type(self):
return self.obj.Type
@property
def error(self):
return self.obj.getError()
@property
def value(self):
v = None
@ -2459,10 +2565,8 @@ class LOCalcRange(object):
@value.setter
def value(self, data):
if isinstance(data, str):
# ~ print(isinstance(data, str), data[0])
if data[0] in '=':
self.obj.setFormula(data)
# ~ print('Set Formula')
else:
self.obj.setString(data)
elif isinstance(data, Decimal):
@ -2581,8 +2685,8 @@ class LOCalcRange(object):
def visible(self):
cursor = self.cursor
rangos = cursor.queryVisibleCells()
rangos = [LOCalcRange(self.sheet[r.AbsoluteName].obj) for r in rangos]
return tuple(rangos)
rangos = LOCalcRanges(rangos)
return rangos
@property
def merged_area(self):
@ -2641,7 +2745,7 @@ class LOCalcRange(object):
self.obj.Validation = current
def select(self):
self.doc.select(self.obj)
self.doc._cc.select(self.obj)
return
def search(self, options, find_all=True):
@ -2701,32 +2805,51 @@ class LOCalcRange(object):
cursor.collapseToSize(cols, rows)
return LOCalcRange(self.sheet[cursor.AbsoluteName].obj)
def copy(self, source):
def move(self, target):
sheet = self.sheet.obj
sheet.moveRange(target.address, self.range_address)
return
def insert(self, insert_mode=CIM.DOWN):
sheet = self.sheet.obj
sheet.insertCells(self.range_address, insert_mode)
return
def delete(self, delete_mode=CDM.UP):
sheet = self.sheet.obj
sheet.removeRange(self.range_address, delete_mode)
return
def copy_from(self, source):
self.sheet.obj.copyRange(self.address, source.range_address)
return
def copy_to(self, cell, formula=False):
rango = cell.to_size(self.rows, self.columns)
if formula:
rango.formula = self.data
else:
rango.data = self.data
def copy_to(self, target):
self.sheet.obj.copyRange(target.address, self.range_address)
return
def copy_from(self, rango, formula=False):
data = rango
if isinstance(rango, LOCalcRange):
if formula:
data = rango.formula
else:
data = rango.data
rows = len(data)
cols = len(data[0])
if formula:
self.to_size(rows, cols).formula = data
else:
self.to_size(rows, cols).data = data
return
# ~ def copy_to(self, cell, formula=False):
# ~ rango = cell.to_size(self.rows, self.columns)
# ~ if formula:
# ~ rango.formula = self.formula
# ~ else:
# ~ rango.data = self.data
# ~ return
# ~ def copy_from(self, rango, formula=False):
# ~ data = rango
# ~ if isinstance(rango, LOCalcRange):
# ~ if formula:
# ~ data = rango.formula
# ~ else:
# ~ data = rango.data
# ~ rows = len(data)
# ~ cols = len(data[0])
# ~ if formula:
# ~ self.to_size(rows, cols).formula = data
# ~ else:
# ~ self.to_size(rows, cols).data = data
# ~ return
def optimal_width(self):
self.obj.Columns.OptimalWidth = True
@ -2933,6 +3056,87 @@ class LOCalcRange(object):
return values
class LOCalcRanges(object):
def __init__(self, obj):
self._obj = obj
self._ranges = {}
self._index = 0
for r in obj:
sheet = r.Spreadsheet
rango = LOCalcRange(sheet[r.AbsoluteName])
self._ranges[rango.name] = rango
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
pass
def __len__(self):
return self._obj.Count
def __contains__(self, item):
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
def names(self):
return self.obj.ElementNames
@property
def data(self):
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):
if isinstance(rangos, LOCalcRange):
rangos = (rangos,)
for r in rangos:
self._ranges[r.name] = r
self.obj.addRangeAddress(r.range_address, False)
return
def remove(self, rangos):
if isinstance(rangos, LOCalcRange):
rangos = (rangos,)
for r in rangos:
del self._ranges[r.name]
self.obj.removeRangeAddress(r.range_address)
return
class LOWriterStyles(object):
def __init__(self, styles):
@ -3113,6 +3317,17 @@ class LOWriterTextRange(object):
self.text.insertTextContent(cursor, data, replace)
return
def insert_math(self, formula,
anchor_type=TextContentAnchorType.AS_CHARACTER,
cursor=None, replace=False):
math = self._doc.create_instance(SERVICES['TEXT_EMBEDDED'])
math.CLSID = CLSID['FORMULA']
math.AnchorType = anchor_type
self.insert_content(math, cursor, replace)
math.EmbeddedObject.Component.Formula = formula
return math
def new_line(self, count=1):
cursor = self.cursor
for i in range(count):
@ -3120,7 +3335,7 @@ class LOWriterTextRange(object):
return self._doc.selection
def insert_table(self, data):
table = self._doc.create_instance('com.sun.star.text.TextTable')
table = self._doc.create_instance(SERVICES['TEXT_TABLE'])
rows = len(data)
cols = len(data[0])
table.initialize(rows, cols)
@ -3133,9 +3348,10 @@ class LOWriterTextRange(object):
def insert_image(self, path, args={}):
w = args.get('Width', 1000)
h = args.get('Height', 1000)
image = self._doc.create_instance('com.sun.star.text.GraphicObject')
image = self._doc.create_instance(SERVICES['GRAPHIC'])
image.GraphicURL = _P.to_url(path)
image.AnchorType = AS_CHARACTER
image.AnchorType = TextContentAnchorType.AS_CHARACTER
image.Width = w
image.Height = h
self.insert_content(image)
@ -3353,7 +3569,7 @@ class LOWriter(LODocument):
class LOShape(LOBaseObject):
IMAGE = 'com.sun.star.drawing.GraphicObjectShape'
def __init__(self, obj, index):
def __init__(self, obj, index=-1):
self._index = index
super().__init__(obj)
@ -6140,6 +6356,7 @@ class LODBServer(object):
self._conn = None
self._error = 'Not connected'
self._type = ''
self._drivers = []
def __str__(self):
return f'DB type {self._type}'
@ -6158,13 +6375,19 @@ class LODBServer(object):
def error(self):
return self._error
@property
def drivers(self):
return self._drivers
def disconnet(self):
if not self._conn is None:
if not self._conn.isClosed():
self._conn.close()
self._conn.dispose()
return
def connect(self, args):
def connect(self, options={}):
args = options.copy()
self._error = ''
self._type = args.get('type', 'postgres')
driver = self.DRIVERS[self._type]
@ -6175,9 +6398,15 @@ class LODBServer(object):
password = args['password']
data = {'user': user, 'password': password}
url = f'sdbc:{driver}://{server}:{port}/{dbname}'
url = f'sdbc:{driver}:{server}:{port}/{dbname}'
# ~ https://downloads.mariadb.com/Connectors/java/
# ~ data['JavaDriverClass'] = 'org.mariadb.jdbc.Driver'
# ~ url = f'jdbc:mysql://{server}:{port}/{dbname}'
args = dict_to_property(data)
manager = create_instance('com.sun.star.sdbc.DriverManager')
self._drivers = [d.ImplementationName for d in manager]
try:
self._conn = manager.getConnectionWithInfo(url, args)
@ -6187,6 +6416,18 @@ class LODBServer(object):
return self
def execute(self, sql):
query = self._conn.createStatement()
try:
query.execute(sql)
result = True
except Exception as e:
error(e)
self._error = str(e)
result = False
return result
def create_window(args):
return LOWindow(args)
@ -6306,6 +6547,17 @@ class Paths(object):
path = sys.executable
return path
@classproperty
def user_profile(self):
path = self.config('UserConfig')
path = str(Path(path).parent)
return path
@classproperty
def user_config(self):
path = self.config('UserConfig')
return path
@classmethod
def dir_tmp(self, only_name=False):
dt = tempfile.TemporaryDirectory()
@ -6657,6 +6909,20 @@ class Dates(object):
d = datetime.date(year, month, day)
return d
@classmethod
def str_to_date(cls, str_date, template, to_calc=False):
d = datetime.datetime.strptime(str_date, template).date()
if to_calc:
d = d.toordinal() - DATE_OFFSET
return d
@classmethod
def calc_to_date(cls, value, frm=''):
d = datetime.date.fromordinal(int(value) + DATE_OFFSET)
if frm:
d = d.strftime(frm)
return d
class OutputStream(unohelper.Base, XOutputStream):