Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在libreoffice calc中编写python宏来发送和接收数据_Python_Macros_Libreoffice_Libreoffice Calc_Uno - Fatal编程技术网

如何在libreoffice calc中编写python宏来发送和接收数据

如何在libreoffice calc中编写python宏来发送和接收数据,python,macros,libreoffice,libreoffice-calc,uno,Python,Macros,Libreoffice,Libreoffice Calc,Uno,前提是:我在libreoffice calc中工作,需要通过宏向另一个我知道正在TCP端口上侦听的程序发送指令。 我期待收听程序的回复,并希望将回复数据插入libreoffice电子表格。通过搜索stackoverflow,我得到了多次帮助,我想我会发布一个问题的解决方案,这个问题需要花费大量精力才能解决。 代码将数据拆分为行,并插入光标当前所在的单元格中,对于后续数据的每一行,为下一次插入增加行数 Configobj是一个从平面文件读取参数的包。在本例中,我使用该文件存储要使用的TCP端口。侦

前提是:我在libreoffice calc中工作,需要通过宏向另一个我知道正在TCP端口上侦听的程序发送指令。
我期待收听程序的回复,并希望将回复数据插入libreoffice电子表格。

通过搜索stackoverflow,我得到了多次帮助,我想我会发布一个问题的解决方案,这个问题需要花费大量精力才能解决。 代码将数据拆分为行,并插入光标当前所在的单元格中,对于后续数据的每一行,为下一次插入增加行数

Configobj是一个从平面文件读取参数的包。在本例中,我使用该文件存储要使用的TCP端口。侦听程序和此代码都在从同一配置文件读取端口号。它可能是硬编码的

这是一个适合我的python宏,我相信它会为其他人指明正确的方向

def fs2ClientdataCalc(*args):


这是个问题吗?如果你有答案,你可以回答你自己的问题。顺便说一下,你已经发布了这个。其中一个可以作为副本关闭。我使用此网站查看是否有其他人对我遇到的问题提出了答案。我认为发布这样一个问题的解决方案是可以的。如果我违反了这个网站的一些规则,那么如果你能给我指出正确的方向,我会很高兴地撤回我的帖子。有两个类似的帖子,一个是针对libreofficewriter的,另一个是针对libreofficecalc的,它们使用的技术略有不同,这是unoapi的漏洞之一。让我知道我是否应该删除这些帖子,因为我还有3到4个帖子要删除。你没有违反规则。为了帮助减少回答问题的人的流量,我建议在最后加上“(自我回答)”。然后,审查人员通常将问题和答案视为一个单元。在这一点上可能不值得做,但在未来值得尝试。非常有用的例子,罗尔夫。我可以问一下,您是如何得知套接字库可用的<代码>导入套接字@JannieT时间的迷雾!我使用unix套接字向vlc的“伪tty”界面发送按键,基于该界面,脚踏板被踩下,但那是很久以前的事了,在我发现
evdev
hahaha之前。我的问题不是很清楚,但我发现这也有助于继续发布好东西@的确,我误解了这个问题。由于
socket
是一个标准库,所以我没有想到它。与您提供的链接一样,如果有人阅读了您的问题而链接消失:在python命令行上,键入
help()
,然后键入
modules
,其中提供了所有可用模块的列表。如果您使用的是像wx这样的大模块,
modules wx
提供了所有可用的子模块,即列出包含关键字
wx
的模块,这一点尤其有用
    desktop = XSCRIPTCONTEXT.getDesktop()
    model = desktop.getCurrentComponent()
    try:
        sheets = model.getSheets()
    except AttributeError:
        raise Exception("This script is for Calc Spreadsheets only")
    #sheet = sheets.getByName('Sheet1')
    sheet = model.CurrentController.getActiveSheet()
    oSelection = model.getCurrentSelection()
    oArea = oSelection.getRangeAddress()
    first_row = oArea.StartRow
    last_row = oArea.EndRow
    first_col = oArea.StartColumn
    last_col = oArea.EndColumn
    #get the string from Footswitch2 via a TCP port
    import os, socket, time
    from configobj import ConfigObj
    configuration_dir = os.environ["HOME"]
    config_filename = configuration_dir + "/fs2.cfg"
    if  os.access(config_filename, os.R_OK):
        pass
    else:
        return None
    cfg = ConfigObj(config_filename)
    #define values to use from the configuration file
    tcp_port = int(cfg["control"]["TCP_PORT"])
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.settimeout(0.5)
    try:
        sock.connect(("localhost", tcp_port))
    except:
        return None
    sock.settimeout(10)
    try:
        sock.send(bytes('client\n', 'UTF-8'))
    except:
        return None
    try:
        time.sleep(1.0)
        s_list = sock.recv(4096).decode('UTF-8')
        s_list = s_list.split("\n")
    except:
        return None
    lines_in_response = len(s_list)
    if lines_in_response is None:
        return None
    column =['A','B','C','D','E','F','G','H','I','J','K','L','M',\
             'N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
    for x in range(0,lines_in_response):
        insert_table = s_list[x].split("\n")
        parts = len(insert_table)
        for y in range(0,parts):
            it = insert_table[y]
            cell_name = column[first_col + y]+str(x +1 +first_row)
            cell = sheet.getCellRangeByName(cell_name)
            cell.String = it

    sock.close()
    return None