有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (1) 个答案

  1. # 1 楼答案

    因此,从以下代码开始:

    XBookmarksSupplier xBookmarksSupplier =
        (XBookmarksSupplier)UnoRuntime.queryInterface(
        XBookmarksSupplier.class, xComponent);
        XNameAccess xNamedBookmarks = xBookmarksSupplier.getBookmarks();
    Object bookmark = xNamedBookmarks.getByName("TextAndTable");
    XTextContent xBookmarkContent = (XTextContent)UnoRuntime.queryInterface(
        XTextContent.class, bookmark);
    XTextRange xTextRange = xBookmarkContent.getAnchor();
    

    听起来像是在问如何确定是否有一个或多个文本表位于xTextRange指定的范围内

    为此,我通常使用View Cursor。它的速度很慢,但普通文本光标无法遍历不同的文本对象,因此如果该范围内存在文本表或其他对象,则该光标将失败

    这是我的Python类,您可以将其应用于Java:

    def differentPlaces(oCurs1, oCurs2):
        """Test using compareRegion to see if two cursors are in different places.
        If compareRegion fails, such as after a nested table, return False.
        """
        try:
            oText = oCurs1.getText()
            return oText.compareRegionEnds(oCurs1, oCurs2) != 0
        except IllegalArgumentException:
            logger.info("Could not compare region.")
            return False
    
    class RangeCompare:
        """Compare the viewcursor to a text range (a location).
        Can be useful when traversing a cursor over a range.
        The range is expected not to be modified.
        """
        def __init__(self, rangeEnd, viewCursor):
            self.oVC = viewCursor
            self.rangeEnd = rangeEnd
            self.endX = -1
            self.endY = -1
    
        def getCoords(self):
            if self.endY > -1:
                return
            # remember where we were, because we'll need to use the viewcursor
            originalVC = self.oVC.getText().createTextCursorByRange(self.oVC)
    
            self.oVC.gotoRange(self.rangeEnd, False)
            self.endX = self.oVC.getPosition().X
            self.endY = self.oVC.getPosition().Y
    
            self.oVC.gotoRange(originalVC, False)
    
        def compareVC(self):
            """Compare the viewcursor to the range.
            Assume we are travelling with the viewcursor.
            See if it is up to the end yet or not.
            The comparison is done by checking the physical position of the cursor.
            Returns -1 if the VC location is less than self.rangeEnd, 0 if it is
            the same, and 1 if it is greater.
            Returns -2 if they are on the same line but not in the same spot, and
            it's not certain which location is greater.
            """
            self.getCoords()
            curX = self.oVC.getPosition().X
            curY = self.oVC.getPosition().Y
            if curY < self.endY:
                logger.debug("%d < %d", curY, self.endY)
                return -1
            elif curY > self.endY:
                logger.debug("%d > %d", curY, self.endY)
                return 1
            elif curY == self.endY:
                if curX == self.endX:
                    if differentPlaces(self.oVC, self.rangeEnd):
                        # There is probably a word-final diacritic that doesn't
                        # change the position, so we're not to the end yet.
                        logger.debug("Including word-final diacritic.")
                        return -2
                    # We're at the end.
                    logger.debug(
                        "VC same loc as text range (%d, %d).", curX, curY)
                    return 0
                else:
                    logger.debug("Probably haven't gone far enough.")
                    return -2
    

    用类似rangeCompare = RangeCompare(xTextRange.getEnd(), xViewCursor)的东西实例化这个类

    将视图光标移动到xTextRange的开头。然后继续在循环中调用xViewCursor.goRight(1, False)。每次检查光标是否位于文本表中。当rangeCompare.compareVC() > 0时停止