Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.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
将Calc cellRange转换为RTF/HTML的LibreOffice基本宏命令_Html_Rtf_Libreoffice_Libreoffice Calc_Libreoffice Basic - Fatal编程技术网

将Calc cellRange转换为RTF/HTML的LibreOffice基本宏命令

将Calc cellRange转换为RTF/HTML的LibreOffice基本宏命令,html,rtf,libreoffice,libreoffice-calc,libreoffice-basic,Html,Rtf,Libreoffice,Libreoffice Calc,Libreoffice Basic,我的目标是填写LibreOffice计算表,并在用户单击“发送”按钮(再次确认)时通过电子邮件悄悄发送单元格范围 这有三个部分 带有确认请求的按钮。(简单易行。) 选择单元格范围并将其转换为富文本格式(尚未找到) 从工作表中发送富文本电子邮件。(稍后将处理“沉默”部分) 我尝试用unoService将范围复制到剪贴板,但它似乎过于复杂,而且充满了错误 以下是我所拥有的: ''通过电子邮件发送丰富的文本 副总管 尺寸文档、图纸、范围、Rtf、Exec作为对象 端接头 ”他说 分表审批 如果Ms

我的目标是填写LibreOffice计算表,并在用户单击“发送”按钮(再次确认)时通过电子邮件悄悄发送单元格范围

这有三个部分

  • 带有确认请求的按钮。(简单易行。)
  • 选择单元格范围并将其转换为富文本格式(尚未找到)
  • 从工作表中发送富文本电子邮件。(稍后将处理“沉默”部分)
我尝试用unoService将范围复制到剪贴板,但它似乎过于复杂,而且充满了错误

以下是我所拥有的:

