2013-03-12 5 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을 사용하여 매크로를 실행할 수 있습니다. insertFormula을 실행하여 셀 C3에서 생성 된 수식을 삽입하거나 addFormulaListener을 실행하여 수신기 내용을 등록하고 C3 내용이 변경 될 때마다 수식을 재생성합니다.

여기에 코드가 있습니다. 여기에는 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"으로 변경해야했습니다. –