Все привет, в этой статье опишу исчерпывающие примеры работы с excel на языке C#.
Для начала работы нам необходимо подключить библиотеку COM как на рисунке ниже:

Для этого добавляем ссылку в проект, надеюсь вы знаете как это делается) Выбираем пункт COM ищем библиотеку Microsoft Excel 16.0 Object Library ставим галочку и жмем Ок.
Далее нам не обходимо для сокращения записи и удобства создать алиас.

using Excel = Microsoft.Office.Interop.Excel;
Теперь нам нужно объявить объект Excel задать параметры и приступать к работе.
//Объявляем приложение
Excel.Application app = new Excel.Application
{
//Отобразить Excel
Visible = true,
//Количество листов в рабочей книге
SheetsInNewWorkbook = 2
};
//Добавить рабочую книгу
Excel.Workbook workBook = app.Workbooks.Add(Type.Missing);
//Отключить отображение окон с сообщениями
app.DisplayAlerts = false;
//Получаем первый лист документа (счет начинается с 1)
Excel.Worksheet sheet = (Excel.Worksheet)app.Worksheets.get_Item(1);
//Название листа (вкладки снизу)
sheet.Name = "Имя должно быть не больше 32сим";
Пример заполнения ячейки:
//Пример заполнения ячеек №1 for (int i = 1; i <= 9; i++) { for (int j = 1; j < 9; j++) sheet.Cells[i, j] = String.Format("nookery {0} {1}", i, j); } //Пример №2 sheet.Range["A1"].Value = "Пример №2"; //Пример №3 sheet.get_Range("A2").Value2 = "Пример №3";
Захват диапазона ячеек:
//Захватываем диапазон ячеек Вариант №1 Excel.Range r1 = sheet.Cells[1, 1]; Excel.Range r2 = sheet.Cells[9, 9]; Excel.Range range1 = sheet.get_Range(r1, r2); //Захватываем диапазон ячеек Вариант №2 Excel.Range range2 = sheet.get_Range("A1","H9" );
Оформление, шрифт, размер, цвет, толщина.
//Шрифт для диапазона
range.Cells.Font.Name = "Tahoma";
range2.Cells.Font.Name = "Times New Roman";
//Размер шрифта для диапазона
range.Cells.Font.Size = 10;
//Жирный текст
range.Font.Bold = true;
//Цвет текста
range.Font.Color = ColorTranslator.ToOle(Color.Blue);
Объединение ячеек в одну
//Объединение ячеек с F2 по K2 Excel.Range range3 = sheet.get_Range("F2", "K2"); range3.Merge(Type.Missing);
Изменяем размеры ячеек по ширине и высоте
//увеличиваем размер по ширине диапазон ячеек Excel.Range range2 = sheet.get_Range("D1", "S1"); range2.EntireColumn.ColumnWidth = 10; //увеличиваем размер по высоте диапазон ячеек Excel.Range rowHeight = sheet.get_Range("A4", "S4"); rowHeight.EntireRow.RowHeight = 50;range.EntireColumn.AutoFit();range.EntireColumn.AutoFit(); //авторазмер
Создаем обводку диапазона ячеек
Excel.Range r1 = sheet.Cells[countRow, 2]; Excel.Range r2 = sheet.Cells[countRow, 19]; Excel.Range rangeColor = sheet.get_Range(r1, r2); rangeColor.Borders.Color = ColorTranslator.ToOle(Color.Black);
Производим выравнивания содержимого диапазона ячеек.
Excel.Range r = sheet.get_Range("A1", "S40"); //Оформления r.Font.Name = "Calibri"; r.Cells.Font.Size = 10; r.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter; r.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
Примеры вычисления формул, все вставки формул были скопированы из самой Excel без изменений. Позиция ячейки взята из счетчика переменно и подставлен к букве ячейки
sheet.Cells[countRow, countColumn] = $"=G{countRow}-F{countRow}"; sheet.Cells[countRow, countColumn].FormulaLocal = $"=ЕСЛИ((H{countRow}*O{countRow})+(I{countRow}*P{countRow})/100<=0;J{countRow}*O{countRow}/100;((H{countRow}*O{countRow})+(I{countRow}*P{countRow}))/100)"; sheet.Cells[countRow, countColumn] = $"=K{countRow}+N{countRow}-R{countRow}"; sheet.Cells[33, 22].FormulaLocal = "=СУММ(V3:V32)";
Добавляем разрыв страницы.
//Ячейка, с которой будет разрыв
Excel.Range razr = sheet.Cells[n, m] as Excel.Range;
//Добавить горизонтальный разрыв (sheet - текущий лист)
sheet.HPageBreaks.Add(razr);
//VPageBreaks - Добавить вертикальный разрыв
Как открыть фаил Excel
app.Workbooks.Open(@"C:\Users\User\Documents\Excel.xlsx",
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
Сохраняем документ Excel
app.Application.ActiveWorkbook.SaveAs("MyFile.xlsx", Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
Завершение работы с объектом Excel.Application
app.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
Пример как выбрать фаил и загрузив его и узнать количество заполненных строк и колонок в одном конкретном листе по имени.
//поиск файла Excel OpenFileDialog ofd = new OpenFileDialog(); ofd.Multiselect =false; ofd.DefaultExt = "*.xls;*.xlsx"; ofd.Filter = "Microsoft Excel (*.xls*)|*.xls*"; ofd.Title = "Выберите документ Excel"; if (ofd.ShowDialog() != DialogResult.OK) { MessageBox.Show("Вы не выбрали файл для открытия", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } string xlFileName = ofd.FileName; //имя нашего Excel файла //рабоата с Excel Excel.Range Rng; Excel.Workbook xlWB; Excel.Worksheet xlSht; int iLastRow, iLastCol; Excel.Application xlApp = new Excel.Application(); //создаём приложение Excel xlWB = xlApp.Workbooks.Open(xlFileName); //открываем наш файл xlSht = xlWB.Worksheets["Лист1"]; //или так xlSht = xlWB.ActiveSheet //активный лист iLastRow = xlSht.Cells[xlSht.Rows.Count, "A"].End[Excel.XlDirection.xlUp].Row; //последняя заполненная строка в столбце А iLastCol = xlSht.Cells[1, xlSht.Columns.Count].End[Excel.XlDirection.xlToLeft].Column; //последний заполненный столбец в 1-й строке
Получаем список всех загруженных книг «листов» из файла
//поиск файла Excel OpenFileDialog ofd = new OpenFileDialog(); ofd.Multiselect = false; ofd.DefaultExt = "*.xls;*.xlsx"; ofd.Filter = "Microsoft Excel (*.xls*)|*.xls*"; ofd.Title = "Выберите документ Excel"; if (ofd.ShowDialog() != DialogResult.OK) { MessageBox.Show("Вы не выбрали файл для открытия", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } string xlFileName = ofd.FileName; //имя нашего Excel файла Excel.Workbook xlWB = ex.Workbooks.Open(xlFileName); ///загружаем список всех книг foreach (object item in xlWB.Sheets) { Excel.Worksheet sheet = (Excel.Worksheet)item; }
Начиная с Excel.Workbook workBook = app.Workbooks.Add(Type.Missing); начинаю получать ошибку CS0236 о том, что инициализатор поля не может обращаться к нестатическому полю, методу или свойству(Main.app)
Что то делаете не так, код рабочий и до сих пор использую. При каких обстоятельствах ошибка возникает?
Такая же ошибка
Версию офиса смотреть надо, либо использовать более продвинутые библиотеки. У меня под 2007 офис было сделано.