''通过电子邮件发送丰富的文本
副总管
尺寸文档、图纸、范围、Rtf、Exec作为对象
端接头
”他说
分表审批
如果MsgBox(“准备好发送电子邮件了吗?”,MB_YESNO+MB_debutton2)=那么
CopyTable()
如果结束
端接头
“收到了吗
子复制表
Doc=此组件
视图=Doc.CurrentController
Frame=View.Frame
Sheet=Doc.Sheets.getByIndex(0)
范围=Sheet.getCellrangeByName(“a1:f45”)
Exec=createUnoService(“com.sun.star.frame.DispatchHelper”)
查看。选择(范围)
Cells=View.getTransferable()
Exec.executeDispatch(框架,“.uno:Deselect”,”,0,数组()
'SimpleEmailTo(单元格)
端接头
“寄吧
子目录(正文)
作为对象的Dim发射器
暗淡的头饰、主体、乌木、阿特兰乔和细绳
launcher=CreateUnoService(“com.sun.star.system.SystemShellExecute”)
eAddress=”tu@domo.eg"
eSubject=“未来科蒂议程”
乌木
aHTMLanchor=“mailto:”&eAddress&“?subject=“&eSubject&”&;&body=“&eBody
执行(aHTMLanchor,“,0)
端接头
我仍然不知道经过三天的研究方法,属性,uno


简单地说,我的问题是,如何将可转移内容转换为HTML/RTF?

简单地复制并粘贴到电子邮件中,就会产生您所要求的结果。LibreOffice端的代码应该如下所示

dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
听起来你已经试过了,但有些东西不起作用。也许你可以详细说明出了什么问题

另一种方法是创建临时HTML或XHTML文件。然后解析临时文件以获取电子邮件所需的部分

AFAIK没有使用UNO将单元格区域转换为富文本格式的命令。要这样做,您需要遍历每个单元格,读取其格式属性,然后自己生成HTML

编辑

好主意。以下改编自的Java代码获取HTML字符串,然后打印它。我相信这将是一个很好的解决你的需要

public void displayHTMLFromClipboard()
{
    try
    {
        Object oClipboard = xMCF.createInstanceWithContext(
            "com.sun.star.datatransfer.clipboard.SystemClipboard", xContext);
        XClipboard xClipboard = (XClipboard)
            UnoRuntime.queryInterface(XClipboard.class, oClipboard);
        XTransferable xTransferable = xClipboard.getContents();
        DataFlavor[] aDflvArr = xTransferable.getTransferDataFlavors();
        System.out.println("Available clipboard formats:");
        DataFlavor aChosenFlv = null;
        for (int i=0;i<aDflvArr.length;i++)
        {
            System.out.println(
                "MimeType: " + aDflvArr[i].MimeType +
                " HumanPresentableName: " + aDflvArr[i].HumanPresentableName );
            if (aDflvArr[i].MimeType.equals("text/html"))
            {
                aChosenFlv = aDflvArr[i];
            }
        }
        System.out.println("");
        try
        {
            if (aChosenFlv != null)
            {
                System.out.println("HTML text on the clipboard...");
                Object aData = xTransferable.getTransferData(aChosenFlv);
                String s = new String((byte[])aData, Charset.forName("ISO-8859-1"));
                System.out.println(s);
            }
        }
        catch (UnsupportedFlavorException exc)
        {
            exc.printStackTrace();
        }
    }
    catch(com.sun.star.uno.Exception exc)
    {
        exc.printStackTrace();
    }
}

还有一个建议:Python可能是更好的语言选择。在许多方面,将Python与LibreOffice结合使用比Java更容易。与Basic不同,Python功能强大,足以轻松处理字节字符串。

只需将其复制和粘贴到电子邮件中,就可以得到您想要的结果。LibreOffice端的代码应该如下所示

dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
听起来你已经试过了,但有些东西不起作用。也许你可以详细说明出了什么问题

另一种方法是创建临时HTML或XHTML文件。然后解析临时文件以获取电子邮件所需的部分

AFAIK没有使用UNO将单元格区域转换为富文本格式的命令。要这样做,您需要遍历每个单元格,读取其格式属性,然后自己生成HTML

编辑

好主意。以下改编自的Java代码获取HTML字符串,然后打印它。我相信这将是一个很好的解决你的需要

public void displayHTMLFromClipboard()
{
    try
    {
        Object oClipboard = xMCF.createInstanceWithContext(
            "com.sun.star.datatransfer.clipboard.SystemClipboard", xContext);
        XClipboard xClipboard = (XClipboard)
            UnoRuntime.queryInterface(XClipboard.class, oClipboard);
        XTransferable xTransferable = xClipboard.getContents();
        DataFlavor[] aDflvArr = xTransferable.getTransferDataFlavors();
        System.out.println("Available clipboard formats:");
        DataFlavor aChosenFlv = null;
        for (int i=0;i<aDflvArr.length;i++)
        {
            System.out.println(
                "MimeType: " + aDflvArr[i].MimeType +
                " HumanPresentableName: " + aDflvArr[i].HumanPresentableName );
            if (aDflvArr[i].MimeType.equals("text/html"))
            {
                aChosenFlv = aDflvArr[i];
            }
        }
        System.out.println("");
        try
        {
            if (aChosenFlv != null)
            {
                System.out.println("HTML text on the clipboard...");
                Object aData = xTransferable.getTransferData(aChosenFlv);
                String s = new String((byte[])aData, Charset.forName("ISO-8859-1"));
                System.out.println(s);
            }
        }
        catch (UnsupportedFlavorException exc)
        {
            exc.printStackTrace();
        }
    }
    catch(com.sun.star.uno.Exception exc)
    {
        exc.printStackTrace();
    }
}

还有一个建议:Python可能是更好的语言选择。在许多方面,将Python与LibreOffice结合使用比Java更容易。与Basic不同的是,Python功能强大,足以轻松处理字节字符串。

如果不了解电子邮件是如何发送的,我会说很难回答。您也应该在问题中添加
SimpleMailTo
。因为如果您在
正文中提交eg rtf/html代码,那么它可能只发送一封电子邮件,其中rtf/html代码为纯文本(因此您可以在邮件中看到源代码)。但它不会将其转换为格式化电子邮件,这显然是您想要的。所以我想你可能问了一个错误的问题:在我看来,不是“如何将单元格区域转换为HTML/RTF?”而是“如何发送格式化的电子邮件而不是纯文本”。谢谢,刚刚添加。问题是,无论我是否尝试发送纯文本或html/rtf,我首先要解决的是转换问题。使用您的新代码,问题变得更清楚了。如果不看电子邮件是如何发送的,我会说很难回答。您也应该在问题中添加
SimpleMailTo
。因为如果您在
正文中提交eg rtf/html代码,那么它可能只发送一封电子邮件,其中rtf/html代码为纯文本(因此您可以在邮件中看到源代码)。但它不会将其转换为格式化电子邮件,这显然是您想要的。所以我想你可能问了一个错误的问题:在我看来,不是“如何将单元格区域转换为HTML/RTF?”而是“如何发送格式化的电子邮件而不是纯文本”。谢谢,刚刚添加。问题是,无论我是否尝试发送纯文本或html/rtf,我首先要解决的是转换问题。通过您的新代码,问题变得更清楚了。谢谢!由于您的帮助,我发现了getTransferrable服务,现在可以将工作表的内容放入对象中。但我现在不确定拥有可转移函数意味着什么,以及如何将其转换为html。很明显,我不想自己生成html,但请继续查找^^ ^谢谢!因为你的帮助,我发现了这次转移