如何使用C#将带有图片的注释插入excel

时间:2014-11-06 10:42:21

标签: c# excel comments

正如我在标题中所描述的,如何使用C#将图片作为注释插入Excel? 请提供示例代码或一些参考文档。 以下是我的代码:

using Excel=MicroSoft.Office.Interop.Excel;
publice void ExcelEdit(string Path)
{
    Excel.Application xlApp;
    Excel.WorkBook xlWorkBook;
    Excel.WorkSheet xlWorkSheet;
    Excel.Range myRange;
    xlApp=new Excel.ApplicationClass();
    xlWorkBook=xlApp.WorkBooks.Open(Path, misValue, misValue,misValue, misValue,misValue, misValue,misValue, misValue,misValue, misValue,misValue, misValue,misValue, misValue)
    xlApp.Visable=True;
    xlWorkSheet=(Excel.WorkSheet)xlWorkBook.Sheets.get_Item(1);

    myRange=WorkSheet.Range[WorkSheet.Cells[1,1],WorkSheet.Cells[1,1]);
    xlWorkSheet.Cells[1,1]=InstertPictureComment(myRange,Path);

    myRange=WorkSheet.Range[WorkSheet.Cells[1,2],WorkSheet.Cells[1,2]);
    xlWorkSheet.Cells[1,1]=InstertPictureComment(myRange, Path);

}
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时,消息框显示“xxx中找不到不可读的内容。”

如何处理我的代码!!

1 个答案:

答案 0 :(得分:1)

问题似乎重复Insert picture comment with C# Ok while copy content with comments fail

我刚才在那里发了一个答案。在这里复制相同的答案。

我更正了代码以便编译

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标志来决定是否在清理期间退出实例。

我希望这会有所帮助。