You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无法像VBA一样在C#中通过代码向Excel插入3D模型?

解决C# VSTO中插入3D模型的问题

为什么C#的Shapes类没有Add3DModel方法?

不是微软未实现该功能,而是C#的VSTO互操作程序集(Microsoft.Office.Interop.Excel)没有将Add3DModel作为早期绑定成员暴露。VBA天然支持COM对象的后期绑定,能直接调用这个方法;但C#默认使用早期绑定,而互操作库并未封装这个属于后期绑定范畴的方法——底层Excel COM对象其实仍然支持该功能。

替代方案

方案1:通过反射调用Add3DModel方法

利用反射直接调用Shapes对象的Add3DModel方法,参数顺序和VBA版本完全一致:

using Microsoft.Office.Core;
using Microsoft.Office.Interop.Excel;

// 获取当前活动工作表
Worksheet activeSheet = Globals.ThisAddIn.Application.ActiveSheet;
Shapes shapes = activeSheet.Shapes;

// 构造Add3DModel的参数(对应VBA参数:Filename, LinkToFile, SaveWithDocument, Left, Top, Width, Height)
object[] methodParams = new object[]
{
    @"C:\example\model.glb", // 3D模型文件路径
    MsoTriState.msoFalse,    // 不链接到原文件
    MsoTriState.msoTrue,     // 随工作簿保存模型
    50,                      // 模型左上角X坐标
    50,                      // 模型左上角Y坐标
    300,                     // 模型宽度
    200                      // 模型高度
};

// 反射调用方法
var add3DModelMethod = shapes.GetType().GetMethod(
    "Add3DModel",
    System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public
);
Shape insertedModel = (Shape)add3DModelMethod.Invoke(shapes, methodParams);

方案2:使用Shapes.AddOLEObject插入3D模型

3D模型在Excel中属于OLE对象的一种,可以通过AddOLEObject方法指定文件路径插入:

using Microsoft.Office.Core;
using Microsoft.Office.Interop.Excel;

Worksheet activeSheet = Globals.ThisAddIn.Application.ActiveSheet;
Shape insertedModel = activeSheet.Shapes.AddOLEObject(
    Filename: @"C:\example\model.glb",
    Link: MsoTriState.msoFalse,
    DisplayAsIcon: MsoTriState.msoFalse,
    Left: 50,
    Top: 50,
    Width: 300,
    Height: 200
);

注意事项

  • 确保使用的Excel版本支持3D模型(需Excel 2016及以上版本)
  • 支持的3D模型格式包括.glb、.gltf等Excel兼容格式
  • 反射调用时需严格匹配参数顺序和类型,参数定义可参考VBA的Shapes.Add3DModel文档

内容的提问来源于stack exchange,提问作者Finch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 16:58:30