Проверка данных Excel поврежденных рабочих листов (при копировании?) - PullRequest
0 голосов
/ 02 ноября 2018

Edit:

Я также изучил эту проблему, и теперь у меня есть минимальный файл, в котором я могу воспроизвести ошибку / ошибку. Все надстройки отключены, и я использую только 4 строки кода VBA:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        Tabelle15.Range(Target, Target.Offset(1, 0)).EntireRow.Copy
        Target.Offset(2, 0).EntireRow.Insert
End Sub

Файл содержит 2 листа с форматированием, проверкой данных, схемами (3 уровня) и некоторыми данными на нем.

Что я делаю, чтобы испортить файлы:

  • Открыть файл
  • Нажмите 3 раза на Outline-Level 2 (-> скрывая несколько строк)
  • Нажмите 3 раза на Outline-Level 3 (-> скрытие строк)
  • Дважды щелкните ячейку, чтобы скопировать две строки с помощью VBA-кода
  • Закрыть файл
  • Повторяйте, пока файл не будет поврежден (иногда требуется 10 или более циклов, иногда файл поврежден после 1 цикла)

Лист в поврежденном файле не содержит кода и не активируется в этих циклах. Вот до и после проверки поврежденных данных:

До коррупции:

<dataValidation type="list" allowBlank="1" showInputMessage="1" showErrorMessage="1" sqref="D11 D13 D15 D9">

После коррупции:

<dataValidation type="list" allowBlank="1" showInputMessage="1" showErrorMessage="1" sqref="D11:A11 1:A90 A16384:D4294967295 D9">

Я до сих пор не знаю, почему это происходит. Было бы интересно, если у кого-то есть такая же проблема или он знает обходной путь, чтобы не было коррупции. (Я попробовал очевидное приложение. Экран обновления, приложение. Ожидание, ...)

Конец редактирования ---

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

Мы написали COM-AddIn для Excel на VB.net, который делает все что угодно (например, копирование ячеек и листов в определенных структурах, подключение данных к SQL-DB, сохранение рабочей книги ...)

Теперь я получаю несколько книг от пользователей надстройки, которые повреждены. Проблема в том, что пользователи работают с файлами и не имеют проблем. Только после сохранения, закрытия и повторного открытия файла Excel показывает вопрос, нужно ли восстанавливать файл. В зависимости от типа файла (мы используем * .xlsx и * .xlsb) Excel «восстанавливает» файл и удаляет все форматирование с 1 листа - в * .xlsb он не восстанавливается и не открывается вообще.

После просмотра файлов xml-Sheet я обнаружил, что повреждение происходит в тегах dataValidation-Tags. Не в одной конкретной проверке данных, иногда в одной, иногда в другой.

Поврежденные теги dataValidation выглядят так:

<dataValidation type="list" allowBlank="1" showInputMessage="1" showErrorMessage="1" sqref="S26:26 1:A523 A16384:S4294967295 S32"><formula1>"Item1,Item2,Item3"</formula1></dataValidation>

Восстановление данных или файлов не является проблемой. К настоящему времени я могу восстановить свои рабочие книги просто отлично. Моя главная проблема в том, что я не могу найти какого-либо пути к тому, откуда эта проблема.

Большинство операций, которые происходят на листах, это копирование и вставка (не вставка) целых строк. На одном листе, который иногда поврежден, происходит только «копирование с», а на листе нет вставки или вставки. Также кажется, что общая производительность файла влияет на частоту возникновения проблемы.

Поскольку я не могу дать никакого кода, где происходит это повреждение, я не ожидаю найти здесь решение, но, возможно, у кого-то была похожая проблема и есть подсказка, которая показывает мне правильное направление.

Дополнительная информация. Проблема возникает на разных компьютерах. Мне не удалось воспроизвести коррупционный процесс. Насколько я знаю, проблема возникла только в Excel 2016, но я не могу исключить, что более ранние версии повреждают файлы точно так же. Я проверил (по крайней мере, на некоторых машинах), что все обновления для Office и Windows установлены. Формулы в проверках данных имеют (путь) не более 255 символов. На поврежденных листах отсутствует подключение к базе данных.

Любая идея или подсказка приветствуется!

...