私はOOo CalcでOpenOffice数式エディタを自動入力する方法は?
問題は、文字列式のマークアップとして出力されます(私は教師です)私は簡単に新しいワークシートを作成し更新することができ算数の問題の配列を生成する疑似乱数とOpenOfficeのCalcのスプレッドシートの数式を使用しています形。 OOo数式は、これらの文字列コマンドをエディタに入力して、きれいにフォーマットされた数式を表示します。
1) go to source cell and copy string mark-up to clipboard
2) select target cell and clear existing contents and objects
3) create new Math object anchored to target cell
4) open Math editor window and paste in mark-up string
5) exit Math editor window and return cursor to source cell
結果:与えられた算術問題の素敵な数学表現
は私が手動でこの次のステップを行うことができます。
さまざまなシートのソースセルの列全体でこれを実行できる必要があります。 ...ソースが更新されると、リスナーを追加して動的に更新することもできます。
固定されたペアのセルでこれを達成するコードはCell content inside formulaですが、私の最善の努力にもかかわらず、私は敗北を認めなければなりませんでした - このコードを一般化することは、
絶対的な理想は、スプレッドシート関数のように呼び出すことができるマクロ関数です。上記のアルゴリズムを実行し、必要に応じて動的に更新できる入力引数(sourceCell、targetCell、listenerON/OFF)を使用します。
誰かが私を助けることができますか?このような解決策、またはあらゆる種類の回避策が非常に役立ちます。 UPDATE 2016年10月27日
はあなたに仕事をしたジム・Kを、ありがとうございました、しかしdispacherの使用は、私が予想していなかった困難の全体のホストが付属しています。 OpenOfficeフォーラムでCharlie Young's postが見つかりました。これはAPIを利用しています。私は自分のコードの私の適応を以下に挙げました。
誰も私が説明したのと同様の方法でそれを関数に統合する手助けができますか?ターゲットセルにMathオブジェクトの配置を解決する方法がわかりません。
APIコードは、コードが更新されるたびに新しいMathオブジェクトを作成するため、優れています。既存のものは削除する必要があります。
私は、関数内から既存のオブジェクトを削除できないという限界が残っていると思います。これは関数によって呼び出されたサブルーチンによって実行されたとしても当てはまりますか?
function InsertFormula(paraFromCell, paraToCell)
Dim oDoc As Object
Dim oSheet As Object
Dim oShape As Object
oDoc = ThisComponent
oSheet = oDoc.Sheets(0)
oShape = oDoc.createInstance("com.sun.star.drawing.OLE2Shape")
oShape.CLSID = "078B7ABA-54FC-457F-8551-6147e776a997"
oSheet.Drawpage.Add(oShape)
oShape.Model.Formula = paraFromCell
oShape.setSize(oShape.OriginalSize)
end function
次の更新
私はかなり早く、今の私自身の問題を解決するために管理してきた...
私はサブではなく、機能と行くことにしました、私はシートにアクセスして既存のオブジェクトを削除することができます。コードが添付されています - ソースセルは列Cにあり、ターゲットセルは列Aの行に一致しています。これまでは$ A $ 1にオブジェクトを送ることしかできませんでした。
新しいオブジェクトを特定のセルにアンカーするにはどうすればよいですか?
Mifeetの例から始めREM ***** BASIC *****
Sub InsertThisFormula
Dim oDoc As Object
Dim oSheet As Object
Dim oShape As Object
Dim sourceCell As Object
Dim targetCell As Object
oDoc = ThisComponent
oSheet = oDoc.Sheets(1)
Dim n As Integer
n = 1 'number of rows of formulas
for i = 0 To n-1
rem loop through cells
sourceCell = oSheet.getCellByPosition(2, i)
targetCell = oSheet.getCellByPosition(0, i)
rem clear target cell object/s
targetCell.ClearContents(128)
oShape = oDoc.createInstance("com.sun.star.drawing.OLE2Shape")
oShape.CLSID = "078B7ABA-54FC-457F-8551-6147e776a997"
oSheet.Drawpage.Add(oShape)
oShape.Model.Formula = sourceCell.string
oShape.setSize(oShape.OriginalSize)
Next i
End Sub
あなたのタイトルから 'Solved'を削除して、あなたは正しい答えとして見つかったソリューションを投稿してください。 – usr2564301