Работа с Excel через C#
Как работать с Excel на C#.
Вот фрагменты кода, которые я когда-то искал для работы с документами Excel.
Разработки очень помогли в работе по обучению отчетности.
В первую очередь необходимо подключить библиотеку Microsoft.Office.Interop.Excel.
Visual Studio — довольно старая версия. Если у вас новая версия, будет отличаться только внешний вид окна.
Далее создадим псевдоним для работы с Excel:
используя Excel = Microsoft.Office.Interop.Excel;
// Объявление приложения Excel.Application ex = new Microsoft.Office.Interop.Excel.Application (); // Просмотр Excel ex.Visible = true; // Количество листов в книге ex.SheetsInNewWorkbook = 2; // Добавить книгу Excel.Workbook workBook = ex.Workbooks.Add (Type.Missing); // Отключаем отображение окон сообщений ex.DisplayAlerts = false; // Получить первый лист документа (счет начинается с 1) Excel.Worksheet sheet = (Excel.Worksheet) ex.Worksheets.get_Item (1); // Название листа (вкладки внизу) sheet.Name = «Отчет за 13.12.2017»; // Пример заполнения ячеек для (int i = 1; i Расстановка рамок.
Оформляем рамы со всех сторон:
range2.Borders.get_Item (Excel.XlBordersIndex.xlEdgeBottom) .LineStyle = Excel.XlLineStyle.xlContinuous; range2.Borders.get_Item (Excel.XlBordersIndex.xlEdgeRight) .LineStyle = Excel.XlLineStyle.xlContinuous; range2.Borders.get_Item (Excel.XlBordersIndex.xlInsideHorizontal) .LineStyle = Excel.XlLineStyle.xlContinuous; range2.Borders.get_Item (Excel.XlBordersIndex.xlInsideVertical) .LineStyle = Excel.XlLineStyle.xlContinuous; range2.Borders.get_Item (Excel.XlBordersIndex.xlEdgeTop) .LineStyle = Excel.XlLineStyle.xlContinuous;
Цвет границы можно установить так:
range2.Borders.Color = ColorTranslator.ToOle (Color.Red);
Выравнивания диапазонов указываются следующим образом:
rangeDate.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter; rangeDate.HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;
Формулы
Определим задачу: получить сумму диапазона ячеек A4: A10.
Во-первых, давайте снова получим диапазон ячеек:
Excel.Range formulaRange = sheet.get_Range (sheet.Cells [4, 1], sheet.Cells [9, 1]);
Затем мы получаем диапазон формы A4: A10 по адресу ячейки ([4,1]; [9; 1]), описанному выше:
строковый сумматор = formulaRange.get_Address (1, 1, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing);
Теперь в переменной сумматора мы сохраняем строковое значение интервала ([4,1]; [9; 1]), то есть A4: A10.
Рассчитаем формулу:
// Ячейка как диапазон Excel.Range r = sheet.Cells [10, 1] как Excel.Range; // Стили r.Font.Name = «Times New Roman»; r.Font.Bold = true; r.Font.Color = ColorTranslator.ToOle (Color.Blue); // Устанавливаем формулу суммы r.Formula = String.Format («= SUM ({0}», adder);
Выделение ячейки или диапазона ячеек
Вы также можете выбрать ячейку или диапазон, как если бы вы выбрали их с помощью мыши:
sheet.get_Range («J3», «J8»). Активировать (); // или sheet.get_Range («J3», «J8»). Выбирать (); // Вы можете вставить ту же ячейку, тогда будет выбрана ячейка sheet.get_Range («J3», «J3»). Активировать (); sheet.get_Range («J3», «J3»). Выбирать();
Авто ширина и авто высота
Чтобы установить автоматические ширину и высоту для диапазона, используйте следующие команды:
range.EntireColumn.AutoFit (); range.EntireRow.AutoFit();
Получаем значения из ячеек
Чтобы получить значение из ячейки, мы используем следующий код:
// Получить ячейку как ранг Excel.Range forYach = sheet.Cells [ob + 1, 1] as Excel.Range; // Получить значение из ячейки и преобразовать его в строку string yach = forYach.Value2.ToString();
Добавляем лист в рабочую книгу
Чтобы добавить лист и присвоить ему заголовок, используйте следующее:
var sh = workBook.Sheets; Excel.Worksheet sheetPivot = (Excel.Worksheet) sh.Add (Type.Missing, sh [1], Type.Missing, Type.Missing); sheetPivot.Name = «Сводная таблица»;
Добавление разрыва страницы
// Ячейка для разбиения Excel.Range razr = sheet.Cells [n, m] as Excel.Range; // Добавляем горизонтальный разрыв (лист — текущий лист) sheet.HPageBreaks.Add (razr); // VPageBreaks — Добавить вертикальный разрыв
Сохраняем документ
ex.Application.ActiveWorkbook.SaveAs («doc.xlsx», Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type. Отсутствует, Тип. Отсутствует, Тип. Отсутствует);
Как открыть существующий документ Excel
ex.Workbooks.Open (@ «C: \ Users \ Myuser \ Documents \ Excel.xlsx», Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Отсутствующий тип, отсутствующий тип, отсутствующий тип, отсутствующий тип, отсутствующий тип, отсутствующий тип, отсутствующий тип);
Комментарии
При работе с Excel с использованием C# редактор Visual Basic, встроенный в Excel, может оказаться большим подспорьем.
Для этого в настройках ленты нужно добавить пункт «Разработчик». Далее начинаем запись макроса, выполняем действия и останавливаем запись.
Затем войдем в редактор Visual Basic и посмотрим на написанный там код:
Например:
Sub Macro1 () «Macro1 Macro» Диапазон («E88»). Выберите ActiveSheet.ListObjects.Add (xlSrcRange, Range («$ A $ 1: $ F $ 118») ,, xlYes) .Name = _ «Table1» Range («A1: F118»). Выберите ActiveSheet.ListObjects («Таблица1»). TableStyle = Диапазон «TableStyleLight9» («E18»). Выберите ActiveWindow.SmallScroll Down: = 84 End Sub
Этот макрос записывает все действия, которые мы выполняли во время его записи. Эти методы и свойства можно использовать в коде C.
Этот метод также может помочь в формировании относительных формул, таких как добавление чисел слева от текущей ячейки на 4 столбца и т.д. Пример:
// Добавляем значения предыдущих 12 ячеек к левому рангу.Formula = «= SUM (RC [-12]: RC [-1])»;
Также во время работы может возникнуть ошибка: метод завершился некорректно. Это может означать, что лист для работы не выбран.
Чтобы выбрать лист, выполните sheetData.Select (Type.Missing); где sheetData — это нужный вам лист.