2013-03-12 17 views
9

数式の中にセルの内容を配置することは可能ですか?式は、数式エディタ(挿入 - >オブジェクト - >数式)を意味します。数式内のセル内容

+0

まだ反応がありません。これは素晴らしい機能です! –

答えて

4

私の知る限りでは、式からセルを参照する方法はありません。数式エディタにはOO Calcに関する知識がありません。ただし、必要に応じてマクロを使用して新しい式を作成することができます。

それを動作させるためにthesseの手順に従ってください。

  1. はあなたがセルに挿入する数学の公式を入れてください。例えば、セルC3に次のセルA1、A2、A3にいくつかの数字を入れて置く:

    =CONCATENATE("{";A1;"}";"over {";A2;" `+` ";A3;"}";" `=` ";A4). 
    

    これは、以下のコードからマクロを作成します

  2. C3

    {1} over {2 `+` 3} `=のようなものを生成します。 OO Calcで選択します。

    Tools > Macros > Organize Macros > OpenOffice.org Basic > My Macros > Standard 
    

    新しいマクロを作成し、以下のコードを貼り付けます。

  3. Tools > Macros > Run Macroを使用してマクロを実行できます。セルC3から生成された数式を挿入するinsertFormula、またはC3の内容が変更されたときにリスナーを登録して式を再生成するaddFormulaListenerのいずれかを実行します。

ここにコードがあります。これには、計算式ソースを持つセルと生成された式オブジェクトを配置するターゲットセルを指定する定数formulaCellFromformulaCellToが含まれています。 ターゲットセルは、生成された数式に十分な大きさでなければなりません。そうでないと、式を再生成するときに、セルの古い内容が削除されません。

const formulaCellFrom As String = "$C$1" 
const formulaCellTo As String = "$C$10" 

rem ---------------------------------------------------------------------- 
rem Adds listener for changes of the math formula 
sub addFormulaListener 
dim oSheet as Object 
dim oCell as Object 
rem go to cell containing markup 
oSheet = ThisComponent.CurrentController.ActiveSheet 
oCell = oSheet.getCellRangeByName(formulaCellFrom) 
rem add listener 
oListener = CreateUnoListener("formulaListener_", "com.sun.star.chart.XChartDataChangeEventListener") 
oCell.addChartDataChangeEventListener(oListener) 
end sub 

rem ---------------------------------------------------------------------- 
rem Listener for cell changes 
sub formulaListener_chartDataChanged 
dim oCell as Object 

rem remember current cursor position 
oCell = ThisComponent.CurrentSelection 

rem call insertFormula 
call insertFormula 

rem restore cursor position 
ThisComponent.CurrentController.select(oCell) 
end sub 

rem ---------------------------------------------------------------------- 
rem Creates a math formula from text in cell C1 and inserts it into cell C10 
sub insertFormula 

dim document as object 
dim dispatcher as object 
rem get access to the document 
document = ThisComponent.CurrentController.Frame 
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") 

rem go to cell containing markup and copy it 
dim fromCellArgs(0) as new com.sun.star.beans.PropertyValue 
fromCellArgs(0).Name = "ToPoint" 
fromCellArgs(0).Value = formulaCellFrom 
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, fromCellArgs()) 
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array()) 

rem go to cell where I want the formula displayed 
dim toCellArgs(0) as new com.sun.star.beans.PropertyValue 
toCellArgs(0).Name = "ToPoint" 
toCellArgs(0).Value = formulaCellTo 
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, toCellArgs()) 

rem delete previous content 
dim deleteArgs(0) as new com.sun.star.beans.PropertyValue 
deleteArgs(0).Name = "Flags" 
rem flags: A = All, S = String, V = Value, D = DateTeim, F = Formula, ... 
rem ... N = Notes, T = Formats, O = Objects 
deleteArgs(0).Value = "AO" 
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, deleteArgs()) 

rem open Star.Math 
oDesk = createUnoService ("com.sun.star.frame.Desktop") 
dispatcher.executeDispatch(document, ".uno:InsertObjectStarMath", "", 0, Array()) 

rem get access to the document 
document = ThisComponent.CurrentController.Frame 
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") 

rem paste clipboard using Array() as place-holder for variable name 
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array()) 

rem exit Star.Math 
dispatcher.executeDispatch(document, ".uno:TerminateInplaceActivation", "", 0, Array()) 
end sub 

コードはthis questionに適合しています。明らかに、マクロはMy Macrosで作成されなければならず、スプレッドシートに埋め込まれていると機能しません(セキュリティ対策?私にとってはうまく機能しませんでした)。ソースセルとターゲットセルはハードコードされていますが、必要に応じてマクロを変更できます。私はVisual Basicに熟練していませんが、そのような変更は簡単に行うべきです。

+0

これらの手順を実行するには、 'formulaCellFrom'を「$ C $ 3」に変更する必要がありました。 –

関連する問題