*表 [#ne635215] OOo 3.0 から Draw および Impress で表が作成できるようになりました。com.sun.star.drawing.TableShape を利用します。 #contents **挿入 [#l7e60331] ドキュメントの XMultiServiceFactory インターフェースから com.sun.star.drawing.TableShape サービスをインスタンス化してドローページに挿入します。 Sub tableshape_1 oDoc = ThisComponent oDrawPage = oDoc.getCurrentController().getCurrentPage() oShape = oDoc.createInstance("com.sun.star.drawing.TableShape") aPoint = CreateUnoStruct("com.sun.star.awt.Point") aSize = CreateUnoStruct("com.sun.star.awt.Size") aPoint.X = 1000 aPoint.Y = 1000 aSize.Width = 5000 aSize.Height = 5000 oShape.setPosition(aPoint) oShape.setSize(aSize) oDrawPage.add(oShape) End Sub 削除、その他の操作は他の図形描写オブジェクトと同じように行えます。 **表の操作 [#ge4e95fb] 挿入したすぐの表にはセルが一つしかありません。セルを追加したり、データを入力します。 oTable = oShape.Model ***列と行 [#we3deb64] 列コンテナと行コンテナ。Calc のシートなどと同じように操作します。 ***セルの挿入 [#bf06de52] セルを挿入します。 列を挿入。 oColumns = oTable.getColumns() oColumns.insertByIndex(0, 2) 行も同様に行えます。 ***セルの削除 [#a647b9e3] 列を削除。指定したインデックスから個数分だけ列を削除します。 oColumns.removeByIndex(1,1) ***セル [#u6aa59fa] セルは Writer の表のセルと同じような操作が行えます。 oCell = oTable.getCellByPosition(0,1) oCell.setString("cell 1") ** 表デザイン [#u6c96bbd] 表のデザインはスタイルで管理されています。GUI では表示されませんが table および cell スタイルファミリがありそれらでスタイルを管理します。 追加したデザインは表デザイン一覧に表示されます。しかし、利用していない表は保存時に削除されます。 *** 表スタイルファミリ [#f4da9f28] 表デザインの各スタイルを定義します。 oDoc = ThisComponent oStyleFamiles = oDoc.getStyleFamilies() oTableStyles = oStyleFamilies.getByName("table") 各表スタイルは次のような要素を持ち、それぞれがセルスタイルを示します。 |background|背景| |body|一般セル| |even-columns|偶数列| |even-rows|偶数行| |first-column|最初の列| |first-row|最初の行| |last-column|最初の行| |last-row|最後の行| |odd-columns|奇数列| |odd-rows|奇数行| 新しいスタイルを作成するには次のようにします。 ' create new style sCustomStyle = "custom2" oTableStyle = oTableStyles.createInstance() oTableStyle.setName(sCustomStyle) oTableStyles.insertByName(sCustomStyle, oTableStyle) 表のスタイルはドキュメント内で使用されていない場合にはファイルに保存されません。 *** セルスタイルファミリ [#o06ab7a9] oCellStyles = oStyleFamilies.getByName("cell") *** 例 [#c6f2e41a] 表デザインを追加します。 表デザインを追加します。背景、枠線を設定していますが枠線は反映されません。デザインの設定では枠線は利用されないようです。 #code(basic){{ Sub ImpressTable oDoc = ThisComponent oStyleFamilies = oDoc.getStyleFamilies() oCellStyles = oStyleFamilies.getByName("cell") oTableStyles = oStyleFamilies.getByName("table") ' create new style sCustomStyle = "custom2" oTableStyle = oTableStyles.createInstance() oTableStyle.setParentStyle("default") oTableStyle.setName(sCustomStyle) If oTableStyles.hasByName(sCustomStyle) Then oTableStyles.replaceByName(sCustomStyle, oTableStyle) Else oTableStyles.insertByName(sCustomStyle, oTableStyle) End If oCellStyle = CreateCellStyle(oTableStyle, oCellStyles, "custom1", "body", _ Array("FillColor", "LineColor", "LineWidth", "LineStyle", "CharHeight"), _ Array(1234567, 0, 10, com.sun.star.drawing.LineStyle.NONE, 24.0)) ' set style oPage = oDoc.getDrawPages().getByIndex(0) oShape = oPage.getByIndex(0) oShape.TableTemplate = oTableStyle End Sub Function CreateCellStyle( _ oTableStyle As Object, oCellStyles As Object, _ sStyleName As String, sCategory As String, _ sNames As Object, oValues As Object) As Object oCellStyle = oCellStyles.createInstance() oCellStyle.setParentStyle("default") oCellStyle.setName(sStyleName) For i = 0 To UBound(sNames) step 1 oCellStyle.setPropertyValue(sNames(i), oValues(i)) Next If oCellStyles.hasByName(sStyleName) Then oCellStyles.replaceByName(sStyleName, oCellStyle) Else oCellStyles.insertByName(sStyleName, oCellStyle) End If oTableStyle.replaceByName(sCategory, oCellStyle) CreateCellStyle = oCellStyle End Function }} |