很简单。单元格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。
答案 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
。