我甚至不確定我可以在Excel中做到這一點,但有充分的信心,在VBA世界有足夠的嗅覺,我可以做到這一點。但是,在可預見的將來,我已經切換到了OpenOffice,所以我的問題是:自動化OpenOffice中的圖表標題Calc
在OpenOffice 4.0中,有可能將圖表的標題鏈接到電子表格單元格?本質上,我希望圖表上的粗體標題能夠在電子表格上的特定單元格更新時發生變化。此單元格已經控制哪些數據在圖表上繪製。
我甚至不確定我可以在Excel中做到這一點,但有充分的信心,在VBA世界有足夠的嗅覺,我可以做到這一點。但是,在可預見的將來,我已經切換到了OpenOffice,所以我的問題是:自動化OpenOffice中的圖表標題Calc
在OpenOffice 4.0中,有可能將圖表的標題鏈接到電子表格單元格?本質上,我希望圖表上的粗體標題能夠在電子表格上的特定單元格更新時發生變化。此單元格已經控制哪些數據在圖表上繪製。
是的,這是可能的,並與OpenOffice宏很容易。一步步驟:
啓用宏
轉到工具>選項菜單,然後單擊安全部分下OpenOffice.org。一旦出現,請單擊宏安全按鈕。現在在安全級別選項卡上,確保您的設置將允許您運行宏。
我的設置很低,因爲我是我運行的所有宏的作者,如果您不確定這是否是您的情況,則可能需要使用更高的設置。
注意:要小心,如果你運氣不好或生活在90年代,邪惡的宏可能會造成嚴重的傷害!
創建一個新的宏
現在,你可以運行它們,你必須創建一個新的宏。 OpenOffice接受包括Python在內的各種語言,但由於您在提到的問題中提到了VBA,因此我將在此使用OO的版本。
轉到工具>宏>組織宏> OpenOffice.org Basic,然後在文件樹下添加一個新模塊。給它一個有意義的名字。
實際宏觀
一旦你創建了一個新的模塊編輯器屏幕上會彈出,寫下面這段代碼:
' Set the title of the first Chart to the contents of C1
Sub SetTitle
' Get active sheet
oSheet = ThisComponent.CurrentController.ActiveSheet
' Get the cell containing the chart title, in this case C1
oCell = oSheet.getCellRangeByName("C1")
oCharts = oSheet.getCharts()
' Get the chart with index 0, which is the first chart created
' to get the second you would use 1, the third 2 and so on...
oChart = oCharts.getByIndex(0)
oChartDoc = oChart.getEmbeddedObject()
'Change title
oChartDoc.getTitle().String = oCell.getString()
End Sub
爲了測試它,只需創建一個圖表,在C1單元格上添加一些標題並運行宏。您可以通過多種方式運行宏,僅用於創建模塊的同一窗口上的「運行」按鈕進行測試。這是預期的結果:
進一步完善宏觀
宏有一些問題,因爲它是現在,如:
這很容易修復。自動化宏執行的方法有很多種,我最熟悉的方法就是使它在一個循環中運行,並延遲5秒,並在文件加載後立即啓動。
Sub Main
Do While True
SetTitle()
Wait(5000)
Loop
End Sub
從現在開始,您應該調用Main子代替SetTitle。
要在啓動時運行宏去工具>在活動自定義選項卡,然後從列表中選擇打開文檔然後點擊宏按鈕。在對話框中選擇宏,選主。現在關閉文件,重新打開它,瞧!
您可以使用圖表名稱,而不是(右鍵單擊圖表>名稱)是這樣的:
oChart = oCharts.getByName("Chart Name")
進一步閱讀