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



非常简单。 单元格 A1 中有一个图像,我通过插入:图片:从文件...

现在我希望单元格A3自动显示相同的图片。 我根本找不到方法——当然"="不起作用。 在这一点上,我不在乎图像是"链接"还是嵌入的,我只希望它工作。 可以吗? 感谢。

编辑,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。

也许这可以解决,但还有更糟糕的事情:当我在单元格中粘贴图像或使用插入/图像/从文件时......菜单,或剪切现有图像... 什么也没发生!"工作表修改"业务不会触发预期的例程。

有希望吗? 感谢。

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

因此,我们可以设置一个定期运行的函数。 每次运行时,它都会检查图像计数,如果添加或删除了任何图像,它会调用下面的update_copied_images(),该当前仅报告单元格 A1 的值,就像在代码中一样。

正如这里所解释的,我还没有让一个计时器循环在 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,

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

最新更新