OpenOffice API - 表格的 OptimalWidth 选项(所有列)

Posted

技术标签:

【中文标题】OpenOffice API - 表格的 OptimalWidth 选项(所有列)【英文标题】:OpenOffice API - OptimalWidth option for table(all columns) 【发布时间】: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 属性的提示? 非常感谢您!

【问题讨论】:

【参考方案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 的回复接受您的回答,并稍后检查。谢谢!

以上是关于OpenOffice API - 表格的 OptimalWidth 选项(所有列)的主要内容,如果未能解决你的问题,请参考以下文章

从 Writer 宏打开 OpenOffice 电子表格

在 OpenOffice 电子表格文件上写入多个工作表

读取 OpenOffice 电子表格时出错

使用 c# 操作 .ods (OpenOffice) 文件

如何从 Perl 创建或读取 OpenOffice 电子表格?

如何寻址按钮? (OpenOffice 电子表格宏)