Вставка строк и изменение границ ячеек в Excel Interop из C#

Задача: вставить строки в таблицу Excel и проставить границы ячеек. Вставка строки может потребовать если ниже динамически заполняемой таблицы находятся еще какие-то данные, например подвал документа с подписями и/или статистикой.

при наличии

using Excel = Microsoft.Office.Interop.Excel;
// разный код
private Excel.Worksheet _workSheet;

вставка строки будет выглядеть так

        public void InsertRow(int rowNum)
        {
            Excel.Range cellRange = (Excel.Range) _workSheet.Cells[rowNum, 1];
            Excel.Range rowRange = cellRange.EntireRow;
            rowRange.Insert(Excel.XlInsertShiftDirection.xlShiftDown, false); 
        }

При этом надо учитывать то, что во вставляемую строку будет копироваться стиль текста предыдущей строки, но не будет копироваться стиль границ.Избавится от копирования стиля текста из шапки таблицы можно тупо начав встовлять строки со второй, но вот границы придется проставлять вручную.

Границы в Excel задаются сочетанием двух параметров - типа линии XlLineStyle и толщины линии XlBorderWeight, для задания границ надо вытащить из ячейки обьект типа Borders. При этом надо учитывать, что если мы в общей куче зададим для одной ячейки отсуствующие у нее внутренние границы, то Excel 2007 и старше отработает нормально, а Excel 2003 вылетит с ошибкой.

При наличии

public enum ExcelLineType { DotsSmall, Dots, None, Normal, Thick, Double }

Можно использовать такие методы для класса, инкапсулирующего документ Excel

       public void SetCellBorders(int rowNumber, int columnNumber, ExcelLineType lineType)
        {
            Excel.XlLineStyle lineStyle;
            Excel.XlBorderWeight lineWeight;
            setLineStyleAndWeight(lineType, out lineStyle, out lineWeight);

            Excel.Range cellRange = (Excel.Range)_workSheet.Cells[rowNumber, columnNumber];
            Excel.Borders borders = cellRange.Borders;

            borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle = lineStyle;
            borders[Excel.XlBordersIndex.xlEdgeTop].Weight = lineWeight;

            borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle = lineStyle;
            borders[Excel.XlBordersIndex.xlEdgeBottom].Weight = lineWeight;

            borders[Excel.XlBordersIndex.xlEdgeLeft].LineStyle = lineStyle;
            borders[Excel.XlBordersIndex.xlEdgeLeft].Weight = lineWeight;

            borders[Excel.XlBordersIndex.xlEdgeRight].LineStyle = lineStyle;
            borders[Excel.XlBordersIndex.xlEdgeRight].Weight = lineWeight;
        }

        private void setLineStyleAndWeight(ExcelLineType lineType, out Excel.XlLineStyle lineStyle, out Excel.XlBorderWeight lineWeight)
        {
            lineStyle = Excel.XlLineStyle.xlContinuous;
            lineWeight = Excel.XlBorderWeight.xlThin;

            if (lineType == ExcelLineType.DotsSmall)
            {
                lineStyle = Excel.XlLineStyle.xlDot;
                lineWeight = Excel.XlBorderWeight.xlHairline;
            }
            else if (lineType == ExcelLineType.Thick)
            {
                lineStyle = Excel.XlLineStyle.xlDot;
                lineWeight = Excel.XlBorderWeight.xlMedium;
            }
            else if (lineType == ExcelLineType.None)
            {
                lineStyle = Excel.XlLineStyle.xlLineStyleNone;
            }
            else if (lineType == ExcelLineType.Double)
            {
                lineStyle = Excel.XlLineStyle.xlDouble;
                lineWeight = Excel.XlBorderWeight.xlThick;
            }
            else if (lineType == ExcelLineType.Dots)
            {
                lineStyle = Excel.XlLineStyle.xlDot;
            }
        }

XlLineStyle Enumeration
XlBorderWeight Enumeration
Borders Interface


Комментарии

Вставка строк и изменение границ ячеек в Excel Interop из C# — Комментарии (7)

  1. А можно ли как то объединить ячейки между собой? Иными словами стереть границы у определенных ячеек? То есть суть в том что в Excel у меня есть объединенные между собой ячейки, но в датагридвиев они у меня не объединены? Перерыл гугл, находил несколько способов но ни 1 не получился(

  2. Именно на нынешний день выбор охлаждающей приборов полагается пролегать сразу же и качественно, то иначе совершаться на выигрышных согласии, по демократичной деньгах и отличном сервисном сервисе. Презентованная фирма вентиляционной техники предоставляет подачу кондиционерной построении всякое помещение особенно по таких условиях. Организация Мастер-Климат в столице заправка кондиционера киев генерирует оборот, подачу, установку, регулирование, разбор, чистку и испытание личной кондиционерной оборудовании в приемлемыми стоимостью и оформлением работоспособности. На данном серверном-маркете Мастер Климат пользователи несет возможность выделить лучшую оснащение евро и восточных дестрибюторов Panasonic, NeoClima, Купер Хантер, Mitsubishi, Олма, Леберг, которые возможно купить по Киеве в вразумительным ценами. Мастер Климат осуществляет продажу снабжения кондиционирования и теплоты, какие поможет предоставить правильный микроклимат, удобство и нескончаемую работу к долгие годы применения. Пишите к нам, тогда менеджер определим именно для Вас оптимальные варианты полностью на специальных условиях.

  3. Кондиционерные аппараты и вентиляционные схемы за вразумительными деньгам у Одессе пользователи имеют возможность обозреть плюс заказать по серверном- точке климатизационной сноровки Мастер Климат Монтаж кондиционеров в Одессе. Именно на сайте точки клиент имеют возможность обозреть климатизер бутафора Toshiba, Панасоник, Neoclima, Купер Hunter, Carrier, Даикин, Чиго, LG и другие, или же к тому же утвердить вентиляционный блок плюс свободную снабжение в Одессе. Также кроме привоза мы выполняем сервис сборки, разбор, испытание и уборка канальных сплит- конструкция также производтсвенных приборов. Приобретайте кондиционеры необходимой объема также типа также приемлемые деньги в поставщику Мастер Климат, ну а квалифицированные монтажники передают высокопрофессиональное обслуживание касательно настройка персонального климатизерного аппаратуры. Промышляя собственно на торге долгое пору, фирма получили любезное уважение среди заказчиков, атестаты свидетельства качества, выполнимость также полномочия зарегистрированного поставителя, это поручает компании потенциал вести сбыт принимая во внимание различные просьбы пользователей.

Добавить комментарий для Andrewpakly Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>