Сбой OpenClipboard (HRESULT: 0x800401D0) после серии копирования / вставки через Excel Interop - PullRequest
0 голосов
/ 03 марта 2020

У меня есть надстройка Excel VSTO, которая копирует / вставляет фигуры из одного исходного листа в целевой лист (оба в одной книге). Рабочий лист содержит записи данных (по одной строке на запись). Для каждой строки процедура выполняет следующее:

  1. Получить данные
  2. Рассчитать позицию XY на основе данных
  3. Скопировать фигуру из исходного листа (имя фигуры зависит от данных )
  4. Вставить фигуру на листе назначения
  5. Переместиться в вычисленную позицию XY

На двух моих тестирующих компьютерах эта процедура работает нормально до 300 строк (не пробовал для большего). У клиента проблемы со всеми его компьютерами, для "больших" таблиц данных. Код разбивается в некоторой строке между 100 и 130, но в другую строку каждый раз, когда одна и та же подпрограмма выполняется для одного и того же файла (это своего рода случайность).

Ошибка OpenClipboard ( Исключение из HRESULT: 0x800401D0 (CLIPBRD_E_CANT_OPEN))

в System.RuntimeType.ForwardCallToInvokeMember (строковые члены memberName, BindingFlags флаги, объектная цель, Int32 [] aWrapperTypes * 10 * 10 * 10 * 10), DataGataData .Office.Interop.Excel.Shape.Cut ()

в ExcelAddIn.MyCode

Я полагаю, что разрывы подпрограммы на шаге 4 и подозревают, что стек буфера обмена может быть перегружен? Я читаю здесь этот HResult может относиться к условиям гонки, но в моем случае мы пытаемся сократить, поэтому форма еще не находится внутри буфера обмена.

...