Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GetDataObject请求的剪贴板操作未成功0x800401D0_C#_Excel_Vsto_Clipboard_Excel Addins - Fatal编程技术网

C# GetDataObject请求的剪贴板操作未成功0x800401D0

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) {

我制作了一个Excel加载项(2016),将打印区域保存为jpg文件。它在几个月内运作良好。现在我从用户那里得到越来越多的错误报告,所有的错误都是一样的(下图)。用户的Windows 7和Excel 2013或Windows 10和Excel 2016都有此错误。在第一次重新安装我的程序时有帮助,但从现在起就没有帮助了

这是我的密码:

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)
  • 等等

您是否在非STA线程上运行该功能?(PS:异常类型可能会非常有用…)还要检查:@SimonMourier是的,我正在非STA线程上运行它。我将错误消息附加到我的问题,这就是我的全部,因为我无法在我的计算机上重现此错误。您必须使用STA线程访问剪贴板。@SimonMourier它可以工作!谢谢你的帮助!