【问题标题】:OpenOffice table formatting javaOpenOffice 表格格式化 java
【发布时间】:2017-08-24 03:52:20
【问题描述】:

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

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);

你能帮我吗,因为我是这个主题的新手,我想根据我的需要格式化表格。

【问题讨论】:

    标签: java api styles openoffice.org


    【解决方案1】:

    来自https://api.libreoffice.org/examples/examples.html#Java_examples 的 SWriter 示例:

    //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 );
    

    另请参阅https://wiki.openoffice.org/wiki/Writer/API/Tables#Changing_Appearance 上的 C++ 示例。

    编辑

    这是一个 Python 示例,用于设置单个单元格的颜色和垂直对齐方式。 XrayTool 显示 TextTable 单元格支持com.sun.star.text.CellProperties

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

    【讨论】:

    • 这适用于整个表格,但如何为表格的单个单元格而不是其他单元格添加颜色或对齐文本
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多