C# GetDataObject请求的剪贴板操作未成功0x800401D0
我制作了一个Excel加载项(2016),将打印区域保存为jpg文件。它在几个月内运作良好。现在我从用户那里得到越来越多的错误报告,所有的错误都是一样的(下图)。用户的Windows 7和Excel 2013或Windows 10和Excel 2016都有此错误。在第一次重新安装我的程序时有帮助,但从现在起就没有帮助了 这是我的密码:C# GetDataObject请求的剪贴板操作未成功0x800401D0,c#,excel,vsto,clipboard,excel-addins,C#,Excel,Vsto,Clipboard,Excel Addins,我制作了一个Excel加载项(2016),将打印区域保存为jpg文件。它在几个月内运作良好。现在我从用户那里得到越来越多的错误报告,所有的错误都是一样的(下图)。用户的Windows 7和Excel 2013或Windows 10和Excel 2016都有此错误。在第一次重新安装我的程序时有帮助,但从现在起就没有帮助了 这是我的密码: public static void Save(string report, string area, RibbonControlEventArgs e) {
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)上运行的函数(Winforms或)
- 启动自己的线程实例并使用(STA)
- 等等