插入带有C#的图片注释Ok,而复制带有注释的内容失败

本文关键字:注释 复制 失败 Ok 插入 | 更新日期: 2023-09-27 18:29:12

我正在使用C#开发excel,但在excel中插入图片注释时遇到了一些问题。这是我的代码:

public void InstertPictureComment(Excel.Range myrange, string picturepath)
{
    myrange.ClearComment();
    myrange.AddComment();
    myrange.Comment.Shape.Fill.UserPicture(picturepath);
    myrange.Comment.Shape.Width=400;
    myrange.Comment.Shapes.Height=300;
}

上面的代码运行良好,我可以成功地插入图片注释。然而,问题出现了。将内容(包括我刚刚插入的图片注释)复制到其他excel工作表===>保存excel,并关闭excel应用程序===>重新打开excel,并显示一个消息框,告诉"excel在xxxxx中发现无法读取的内容"

我的代码出了什么问题?或者这是一个优秀的问题?

插入带有C#的图片注释Ok,而复制带有注释的内容失败

我已经更正了代码,以便它编译

public void InstertPictureComment(Excel.Range myrange, string picturepath)
{
    myrange.Cells.ClearComments();
    myrange.AddComment();
    myrange.Comment.Shape.Fill.UserPicture(picturepath);
    myrange.Comment.Shape.Width = 400;
    myrange.Comment.Shape.Height = 300;
}

问题的一部分在于Excel。使用您的代码,您可能正在创建Excel的新应用程序实例。Excel无法跨应用程序实例复制对象。

如果在同一应用程序实例中打开另一个工作簿,则对象将被复制。跨应用程序实例复制数据的唯一方法是使用"特殊粘贴"功能。

您应该获取现有的Excel应用程序实例。如果它不在那里,那么你可以创建它。

private Excel.Application GetExcelInstance()
{
    Excel.Application instance = null;
    try
    {
        instance = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
    }
    catch (System.Runtime.InteropServices.COMException ex)
    {
        instance = new Excel.Application();
        appCreatedExcelInstance = true;
    }
    return instance;
}

您可以使用appCreatedExcelInstance标志来决定是否在清理期间退出实例。