ExcelDna / NetOffice / Excel: самый эффективный способ вставки значений?

Я создаю надстройку для Excel, используя ExcelDna и NetOffice, получаю данные из различных источников и вставляю их в рабочие листы.

Моя проблема в том, что вставка данных в рабочий лист происходит очень медленно.

Каков наиболее эффективный способ вставки блока значений в Excel?

ResultCell[,] result = _currentView.GetResult(values, cursor);

int loopM = result.GetUpperBound(0);
int loopN = result.GetUpperBound(1);

for (int y = 0; y <= loopM; y++)
{
    for (int x = 0; x <= loopN; x++)
    {
        int a = xlCurrentCell.Row + row;
        int b = xlCurrentCell.Column + x;
        Excel.Range xlCell = (Excel.Range)xlActiveSheet.Cells[a, b];
        _SetValue(xlCell, result[y, x]);
    }
    row++;
}

...

private void _SetValue(Excel.Range xlCell, ResultCell cell)
{
    xlCell.ClearFormats();
    object value = cell.Value;

    if (value is ExcelError)
    {
        value = ExcelUtils.ToComError((ExcelError) value);
    }
    else if (ExcelUtils.IsNullOrEmpty(value))
    {
        value = "";
    }

    xlCell.Value = value;
    if (!string.IsNullOrEmpty(cell.NumberFormat))
    {
        xlCell.NumberFormat = cell.NumberFormat;
    }
}

Может проблема в том, что каждая вставка становится обновлением экрана? Я пробовал:

Excel.Application xlApp = new Excel.Application(null, ExcelDna.Integration.ExcelDnaUtil.Application);

xlApp.ScreenUpdating = false;

Но это не дало никакого эффекта.


person Niels Bosma    schedule 01.02.2015    source источник


Ответы (1)


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

Также поможет временное отключение обновления экрана и пересчета.

Для длительных и подробных обсуждений, включая код для использования C API из надстройки Excel-DNA, см. Самый быстрый способ взаимодействия между живыми (несохраненными) данными Excel и объектами C #

person Govert    schedule 01.02.2015
comment
Спасибо. Это было то, что я искал. - person Niels Bosma; 03.02.2015