Я заполняю 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.
Чтобы быть уверенным - вы переходите из базы данных в экспорт 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
Вы должны иметь возможность применить это к большей области.