2017-08-24 86 views
0

我在java中创建了一个使用open office api的表格。现在我想格式化表格单元格内容,如给它背景颜色,更改字体,大小和对齐方式。 我的代码是OpenOffice表格格式化java

XMultiServiceFactory xMSF = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, xdocument); 

     // Creating a table with 13 rows and 2 columns 
     XTextTable xTextTable = (XTextTable) UnoRuntime.queryInterface(XTextTable.class, xMSF.createInstance("com.sun.star.text.TextTable")); 
     xTextTable.initialize(2, 2); // rows, cols 

     // insert table in the xText 

     xText.insertTextContent(xText.getEnd(), xTextTable, false); 
     XPropertySet xPS1 = (XPropertySet) UnoRuntime.queryInterface(
     XPropertySet.class, xTextTable); 

     // Get table Width and TableColumnRelativeSum properties values 
     int iWidth = (Integer) xPS1.getPropertyValue("Width"); 
     short sTableColumnRelativeSum = (Short) xPS1.getPropertyValue("TableColumnRelativeSum"); 

     // Calculate conversion ration 
     double dRatio = (double) sTableColumnRelativeSum/(double) iWidth; 

     // Convert our 20 mm (2000) to unknown (relative) units 
     double dRelativeWidth = (double) 25000 * dRatio; 

     // Get table column separators 
     Object xObj = xPS1.getPropertyValue("TableColumnSeparators"); 

     TableColumnSeparator[] xSeparators = (TableColumnSeparator[])UnoRuntime.queryInterface(
     TableColumnSeparator[].class, xObj); 

     // Last table column separator position 
     double dPosition = sTableColumnRelativeSum - dRelativeWidth; 

     // Set set new position for all column separators   
     for (int i = xSeparators.length - 1 ; i >= 0 ; i--) 
     { 
     xSeparators[i].Position = (short) Math.ceil(dPosition); 
     dPosition -= dRelativeWidth; 
     } 

     // Do not forget to set TableColumnSeparators back! Otherwise, it doesn't work. 
     xPS1.setPropertyValue("TableColumnSeparators", xSeparators); 


     XCellRange xCellRangeHeader = (XCellRange) UnoRuntime.queryInterface(XCellRange.class, xTextTable); 
     XCell xCellHeader = null; 
     XText xHeaderText = null; 



     xCellHeader = xCellRangeHeader.getCellByPosition(0,0); // cols, rows 
     xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader); 
     xHeaderText.setString("Records Center Total Capacity"); 

     xCellHeader = xCellRangeHeader.getCellByPosition(1,0); // cols, rows 
     xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader); 
     xHeaderText.setString(""+RecordCentrecapacity); 

     xCellHeader = xCellRangeHeader.getCellByPosition(0,1); // cols, rows 
     xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader); 
     xHeaderText.setString("Current Inventory For Week Ending"); 

     xCellHeader = xCellRangeHeader.getCellByPosition(1,1); // cols, rows 
     xHeaderText = (XText) UnoRuntime.queryInterface(XText.class, xCellHeader); 
     xHeaderText.setString(""+currentTotalInventory); 

你能帮我,我这个话题在新的,我想根据我的需要格式化的表格。

回答

0

从SWriter例如在https://api.libreoffice.org/examples/examples.html#Java_examples

//create instance of a text table 
com.sun.star.text.XTextTable xTT = null; 

// get the property set of the text table 
com.sun.star.beans.XPropertySet xTTPS = UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class, xTT); 

// Change the BackColor 
try { 
    xTTPS.setPropertyValue("BackTransparent", Boolean.FALSE); 
    xTTPS.setPropertyValue("BackColor",Integer.valueOf(13421823)); 
    xTTRowPS.setPropertyValue("BackTransparent", Boolean.FALSE); 
    xTTRowPS.setPropertyValue("BackColor",Integer.valueOf(6710932)); 

} catch (Exception e) { 
    System.err.println("Couldn't change the color " + e); 
    e.printStackTrace(System.err); 
} 

// get the property set of the cursor 
com.sun.star.beans.XPropertySet xTCPS = UnoRuntime.queryInterface(com.sun.star.beans.XPropertySet.class, 
          xTCursor); 

// Change the CharColor and add a Shadow 
try { 
    xTCPS.setPropertyValue("CharColor",Integer.valueOf(255)); 
    xTCPS.setPropertyValue("CharShadowed", Boolean.TRUE); 
} catch (Exception e) { 
    System.err.println("Couldn't change the color " + e); 
    e.printStackTrace(System.err); 
} 

而且从https://wiki.openoffice.org/wiki/API/Samples/Java/Writer/TextTable#Horizontal_alignmentL

XPropertySet xPS = (XPropertySet) UnoRuntime.queryInterface(
    XPropertySet.class, xTextTable); 

xPS.setPropertyValue("HoriOrient", com.sun.star.text.HoriOrientation.NONE); 

int iLeftMargin, iRightMargin; // I assume you know how do you want to align your table 

xPS.setPropertyValue("LeftMargin", iLeftMargin); 
xPS.setPropertyValue("RightMargin", iRightMargin); 

又见C++在https://wiki.openoffice.org/wiki/Writer/API/Tables#Changing_Appearance例子。

EDIT

这里是一个Python的例子,其设定的颜色和单细胞的垂直取向。 XrayTool显示TextTable单元格支持com.sun.star.text.CellProperties

cell = table.getCellByName("A1") 
cell.BackColor = int("FF00FF", 16) 
cell.setPropertyValue("VertOrient", 2) 
+0

这是整个表格,但如何添加颜色或对齐表单单元格的文本而不是其他单元格 –