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

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 电子表格上的公式复制字符串并附加数字后缀?

如何使用ruby中的电子表格gem从excel单元格中提取超链接地址?

基于Web的JavaScript电子表格

电子表格那个对角线怎么打出来??

如何从谷歌电子表格中动态变化的单元格中保存最小值和最大值?