在Excel中使用RibbonX API设置透明图标不起作用

时间:2019-06-08 15:13:03

标签: excel vba transparency ico ribbonx

我正在尝试使用RibbonX API为Excel加载项设置一个透明图标。这是我的XML:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" loadImage="gui_LoadImage">
  <ribbon>
    <tabs>
      <tab id="CBtab" label="2019CBMaster">
        <group id="visualizationGroup" label="Visualization">
          <button id="btnHistogram" label ="Press here" enabled="true" screentip="Press and see how magic happens" image="icn_btnHistogram.jpg" size="large"/>
        </group>
        <group id="NewGroup" label="2019NewGroup" >
          <box id="bxBo">
            <button id="btnNew" label="Press" image="icn_btnHisto.jpg" size="large"/>
            <menu id="mnMenu" image="btn_img_random.jpg">

            </menu>
          </box>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

这是设置图片的子程序:出于我的测试目的,它忽略xml参数并仅加载“固定”图片:

Sub gui_LoadImage(ImageName As String, ByRef Image)

        Set Image = stdole.LoadPicture("C:\Office 2010 Developer Resources\icons\gg.ico")

End Sub

我将gg.ico保存在GIMP中为24 bpp和1位alpha ico文件。我还尝试了外部ico-s,但它们也没有显示。

从上面可以理解,图标不会显示为完全透明。

你能帮忙吗?

还支持此RibbonX API吗?我想知道,因为我很难做一件非常基本的事情,几乎找不到文档。如果没有,开发具有可自定义功能区的Excel加载项的现代框架是什么?

谢谢。

2 个答案:

答案 0 :(得分:1)

自定义功能区UI图标可以是透明的。我相信它们必须是.png文件。以下是UI功能区图标设置的详细信息,其中包括透明背景。

https://docs.microsoft.com/en-us/office/dev/add-ins/design/add-in-icons

版本

在自定义UI编辑器中,您可以导入图像文件,然后仅在XML代码中引用文件名。我认为,文件类型以及图像本身是否具有透明背景决定了它在功能区上是否透明显示。这就是XML的样子。 <button id="customButton1" label="Label 1" size="large" onAction="Macro1" image="picture1" />

在查看您的XML代码时,我发现图像中包含文件扩展名。我的自定义图像图标未包含文件扩展名。在我链接的自定义UI编辑器中,您可以添加导入显示在侧窗格中的图像文件,然后仅引用XML中的文件名(无文件扩展名)。我也相信文件类型本身,以及图像是否实际上具有透明背景来确定它在功能区中是否透明显示。 jpg文件不能是透明的,所以这可能是您遇到的问题。如果您的UI编辑器无法容纳PNG文件,请尝试使用GIF。图标太小了。图像质量应该不是问题。

这里是一个例子:

<splitButton id="splitButton2" size="large" >   
<button id="InsertTools" label="Insert" image="InsertTools_Transparent" />  
<menu id="menu2">   
<button id="buttonInsertMultiSheets" onAction="ModRibbon.Run_InsertMultipleSheets" label="Insert Multiple Sheets" screentip="Add multiple worksheets at one time.  An input box will appear for you to enter the number of sheets to be added."  image="WorksheetAddMultipleSheets" />  
</menu> 
</splitButton>

以下是我学习时的一些个人笔记,这些笔记可能会对您有帮助,也可能没有帮助。

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    <backstage>
        <button id="MyCustomButton1" label="My Macro"
        imageMso="HappyFace" isDefinitive="true" onAction="ModRibbon.Run_Macro1"/>
        <!-- 'button id' each must be unique -->
        <!-- 'My Macro' is the text that will appear on your button -->
        <!-- Use 'imageMso' or 'image' to include a picture on your button. -->
        <!-- 'imageMso' uses built-in Office images; do not insert into this file as icons. -->
        <!-- 'image' uses your own image as your button's icon.  Insert it into this file as an icon. -->
        <!-- 'HappyFace' is the name of the built-in Office image (for custom images, enter the file name). -->
        <!-- 'ModRibbon' is the name of the VBA module in which you will paste this call-back sub.  You can name this anything. -->
        <!-- 'Run_' is a custom prefix added to the macro name, so you don't have to rename your macros. -->
        <!-- 'Macro1' is the macro that should be run when the button is clicked. -->

    </backstage>
</customUI>

使用我使用的自定义UI编辑器,回调将为:

'Callback for buttonInsertMultiSheets onAction
Sub Run_InsertMultipleSheets(control As IRibbonControl)
End Sub

从您的代码看来,您也需要调用以加载图像,因此customUI控件具有两个回调:

Sub LoadImage (imageID As String, ByRef image)

Sub OnLoad(ribbon As IRibbonUI)

如果您还具有[Content_Types] .xml,则默认类型为PNG,您需要在文件的末尾但在之前添加一行,然后保存更改。

<Default Extension="jpg" ContentType="application/octet-stream"/>

答案 1 :(得分:0)

功能区UI上建议的图标文件格式为PNG。 Microsoft Office功能区和工具栏支持ICO,BMP和ICO文件。因此,我建议将您的VBA宏转换为COM加载项,您可以在其中轻松加载此类图像。

您可能会发现Graphics formats for Microsoft Office add-ins文章很有帮助。以下系列文章对Fluent UI进行了详细介绍: