Домой / Термины / Исправление ошибки очистки буфера обмена Excel. Переполнение буфера для чайников Ошибка при чтении данных из буфера обмена

Исправление ошибки очистки буфера обмена Excel. Переполнение буфера для чайников Ошибка при чтении данных из буфера обмена

Are you running Skype? This has been the best solution I have found to get rid of the "cannot empty the clipboard error" in Excel 2007 & 2010. Delete the Skype add-on in IE and/or Firefox and good-bye annoying error!

Невозможно очистить ошибку в буфере обмена - Windows 7, Excel 2010 - эта ошибка возникает почти каждый раз при попытке перетаскивания содержимого ячейки. У меня была такая же ошибка за последние 10 лет на старых компьютерах и более старых версиях Windows и Office. Теперь он вновь появился на новом ноутбуке под управлением Windows 7 64 бит и Office 2010. Проблема может быть реплицирована, только если браузер - IE или Firefox - открыт одновременно с открытием Excel. Одновременное открытие Word и/или Outlook не вызовет проблемы, если браузер не будет открыт. Эта ошибка крайне раздражает, и никакие решения от Microsoft или других сообщений по этой проблеме не устраняют ее.

У меня есть решение - по крайней мере, для меня! Удалите надстройку Skype в IE и Firefox и ошибку «не удается очистить буфер обмена» после того, как перетаскивание удаляется при запуске IE и/или Firefox. По-видимому, какая-то проблема с управлением памятью со Skype, Office и браузерами.

Некоторое другое приложение, вероятно, контролирует буфер обмена (например, мой собственный ClipMate) для обновлений. Поскольку буфер обмена является общим ресурсом, любое приложение, касающееся буфера обмена, должно быть осторожным в ожидании его доступности сразу после его обновления. Например, если приложение изменяет буфер обмена, а затем пытается открыть его снова сразу, оно должно быть подготовлено к рассмотрению сценария, когда другие приложения открыли его для проверки/вставки.

В Excel исторически было плохо. 15 лет назад ошибка произнесла бы «вне памяти», но это действительно то же самое. Программисты не ожидали, что что-то пойдет не так, поэтому они вызывают общую ошибку и уходят, а не разрабатывают защитную стратегию «поймать и повторить». Ну что ж.

Во всяком случае, мой совет для конечного пользователя - нажать ESCape для отмены выделения любой ячейки после копирования. Это переведет Excel из его навязчивой идеи по очистке буфера обмена, поэтому даже не пытайтесь очистить буфер обмена, когда вы его перетаскиваете.

У меня была такая же проблема с Excel2003, так как в последнее время я обновил свой компьютер и ОС до 64-разрядной версии Windows 7.

Но сегодня, работая в excel (с раздражающим сообщением об ошибке каждый раз, когда я переместил ячейку), я закрыл Outlook, который работал на моем ПК в то время. Затем я закрыл и перезапустил excel и, как ни странно, я мог перемещать ячейки без появления сообщения об ошибке. (пока так или иначе)

3

У меня возникла проблема с буфером обмена, и я получаю это сообщение об ошибке каждый раз, когда пытаюсь сделать операцию копирования/вставки из файла Excel.

код разбивает на Clipboard.GetDataObject() и сообщение об ошибке заключается в следующем:

OpenClipboard Failed (Exception from HRESULT: 0x800401D0 (CLIPBRD_E_CANT_OPEN))

Мой WPF приложение уже запущено, когда я открываю Excel, написать текст, а затем попытаться скопировать/вставить.

код, который я использую это:

Private void SetClipboardData() { IDataObject data = Clipboard.GetDataObject(); IList result = GetDataForFileDropFormat(data); if ((result != null) && (result.Count > 0)) { this._elementsClipboard = result; this._sourceDrag = null; this._sourceClipboard = null; } }

выше функция вызывается в этом методе обработчика:

