此单元格复制电子表格中该单元格中的图像?
Posted
技术标签:
【中文标题】此单元格复制电子表格中该单元格中的图像?【英文标题】:This cell duplicates image in that cell in spreadsheet? 【发布时间】:2017-07-11 22:21:17 【问题描述】:非常简单。单元格 A1 中有一个图像,我通过 Insert:Picture:From File... 提供它。
现在我想让 Cell 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。
也许这可以解决,但更糟糕的是:当我将图像粘贴到单元格中,或使用“插入/图像/来自文件...”菜单,或剪切现有图像时...什么也没有发生! Sheet Modified 业务未触发预期的例程。
有希望吗?谢谢。
【问题讨论】:
一种方法是编写一个复制和粘贴图像的宏。它可以设置为在“内容已更改”工作表事件上运行。如果您想尝试这种方法并遇到困难,请编辑问题以发布您到目前为止的代码,并说明遇到的问题。 好的,谢谢,我会试试然后回来。 主帖已更新...(我认为这不会触发任何触发器?) 似乎最有效的方法是编辑帖子并添加简短评论,以便人们知道它已被更改。 【参考方案1】:正如您所发现的,我评论中的解决方案不起作用,因为添加图像时不会触发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,
要运行,请转到工具 -> 宏 -> 运行宏,在我的宏下找到您放置此代码的 .py 文件,然后运行start_counting_images
。
【讨论】:
以上是关于此单元格复制电子表格中该单元格中的图像?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Google 电子表格上的公式复制字符串并附加数字后缀?