GetDataObject请求剪贴板操作没有成功0x800401D0

我为Excel(2016)做了一个AddIn,将打印区域保存为jpg文件。 它运行好几个月。 现在我收到越来越多的用户错误报告,都得到相同的错误(下图)。 用户有Excel 2013的Windows 7或Excel 2016的Windows 10,都有这个错误。 在第一次重新安装我的程序帮助,但从现在起并没有帮助。

在这里输入图像描述

这是我的代码:

public static void Save(string report, string area, RibbonControlEventArgs e) { Excel.Window window = e.Control.Context; Excel.Worksheet sheet = ((Excel.Worksheet)window.Application.ActiveSheet); Excel.Range range = sheet.Range[sheet.PageSetup.PrintArea]; range.CopyPicture(Excel.XlPictureAppearance.xlPrinter, Excel.XlCopyPictureFormat.xlPicture); range.Copy(Type.Missing); string fileName = @"\\server.company.lan\report.jpg"; if (Clipboard.GetDataObject() != null) { IDataObject data = Clipboard.GetDataObject(); Image image = (Image)data.GetData(DataFormats.Bitmap, true); image.Save(fileName, ImageFormat.Jpeg); } } 

所有剪贴板访问必须使用STA线程运行。 有很多方法可以做到这一点:

  • 使用保证代码在UI线程(应该是STA)上运行的BeginInvoke函数(Winforms或WPF )
  • 启动你自己的Thread实例并使用SetAparmentState (STA),
  • 等等