【问题标题】:OpenOffice API - OptimalWidth option for table(all columns)OpenOffice API - 表格的 OptimalWidth 选项(所有列)
【发布时间】:2009-09-01 20:36:47
【问题描述】:

我正在研究通过 UNO 与 OpenOffice(swriter) 交互的 Java API。 对于 TextTable,我很难设置 TableColumn 的“OptimalWidth”属性。

我试过下面的代码,似乎 getColumns() 方法无法将我带到 TableColumn 的属性,只让你插入和删除列。

XTableColumns xColumns = xTextTable.getColumns();
XIndexAccess xIndexAccess = (XIndexAccess) UnoRuntime.queryInterface(
        XIndexAccess.class, xColumns);

for (int i = 0; i < xIndexAccess.getCount(); i++) {
    XPropertySet xColumnProps = (XPropertySet) UnoRuntime
            .queryInterface(XPropertySet.class,
                    (Any) xIndexAccess.getByIndex(i));
    if (xColumnProps != null) {
        xColumn.setPropertyValue("OptimalWidth", new Boolean(true));
    }
}

谁能帮助我或给我任何设置表格的 OptimalWidth 属性的提示? 非常感谢您!

【问题讨论】:

    标签: java api openoffice.org openoffice-writer


    【解决方案1】:

    找出来是一段艰辛的旅程,但我终于设法创建了一个完全可以做到这一点的函数:

    private void optimizeTableColumnWidths(XTextTable table)
    throws Exception
    {
        XTextViewCursorSupplier cursorSupplier = (XTextViewCursorSupplier)
                UnoRuntime.queryInterface(XTextViewCursorSupplier.class,
                        document.getCurrentController());
        XTextViewCursor viewCursor = cursorSupplier.getViewCursor();
    
        String cellName = "A1";
        XText cellText = (XText)UnoRuntime.queryInterface(
                XText.class, table.getCellByName(cellName));
        XTextCursor cursor = cellText.createTextCursor();
    
        viewCursor.gotoRange(cursor, false);
        viewCursor.gotoEnd(true);
        viewCursor.gotoEnd(true);
    
        XController controller = document.getCurrentController();
        XFrame frame = controller.getFrame();
        XDispatchProvider dispatchProvider = (XDispatchProvider)
            UnoRuntime.queryInterface(XDispatchProvider.class, frame);
    
        String unoAction = ".uno:SetOptimalColumnWidth";
        String targetFrameName = "";
        int searchFlags = 0;
        PropertyValue[] properties = new PropertyValue[0];
    
        dispatchHelper.executeDispatch(
                dispatchProvider,
                unoAction,
                targetFrameName,
                searchFlags,
                properties);
    }
    

    重要的是 dispatchHelper 来自 OpenOffice 上下文,而不是来自当前文档。我以这种方式检索了 dispatchHelper:

      XComponentContext context = Bootstrap.bootstrap();
      XMultiComponentFactory factory =
            context.getServiceManager();
      Object dispatchHelperObject = factory.createInstanceWithContext(
            "com.sun.star.frame.DispatchHelper", ooContext);
      this.dispatchHelper = (XDispatchHelper)UnoRuntime.queryInterface(
            XDispatchHelper.class, dispatchHelperObject);
    

    【讨论】:

    • 我没有机会确认您的答案,但看起来不错。我将根据 Miguel 的回复接受您的回答,并稍后检查。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2015-02-07
    • 2010-11-09
    • 1970-01-01
    相关资源
    最近更新 更多