<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; OOo Basic: работа с диапазонами ячеек Calc]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=2830&amp;type=atom" />
	<updated>2009-02-23T19:11:06Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=2830</id>
		<entry>
			<title type="html"><![CDATA[OOo Basic: работа с диапазонами ячеек Calc]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=19904#p19904" />
			<content type="html"><![CDATA[<p>Пример демонстрирует простейшие приёмы работы с диапазонами ячеек Calc: получение текущего выделения, разбор ячеек в нём, доступ к данным ячеек, установка данных ячеек.</p><p>Макрос обрабатывает текущую ячейку, выделенный диапазон или группу диапазонов (все диапазоны должны состоять из одной колонки). Макрос удаляет из текста ячеек запятые, а затем разбивает текст каждой ячейки, ориентируясь по пробелам, и размещает разбитый текст по соседним ячейкам справа от обрабатываемой ячейки. Макрос предназначен для облегчения копи-пастинга табличных данных из документов PDF в Calc (по умолчанию такие данные вставляются в Calc в одну колонку, и таблица &quot;сминается&quot;). После такой вставки можно выделить вставленные данные и запустить этот макрос, который &quot;поправит&quot; эти данные.<br /></p><div class="codebox"><pre><code>&#039; Макрос &quot;Таблица из PDF&quot;
Sub PasteTableFromPDF()
    sel = ThisComponent.CurrentController.getSelection()
    &#039; sel - это объект ScCellObj, ScCellRangeObj или ScCellRangesObj
    If sel.getImplementationName() = &quot;ScCellObj&quot; Then &#039; одна ячейка
        CellProcessing sel
    ElseIf sel.getImplementationName() = &quot;ScCellRangeObj&quot; Then &#039; диапазон
        RangeProcessing sel
    ElseIf sel.getImplementationName() = &quot;ScCellRangesObj&quot; Then &#039; группа диапазонов
        For i = 0 To sel.getCount() - 1
            RangeProcessing sel.getByIndex(i)
        Next
    End If
End Sub
&#039;==================================================================================================
&#039; Обработка одной ячейки (конечная процедура)
Sub CellProcessing(oCell)
    &#039; адрес ячейки:
    col = oCell.getRangeAddress().StartColumn
    row = oCell.getRangeAddress().StartRow
    
    txt = oCell.getFormula()
    txt = Replace(txt, &quot;,&quot;, &quot;&quot;) &#039; убрать запятые
    &#039;txt = Replace(txt, &quot;.&quot;, &quot;,&quot;) &#039; заменить точки на запятые
    &#039; разнос текста ячейки вправо, с заменой значений соседних ячеек:
    arr = Split(txt)
    ActiveSheet = ThisComponent.CurrentController.ActiveSheet
    For i = 0 To UBound(arr)
        cell = ActiveSheet.getCellByPosition(col + i, row)
        cell.setFormula(arr(i))
    Next
End Sub
&#039;==================================================================================================
&#039; Обработка диапазона ячеек
Sub RangeProcessing(oRange)
    startCol = oRange.getRangeAddress().StartColumn
    endCol = oRange.getRangeAddress().EndColumn
    If endCol &lt;&gt; startCol Then
        Exit Sub &#039; диапазон должен состоять из единственного столбца
    End If
    startRow = oRange.getRangeAddress().StartRow
    endRow = oRange.getRangeAddress().EndRow
    For i = 0 To endRow - startRow
        CellProcessing oRange.getCellByPosition(startCol, i)
    Next
End Sub</code></pre></div>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2009-02-23T19:11:06Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=19904#p19904</id>
		</entry>
</feed>
