ПРОИЗВОДИТЕЛЬНОСТЬ - зацикливание на ячейках - подавление предупреждения «число сохранено в виде текста» в Excel VSTO с помощью C #

1

Я заполняю ListObject данными из базы данных и предварительно форматирую ListColumns, которые поступают из VarChar (& аналогичного) в виде текста перед вставкой данных.

Это хорошо работает, но некоторые затронутые ячейки теперь показывают ошибку "Number Stored As Text".

Ответ qaru.site/questions/4394963/... корректно подавляет ошибку, но требует прокрутки по всем ячейкам (так как невозможно выполнить действие в диапазоне).

К сожалению, для больших диапазонов это неприемлемо медленно.

(nb - если вы делаете это вручную в Excel, это молниеносно)

Вот фрагмент кода в С# (для определенного столбца):

var columnDataRange = listColumn.DataBodyRange
var cells = columnDataRange.Cells;
for (var i = 1; i < cells.Count; i++)
{
    InteropExcel.Range cell = cells[i, 1];
    if (cell.Count > 1) break;

    if (cell.Errors != null)
    {
        var item = cell.Errors.Item[InteropExcel.XlErrorChecks.xlNumberAsText];
        item.Ignore = true;     
    }   
}

Кто-нибудь знает более быстрый способ сделать это?

(Или, в более общем плане, более быстрый способ итерации через ячейки в диапазоне?)

Надеюсь, кто-то может помочь - спасибо.

Изменение: это надстройка уровня приложения VSTO для Excel 2010/2013.

  • 0
    Это то, что может быть сделано только в коде? Не могли бы вы сделать это раньше, чем в самом Excel?
  • 0
    Привет @rhughes. rhughes. Не совсем: это часть надстройки VSTO, которую я создал для своих конечных пользователей, чтобы получать данные из баз данных управляемым способом.
Показать ещё 2 комментария
Теги:
excel
performance
vsto

1 ответ

0

Чтобы быть уверенным - вы переходите из базы данных в экспорт Excel? Вы создаете новую, чистую электронную таблицу или перезаписываете существующие данные в существующей электронной таблице?

Если вы переписываете данные в существующую таблицу, я бы сначала очистил столбцы и форматировал столбцы в Excel (программно, конечно). Скорее всего, старые данные и новые данные, поступающие в одно и то же пространство, вызывают проблемы типа.

Итак, что-то вроде: thisExcel.xlWorksheet.Range[yourrange].Value = "" thisExcel.xlWorksheet.Range[yourrange].NumberFormat = choseyourformat http://msdn.microsoft.com/en-us/library/office/ff196401(v = office.15).aspx

Вы должны иметь возможность применить это к большей области.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню