Я унаследовал большой проект, который использует Office.Interop.Excel для вставки данных в электронную таблицу.
В терминах видимого взаимодействия вы нажимаете кнопку, и появляется электронная таблица Excel со всеми данными.уже вставлен.Я упоминаю об этом, потому что я видел, как это было сделано в другом месте, когда программа уже открыта и значения вставлены.Программа, с которой я работаю, вставляет данные до появления Excel.
К сожалению, после вставки относительно большого объема данных передача информации в Excel блокируется, и программа не может продолжаться.
Во всяком случае, я провел некоторое исследование и обнаружил следующую строку:
myWorksheet.Range("A" & rowNumber).Resize(dataArray.GetUpperBound(0) + 1, columnCount).Value = dataArray
Это копирует все данные в dataArray непосредственно в группу ячеек на рабочем листе.
Я догадался, чтопроблема может быть вызвана попыткой передать такой большой объем данных за один раз, поэтому я изменил его для копирования данных по строкам:
For horizIndex As Integer = 0 To dataArray.GetUpperBound(0)
Dim subArr(0, arr.GetUpperBound(1)) As Object
For columnIndex As Integer = 0 To dataArray.GetUpperBound(1)
subArr(0, columnIndex) = dataArray(horizIndex, columnIndex)
Next
myWorksheet.Range("A" & (rowNumber + horizIndex)).Resize(horizIndex + 1, columnCount).Value = arr
Next
Это скопирует около 350 строк в Excel изатем настройка строки Value просто перестает возвращаться.
Может кто-нибудь предложить способ обойти это?
РЕДАКТИРОВАТЬ: Хорошо, я попробовал кучу того, что предложил Лазарь ниже, и вот где я нахожусьпрямо сейчас:
Пока данные относительно короткие или типы данных довольно простые (целые числа и т. д.), все варианты кода работают нормально.Исходное массовое копирование работает нормально, копирование за строкой и копирование за ячейкой работает, если набор данных либо маленький, либо простой.
Мой фактический набор данных, тем не менее, относительно сложени содержит несколько типов данных, включая Strings.
Он падает после 350-ти строк.Он падает на стороне кода Excel, поток уходит в Excel и никогда не возвращается.
Итак, есть еще идеи, кто-нибудь?