Я пишу функцию для экспорта данных в Excel с помощью Office Interop в.NET VB. Я в настоящее время пишу ячейки непосредственно с помощью Ячеек рабочего листа Excel () метод:
worksheet.Cells(rowIndex, colIndex) = data(rowIndex)(colIndex)
Это занимает много времени для больших объемов данных. Существует ли более быстрый способ записать много данных к Excel сразу? Был бы, делая что-то с диапазонами быть быстрее?
Вам следует избегать чтения и записи ячейки за ячейкой, если это возможно. Гораздо быстрее работать с массивами и читать или записывать сразу целые блоки. Некоторое время назад я писал статью о чтении из рабочих листов с помощью C#; в принципе, тот же код работает и в обратном направлении (см. ниже), и будет работать намного быстрее, особенно с большими блоками данных.
var sheet = (Worksheet)Application.ActiveSheet;
var range = sheet.get_Range("A1", "B2");
var data = new string[3,3];
data[0, 0] = "A1";
data[0, 1] = "B1";
data[1, 0] = "A2";
data[1, 1] = "B2";
range.Value2 = data;
Если вы еще этого не сделали, не забудьте установить Application.ScreenUpdating = false
, прежде чем начинать вывод данных. Так дела пойдут намного быстрее. Установите его обратно в True, когда вы закончите вывод данных. Необходимость перерисовывать экран при каждом изменении ячейки занимает немало времени, игнорирование этого позволяет сэкономить.
Что касается использования диапазонов, вам все равно нужно будет указать 1 (одну) конкретную ячейку для значения, поэтому я не вижу здесь никакой выгоды. Я не знаю, что делать это быстрее, чем то, что вы делаете в отношении фактического вывода данных.
Просто чтобы добавить к ответу Томми.
Application.Calculation = xlCalculationManual
И установите его обратно в автоматический режим, когда закончите писать. (если есть вероятность того, что исходный режим мог быть не автоматическим, вам придется сохранить это значение перед установкой ручного режима)
Application.Calculation = xlCalculationAutomatic
Честно говоря, самый быстрый способ написать это с разделителями-запятыми. С помощью метода Join (","). ToString проще написать строку полей, чем пытаться перебирать ячейки. Затем сохраните файл как «.csv». Используя interop, откройте файл как csv, который автоматически обновит ячейку при открытии.