此单元格是否在电子表格中复制该单元格中的图像?

时间:2017-07-11 22:21:18

标签: openoffice-calc

很简单。单元格A1中有一个图像,我通过Insert:Picture:From File ...

提供

现在我希望Cell A3自动显示相同的图片。我根本找不到办法 - 当然" ="不起作用。在这一点上,我不在乎图像是否是"链接"或嵌入式,我只是想让它工作。它可以? THX。

编辑,09-01-17 ,根据Jim K的想法,我已经安装了以下宏代码:

REM  *****  BASIC  *****

Private oListener   as Object
Private cellA1      as Object

Sub AddListener

    Dim Doc, Sheet, Cell as Object

    Doc         = ThisComponent
    Sheet       = Doc.Sheets.getByName("Sheet1")
    cellA1      = Sheet.getCellrangeByName("A1")

    'create a listener
    oListener   = createUnoListener("Modify_","com.sun.star.util.XModifyListener")

    'register the listener
    cellA1.addModifyListener(oListener)

End Sub

Sub Modify_disposing(oEv)
End Sub

Sub RmvListener
    cellA1.removeModifyListener(oListener)
End Sub

' macro jumps here when oListener detects modification of Sheet

Sub Modify_modified(oEv)

    Doc             = ThisComponent
    Sheet           = Doc.Sheets.getByIndex(0)
    originCell      = Sheet.getCellByPosition(0,0)
    originValue     = originCell.Value

    if originValue then
        print "originValue is " & originValue
    else
        print "originValue zero"
    end if

End Sub
具有讽刺意味的是,问题在于它有效。它适用于整数和{非值},我的意思是一个空单元格。

因此任何不为零的整数都打印为TRUE,零打印为FALSE,空单元格打印为FALSE。

但那就是它退出工作的地方 - 任何一种字符串" asdf"也返回FALSE。

也许这可以修复,但有更糟糕的事情:当我在单元格中粘贴图像,或使用“插入/图像/来自文件...”菜单或“剪切现有图像”时。 。 什么都没发生! Sheet Modified业务不会触发预期的例程。

有什么希望吗? THX。

1 个答案:

答案 0 :(得分:0)

正如您所发现的,我的评论中的解决方案不起作用,因为添加图像时不会触发Content changed事件。我也研究了其他事件,但它们也没有用。

相反,我们可以设置一个定期运行的函数。每次运行时,它都会检查图像的数量,如果已添加或删除了图像,则会调用下面的update_copied_images(),目前只会报告单元格A1的值,如代码中所示。

正如here所解释的那样,我还没有在Basic中使用计时器循环而不会崩溃,所以我们可以使用Python代替(更好的语言,所以这不是我认为的缺点)

import time
from threading import Thread
import uno

COLUMN_A, COLUMN_B, COLUMN_C = 0, 1, 2
FIRST_ROW = 0

def start_counting_images(action_event=None):
    t = Thread(target = keep_counting_images)
    t.start()

def keep_counting_images():
    oDoc = XSCRIPTCONTEXT.getDocument()
    oSheet = oDoc.getSheets().getByIndex(0)
    oDrawPage = oSheet.getDrawPage()
    messageCell = oSheet.getCellByPosition(COLUMN_C, FIRST_ROW)
    messageCell.setString("Starting...")
    prevCount = -1
    while hasattr(oDoc, 'calculateAll'):  # keep going until document is closed
        count = oDrawPage.Count
        if prevCount == -1 or prevCount != count:
            prevCount = count
            messageCell.setString("Number of Images: " + str(prevCount))
            update_copied_images(oSheet)
        time.sleep(1)

def update_copied_images(oSheet):
    originCell = oSheet.getCellByPosition(COLUMN_A, FIRST_ROW)
    originString = originCell.getString()
    messageCell = oSheet.getCellByPosition(COLUMN_B, FIRST_ROW)
    if len(originString):
        messageCell.setString("originString '" + originString + "'")
    else:
        messageCell.setString("originString length is zero")

g_exportedScripts = start_counting_images,

要运行,请转到工具 - >宏 - >运行Macro,在My Macros下找到放置此代码的.py文件,然后运行start_counting_images