Public void Handle_WM_DRAWCLIPBOARD(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { SendMessage(this._nextClipboardViewer, msg, wParam, lParam); // get data from clipboard SetClipboardData(); handled = true; }

Я искал MSDN и.NET форумах, но Бесполезный Не находите обходного пути для этой проблемы.

Может ли кто-нибудь помочь мне в этом или дать мне представление о том, что мне следует попробовать?

  • 2 ответа
  • Сортировка:

    Активность

3

Несколько вопросов здесь. Кулак, в то время как вам определенно нужно отправить WM_DrawClipboard в следующее приложение в цепочке, вам не нужно это делать FIRST. Вы можете сделать это после того, как вы запустите свой собственный материал, затем передайте сообщение.

Далее, не ожидайте, что Excel выполнит все его обновление буфера обмена за одну операцию. Я видел, что Excel выполняет целых 24 обновления в строке при копировании сложных объектов. (в частности, графики - они открывали/закрывали буфер обмена после добавления каждого отдельного формата).

Кроме того, Excel использует преимущества Delayed Rendering для почти всего, кроме простого текста. Поэтому, когда ваше приложение запрашивает данные, Excel его выполняет. Это может занять время.

Возможно, вам понадобится реализовать задержку с «пока не удачным или 3-удаленным циклом». Вам нужно будет обратить пристальное внимание на то, отправляете ли вы WM_DrawClipboard по цепочке до или после обработки, поскольку, возможно, вы настроите другое столкновение с другими зрителями буфера обмена, которые также заинтересованы в данных Excel, и им приходится прибегать к таким трюки сами.

А вы думали, что это будет легко.....

Распространение компьютеров в массы в начале двухтысячных ознаменовало также и невероятно быстрое распространение офисных программ. Один из флагманов в этой отрасли - Microsoft Office представляет решение для работы с табличными данными : Excel. При работе с офисными приложениями у среднестатистического пользователя появляется множество проблем. Сегодня мы разберёмся, что делать, если возникает ошибка очистки буфера обмена Excel.

При работе с Эксел может возникать ошибка очистки буфера обмена

Причины возникновения неполадок

Как правило, такая проблема появляется очень редко и в большинстве случаев во время работы программ, которые используют промежуточное хранилище данных. Среди таких: приложения, которые автоматически меняют раскладку на клавиатуре. Реже ошибка может выдаваться, если некоторые файлы приложения повреждены или перемещены. В любом случае есть универсальный подход к такого рода неприятностям, который мы и рассмотрим далее.

Что делать, если ошибка постоянно появляется?

  • Отследите, какие программы помимо Microsoft Office Excel работают во время возникновения ошибок. Если одна из них использует клипборд - меняйте внутренние настройки этого приложения, выключайте на время работы с табличными данными или вовсе удаляйте из системы. Чаще всего проблема появляется при работе с различными свитчерами.
  • Произведите восстановление файлов приложения в панели управления. Для этого просто ищем приложение в списке установленных и жмём на соответствующее поле в дополнительном меню программы, если оно есть.
  • Если после произведённых манипуляций всё ещё не удаётся очистить буфер обмена Excel, то стоит попробовать откатить операционку назад, на время, когда с ним всё было в порядке. Для этого нужно иметь уже созданные контрольные точки. Если вы лично не настраивали расписание их создания и вручную тоже ничего не делали - не отчаивайтесь, некоторые приложения создают такие контрольные точки перед началом своей работы. Чтобы проверить наличие контрольной точки нужно зайти в защиту системы. Для этого кликаем правой кнопкой по иконке компьютера и выбираем пункт Свойства, мы попадём в меню Система, где в левой колонке нам нужно будет найти строку Защита системы. Заходим туда и жмём кнопку Восстановить . Появится список всех сохранённых контрольных точек.
    Если их, вообще, нет, то не расстраиваемся, есть ещё способы для решения проблемы с ошибкой открытия буфера обмена в Excel. Если же точки есть - восстанавливаем на ближайшую, дата создания которой точно вас удовлетворит. В будущем создайте расписание создания точек, этот приём вам ещё не раз пригодится.
  • Ошибка очистки буфера обмена Excel чаще всего бывает в версиях программы 2003 и 2007 годов, попробуйте поставить более новую версию. Если переходить на другую версию не хочется, то просто попробуйте удалить Office и поставить его заново. Не вздумайте вручную удалять файлы офисных программ, для этого у Майкрософт существует специальная утилита, которую можно скачать на официальном сайте.
  • Если ничего не помогает, а контрольной точки нет - переустанавливайте операционную систему. Действие радикальное, но точно вернёт всё на свои места. Если боитесь потерять драгоценные файлы, то разбейте локальный диск, если он один, на несколько частей. В итоге вы отформатируете только диск с операционной системой, а пользовательские файлы останутся нетронутыми.

ВАЖНО. Не спешите удалять всё подряд, отследите причину и выберите самый удобный и быстрый вариант для вашего случая.

Заключение

Ошибка открытия буфера обмена Excel чаще всего появляется вследствие параллельной работы программ, которые используют буфер обмена. Большая часть неполадок решается изменением настроек этих самых программ. Запретите им использовать буфер, и тогда ошибки не должны возникать. Если вручную с проблемой не удаётся справиться, то предпочтение должно отдаваться восстановлению системы в положение, когда всё было в порядке. Это быстро и надёжно. В крайнем случае переустанавливайте операционную систему.

Если у вас появились вопросы - задайте их в комментариях.


Переполнение буфера (Buffer Overflow)- запись или чтение программой данных за пределами выделенного для этого в памяти буфера. Обычно возникает из-за неправильной работы с данными и памятью, при отсутствии жесткой защиты со стороны подсистемы программирования и ОС. Данный вид ошибок достаточно распространён и часто связан с опечатками при наборе. Существует также родственная ошибка - неполная обработка буфера (Buffer Underflow).

Так как большинство языков высокого уровня размещают данные программы в стеке процесса, смешивая их с управляющими данными, переполнение буфера является одним из наиболее распространённых способов взлома ПО, позволяя загрузить и выполнить произвольный машинный код от имени программы и с правами учетной записи запустившего её пользователя.

В таких распространённых языках, как C и C++, отсутствует встроенная проверка на границы чтения/записи данных. Это плата за возможность эффективной низкоуровневой работы с оперативной памятью. С другой стороны, практически все интерпретируемые языки и JIT среды (Java RTE, .NET Framework) имеют встроенную защиту от переполнения буфера.

Для предотвращения использования уязвимости переполнения буфера во время исполнения программы существуют системы защиты от повреждения стека (Libsafe, StackGuard), системы защиты пространства исполняемого кода. Сложность же динамического обнаружения ошибок переполнения буфера связана с тем, что программа долгое время может работать стабильно, т.к. в неинициализированной памяти могут находиться приемлемые значения, а область перезаписываемой памяти может не использоваться. На этапе написания/отладки кода ошибки переполнения буфера и связанные с ними уязвимости могут быть обнаружены с помощью .

Вот несколько примеров данной ошибки, найденных в коде реальных open-source проектов с помощью статического анализатора

Проект MAME (эмулятор игр). Выход за границы буфера.

#define CHD_SHA1_BYTES 20 #define CHD_V4_HEADER_SIZE 108 #define CHD_MAX_HEADER_SIZE CHD_V4_HEADER_SIZE static chd_error header_read(...., chd_header *header) { UINT8 rawheader; ... memcpy(header->parentsha1, &rawheader, CHD_SHA1_BYTES); ... }

Массив "rawheader" состоит из 108 байт. Планируется скопировать его содержимое, начиная с байта под номером 100. Беда в том, что при этом мы выйдем за границы массива. Можно скопировать только 8 байт. А копируется 20 байт.

Теперь рассмотрим пример ошибки неполной очистки буфера (Buffer Underflow). Проект Chromium.

Void Time::Explode(..., Exploded* exploded) const { ... ZeroMemory(exploded, sizeof(exploded)); ... }

Функция ZeroMemory очищает только часть структуры Exploded. Причина, что оператор "sizeof" возвращает размер указателя. Чтобы исправить ошибку, необходимо разыменовать указатель.