2013-08-12 2 views
27

Я много работал с EPPlus для генерации файлов Excel для количества экспортируемых мной проектов. Большая часть экспорта, который они хотят, как правило, идеально сочетается с экспортом, который у них уже есть в их прежней системе. Один из них, однако, хочет другого. Они хотят, чтобы он выглядел точно так же, как один из экспорта из унаследованной системы после того, как они сделали некоторые типичные и конкретные изменения.Замораживание столбцов в EPPlus (функция разделения Excel)

Некоторые из изменений, которые они делают, тем не менее, делают каждую строку намного длиннее, чем они хотят, поэтому они хотят сохранить определенную информацию о столбце на месте на экране, в то время как остальные столбцы могут прокручиваться как обычно (т.е. функция разделения Excel). Я попытался заблокировать столбцы с ws.Column(6).Style.Locked = true, но это не работает. Я также попытался установить свойство Locked диапазона ячеек в true, но это также не сработало.

Как я могу заморозить столбцы на месте?

ответ

50

Оказалось, что EPPlus имеет встроенную функцию для выполнения этого объекта непосредственно на объекте FreezePanes. Эта функция имеет 2 параметра, оба из которых: int: строка и столбец. Выполнение этого приведет к замораживанию любых строк или столбцов, которые вы хотите заблокировать при просмотре рабочего листа.

Один из примеров на веб-сайте EPPlus использует его, хотя это не основной фокус примера/Этот пример может быть found here.

Существует один глюк с этой функцией, что вы должны знать о том, хотя: Число, которое вы используете для строки или столбца параметра фактически первый столбец, который НЕ замораживают в месте. Другими словами, если вы хотите, чтобы первые 5 столбцов должны быть заморожены вы должны сделать следующий вызов:

ws.View.FreezePanes(1,6) (где 6 является первым столбец, не замороженное)

+0

IronMan84: Я хочу, чтобы заморозить первые 5 столбцов в моем заголовке первенствовать и я пишу код ниже: xlWorkSheet.View.FreezePanes (1, 6); Вместо замораживания 5 столбцов для первой строки только замораживание 5 столбцов для всех строк. Любая идея, как я могу достичь желаемого результата? –

+0

IronMan84: Есть ли способ указать диапазон для замораживания строк и столбцов вместо того, чтобы просто указывать начальные индексы? –

+0

Excel не позволяет вам заморозить диапазоны ячеек, только столбцы или строки вдоль верхней и левой сторон таблицы. Однако вы можете использовать функцию Split для разделения рабочего листа на разделы, которые можно перемещать с помощью полос прокрутки. Подробнее см. Http://classroom.synonym.com/freeze-selection-excel-11819.html. –

1

я понял, что при использовании @ Предложение IronMan84, если вас интересует только строка, но не столбец. Вы можете использовать

ws.View.FreezePanes(3, 1); // (Freeze Row 2 and no column) 
+0

Это правильно. Попытка установить его на ноль заставляет Excel сообщать об ошибке, что документ нарушен. Добавьте 2 в число строк и/или столбцов, которые вы хотите заморозить. – jocull

+0

Извините, это неправильно - добавьте ** 1 ** к количеству строк/столбцов! – jocull

Смежные вопросы