Excel и C#: Интеграция и Автоматизация


Excel от Microsoft — это не только популярный инструмент для ведения таблиц, анализа данных и бухгалтерского учёта, но и мощная платформа для интеграции с различными языками программирования, в том числе с C#. Интеграция Excel с C# открывает широкие возможности: от автоматизации рутинных задач до создания сложных аналитических и расчётных приложений.
Что Вам Понадобится
- Microsoft Excel;
- Visual Studio или другая среда разработки для C#;
- Библиотека для взаимодействия с Excel. Существуют разные варианты, но одним из популярных является Open XML SDK или EPPlus для работы с .xlsx файлами. Есть также Interop, но он требует установленного Office.
Понимание Базовых Понятий
Excel Файлы
Файлы Excel обычно имеют расширения .xls или .xlsx . .xls — это старый формат (до Excel 2007), а .xlsx — более новый, основанный на XML.
Листы и Ячейки
Excel-файл содержит листы (sheets), которые, в свою очередь, состоят из ячеек (cells) в виде таблицы (строки и столбцы).
Работа с EPPlus
EPPlus — это библиотека для создания и чтения файлов Excel в формате .xlsx , не требующая установки Microsoft Office. Давайте начнём с создания нового файла Excel.
Установка EPPlus
Чтобы начать, нужно установить EPPlus через NuGet:
Install-Package EPPlus
Создание Excel Файла
Давайте создадим простой Excel файл с одним листом и несколькими ячейками:
using OfficeOpenXml; // Импортируем EPPlus using System.IO; namespace ExcelDemo < class Program < static void Main(string[] args) < // Установка лицензии ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // Для не коммерческого использования using (var package = new ExcelPackage()) < // Добавление нового листа var worksheet = package.Workbook.Worksheets.Add("MySheet"); // Запись в ячейки worksheet.Cells["A1"].Value = "Hello"; worksheet.Cells["B1"].Value = "World"; // Сохранение файла var fi = new FileInfo(@"C:\path\to\your\file.xlsx"); package.SaveAs(fi); > > > >
Чтение Excel Файла
Теперь давайте прочитаем данные из существующего файла Excel:
using OfficeOpenXml; using System; using System.IO; namespace ExcelDemo < class Program < static void Main(string[] args) < var fi = new FileInfo(@"C:\path\to\your\file.xlsx"); using (var package = new ExcelPackage(fi)) < // Получаем первый лист var worksheet = package.Workbook.Worksheets[0]; // Чтение значений ячеек var valueA1 = worksheet.Cells["A1"].Value; var valueB1 = worksheet.Cells["B1"].Value; Console.WriteLine($"A1: , B1: "); > > > >
Этот код демонстрирует основные операции с Excel файлами с использованием EPPlus: создание файла, добавление листов, запись в ячейки и чтение из них.
Читайте так же DataGridView: добавить новый столбец в C#
Использование Interop
Microsoft Office Interop — это другой способ взаимодействия с Excel файлами. Он более мощный, но требует установленного Microsoft Office на компьютере. Interop позволяет не только читать и записывать данные, но и выполнять такие операции, как форматирование ячеек, работа с графиками и макросами.
Пример Создания Excel файла с помощью Interop
Для использования Interop необходимо добавить ссылку на Microsoft.Office.Interop.Excel в ваш проект:
using Microsoft.Office.Interop.Excel; using _Excel = Microsoft.Office.Interop.Excel; namespace InteropDemo < class Program < static void Main(string[] args) < // Создание приложения Excel _Excel.Application excelApp = new _Excel.Application(); if (excelApp == null) < Console.WriteLine("Excel не установлен!"); return; > // Создание новой книги excelApp.Workbooks.Add(); _Excel._Worksheet worksheet = (_Excel._Worksheet)excelApp.ActiveSheet; // Запись в ячейки worksheet.Cells[1, 1] = "Hello"; worksheet.Cells[1, 2] = "World"; // Сохранение var path = @"C:\path\to\your\file.xlsx"; worksheet.SaveAs(path); // Закрытие excelApp.Quit(); > > >
Продвинутая Работа с Excel в C
Продолжаем наш путь в изучении работы с Excel через C#. В этой части мы углубимся в продвинутые темы, такие как форматирование ячеек, использование формул и управление большими объёмами данных.
Форматирование Ячеек в EPPlus
Форматирование ячеек — ключевой элемент при создании отчётов. EPPlus предоставляет разнообразные опции для этого.
using (var package = new ExcelPackage()) < var worksheet = package.Workbook.Worksheets.Add("FormattedSheet"); // Установка ширины колонки worksheet.Column(1).Width = 20; // Установка формата ячейки worksheet.Cells["A1"].Style.Numberformat.Format = "@"; // Текстовый формат worksheet.Cells["A1"].Style.Font.Bold = true; // Жирный текст // Добавление границ worksheet.Cells["A1"].Style.Border.Top.Style = ExcelBorderStyle.Thin; // Запись значения worksheet.Cells["A1"].Value = "Форматированный текст"; // Сохранение package.SaveAs(new FileInfo(@"C:\path\to\formatted.xlsx")); >
Работа с Формулами
Excel известен своими возможностями для выполнения расчётов с помощью формул. В EPPlus можно устанавливать и вычислять формулы:
worksheet.Cells["B1"].Formula = "SUM(B2:B10)"; // Присвоение формулы worksheet.Cells["B1"].Calculate(); // Вычисление значения
Использование Interop для Расширенного Форматирования
Interop предоставляет ещё больше возможностей для форматирования, включая настройки шрифтов, цветов и стилей.
_Excel.Range range = worksheet.Cells[1, 1]; range.Font.Bold = true; range.Interior.Color = _Excel.XlRgbColor.rgbLightBlue; // Заливка цветом range.Borders.LineStyle = _Excel.XlLineStyle.xlContinuous; // Границы
Управление Большими Объемами Данных
При работе с большими объёмами данных важно понимать, как оптимизировать производительность. При использовании Interop следует минимизировать количество операций чтения и записи между приложением C# и Excel, так как каждая такая операция замедляет выполнение. В EPPlus лучше использовать методы, обрабатывающие диапазоны ячеек, а не отдельные ячейки.
// EPPlus: Заполнение большого количества данных var range = worksheet.Cells["A1"].LoadFromCollection(myLargeCollection);
Экспорт данных из SQL в Excel
Одним из распространённых примеров использования Excel с C# является экспорт данных из базы данных SQL. Вот как это можно сделать с помощью EPPlus:
using (var package = new ExcelPackage()) < var worksheet = package.Workbook.Worksheets.Add("SQL Data"); var connectionString = "Ваша строка подключения к БД"; using (var connection = new SqlConnection(connectionString)) < connection.Open(); var query = "SELECT * FROM Ваша_Таблица"; var command = new SqlCommand(query, connection); var reader = command.ExecuteReader(); // Загрузка данных из SqlDataReader worksheet.Cells["A1"].LoadFromDataReader(reader, true); package.SaveAs(new FileInfo(@"C:\path\to\sql-data.xlsx")); > >
Заключение
Работа с Excel в C# — мощный инструмент для разработчиков, позволяющий автоматизировать множество задач по обработке и анализу данных. Используя библиотеки, такие как EPPlus или Microsoft Office Interop, можно создавать, форматировать, и анализировать сложные отчёты, экспортировать и импортировать данные из различных источников.
Читайте так же Datagridview добавить новую строку C#: Инструкция
Надеюсь, эта статья помогла вам лучше понять, как начать работать с Excel в C# и открыла новые возможности для ваших проектов!
Си sharp как создать xlsx datagridview
ИМЕЕТСЯ
База данных в Ексель
База данных строки — 10 000 шт;
столбцы — 10 шт;
ВОПРОС
1. Каким способом оптимально извлечь из Ексель данные по двум условиям в три разные datagridview ?
2. Извлекаются следующие столбцы таблицы:
— ID
— наименование
— кол*
3. Таблица извлекается с заголовками столбцов (по возможности);
СЦЕНАРИЙ
1. Вносим ID задания.
2. Вносим путь к файлу.
3. Нажимаем кнопку «ИЗВЛЕЧЬ».
4. Данные извлекаются в зависимости от*»ID»*и*»порядковый номер»*в соответствующую datagridview.
ПРИЛОЖЕНИЕ
1. Проект.
2. Скрин
Изображения
| 2.jpg (117.8 Кб, 128 просмотров) |
| kd2.rar (35.3 Кб, 13 просмотров) |
Загрузка данных из Microsoft Excel в DataGridView: Справочник по C#
В данной инструкции рассмотрены 5ть примеров реализации получения данных из файла Microsoft Excel 2003-2007.
- Пример №1 – получение данных с использованием библиотеки объектов «Microsoft Excel 14.0»;
- Пример №2 – получение данных с использованием класса «OleDbConnection»;
- Пример №3 – получение данных с использованием библиотеки «Excel Data Reader – Read Excel files in .Net»;
- Пример №4 – получение данных из буфера обмена используется класс «Clipboard»;
- Пример №5 – ручной ввод;
Создайте проект Windows Form в Microsoft Visual Studio и добавьте на форму три компонента:
-
textBox1 — в данном компоненте будет выводится путь, имя и расширение выбранного файла;
Выберете компонент «dataGridView1» и сделайте клик правой клавишей мыши по нему, из появившегося контекстного меню выберете пункт «Свойства».

Установите следующие параметры в свойствах компонента:
- Dock – None – свойство задает границы элемента управления, прикрепленные к его родительскому элементу управления и определяет способ изменения его размеров относительно родительского элемента управления. http://msdn.microsoft.com
- Anchor — Top, Bottom, Left, Right — свойство задает границы контейнера, с которым связан элемент управления, и определяет способ изменения его при изменении размеров его родительского элемента. http://msdn.microsoft.com

Пример №1
В данном примере рассмотрено использование функций приложения Microsoft Office Excel из пакета Microsoft Office, c использованием библиотеки объектов Microsoft Excel 14. Данная библиотека позволяет управляемому коду взаимодействовать с объектной моделью приложения Microsoft Office, основанной на модели COM. Сделайте двойной клик по компоненту «button1», вы перейдете в автоматически созданный метод «button1_Click», события компонента «Click».

Перейдите в «Обозреватель решений» и найдите группу «References» которая содержит все ссылки на внешние компоненты в проекте. Сделайте клик правой клавишей мыши по данной группе и выберете из появившегося контекстного меню, пункт «Добавить ссылку…».

У вас откроется окно «Менеджер ссылок – (имя вашего проекта)», в левой части данного окна вам будет предложено выбрать одну из категорий. Visual Studio предоставляет четыре группы для выбора.
- Сборки — список всех компонентов платформы .NET Framework, ссылки на которые можно добавить.
- Решение — список всех повторно используемых компонентов, созданных в локальных проектах.
- COM — список всех COM-компонентов, ссылки на которые можно добавить.
- Обзор — позволяет осуществлять поиск компонента в файловой системе.
Выберете группу «COM» и ее подгруппу «Библиотеки типов». В центральной части окна вам будет предложен список доступных библиотек для подключения к вашему проекту. Найдите в списке библиотеку «Microsoft Excel 14.0 Object Library» и поставьте галочку рядом с именем данной библиотеки. В нижней части окна нажмите кнопку «ОК».

После добавления библиотеки, у вас появится три новых пункта в обозревателе решений:
- Microsoft.Office.Core;
- Microsoft.Office.Interop.Excel;
- VBIDE.

Для работы с добавленными ссылками необходимо добавить следующие пространства имен с использованием директивы «using»:
- using System.Reflection; — указывается ссылка на использование типов в пространстве имен «System.Reflection», при этом уточнение использования типа в этом пространстве имен не требуется;
- using ExcelObj = Microsoft.Office.Interop.Excel; — создается псевдоним пространства имен «Microsoft.Office.Interop.Excel».
В данном примере для открытия файла используется класс «OpenFileDialog», реализующий открытие окна для выбора файла по заданному фильтру «Excel 2003(*.xls)|*.xls|Excel 2007(*.xlsx)|*.xlsx». Данный фильтр так же реализует защиту от выбора файла не относящегося к Excel.
OpenFileDialog ofd = new OpenFileDialog(); //Задаем расширение имени файла по умолчанию. ofd.DefaultExt = "*.xls;*.xlsx"; //Задаем строку фильтра имен файлов, которая определяет //варианты, доступные в поле "Файлы типа" диалогового //окна. ofd.Filter = " Excel 2003(*.xls)|*.xls|Excel 2007(*.xlsx)|*.xlsx"; //Задаем заголовок диалогового окна. ofd.Title = "Выберите документ для загрузки данных";
После выбора файла создается новый объект «Application» или приложение «Excel», которое может содержать одну или более книг, ссылки на которые содержит свойство «Workbooks». Книги — объекты «Workbook», могут содержать одну или более страниц, ссылки на которые содержит свойство «Worksheets». Страницы – «Worksheet», могут содержать объекты ячейки или группы ячеек, ссылки на которые становятся доступными через объект «Range». Полученные данные из файла будут заноситься в таблицу «dt», созданную с использованием класса «DataTable».
ExcelObj.Application app = new ExcelObj.Application(); ExcelObj.Workbook workbook; ExcelObj.Worksheet NwSheet; ExcelObj.Range ShtRange; DataTable dt = new DataTable();
В коде присутствует проверка, что пользователь действительно выбрал файл, если данное условие выполнено, в текстовое поле с помощью свойства «FileName», класса «OpenFileDialog» помещается путь, имя и расширение выбранного файла в элемент управления «textBox1».
if (ofd.ShowDialog() == DialogResult.OK) < textBox1.Text = ofd.FileName;
Для открытия существующего документа используется метод «Open» из набора «Excel.Workbooks», в качестве основного параметра указывается путь к файлу, остальные параметры остаются пустыми.
workbook = app.Workbooks.Open(ofd.FileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
Полный список параметров метода «Open» приведен в таблице ниже.
| Имя параметра | Описание |
|---|---|
| FileNamee | Имя открываемого файла |
| UpdateLinks | Способ обновления ссылок в файле |
| ReadOnly | При значении true открытие только для чтения |
| Format | Определение формата символа разделителя |
| Password | Пароль доступа к файлу (до 15 символов) |
| WriteResPassword | Пароль на сохранение файла |
| IgnoreReadOnlyRecommended | При значении true отключается вывод запроса на работу без внесения изменений |
| Origin | Тип текстового файла |
| Delimiter | Разделитель при Format = 6 |
| Editable | Используется только для надстроек Excel 4.0 |
| Notify | При значении true имя файла добавляется в список нотификации файлов |
| Converter | Используется для передачи индекса конвертера файла используемого для открытия файла |
| AddToMRU | При true имя файла добавляется в список открытых файлов |
| Local | — |
| CorruptLoad | — |
Для доступа к листу из книги «Workbook», используется метод «Sheets.get_Item» с указанием номера листа. Нумерация листов начинается с 1.
NwSheet = (ExcelObj.Worksheet)workbook.Sheets.get_Item(1);
Чтобы получить объект Microsoft.Office.Interop.Excel.Range, который представляет все ячейки, содержащие значение на данный момент, используется свойство станицы «Worksheet.UsedRange».
ShtRange = NwSheet.UsedRange;
После получения объекта «Range», с помощью цикла «For» загружается первая строка из таблицы и каждое значение устанавливается в качестве имени колонки таблицы.
for (int Cnum = 1; Cnum
Далее таким же способом загружаются все оставшиеся строки с добавлением в таблицу.
for (int Rnum = 2; Rnum > dt.Rows.Add(dr); dt.AcceptChanges(); >
По завершении загрузки данных с указанного листа, сформированная таблица «dt» подключается к элементу управления «dataGridView1». Так же открытый объект «Application» или приложение «Excel» закрывается.
dataGridView1.DataSource = dt; app.Quit();
Полный листинг рассмотренного кода, приведен ниже, добавьте его в метод «button1_Click» компонента «button1».
OpenFileDialog ofd = new OpenFileDialog(); //Задаем расширение имени файла по умолчанию. ofd.DefaultExt = "*.xls;*.xlsx"; //Задаем строку фильтра имен файлов, которая определяет //варианты, доступные в поле "Файлы типа" диалогового //окна. ofd.Filter = "Excel Sheet(*.xlsx)|*.xlsx"; //Задаем заголовок диалогового окна. ofd.Title = "Выберите документ для загрузки данных"; ExcelObj.Application app = new ExcelObj.Application(); ExcelObj.Workbook workbook; ExcelObj.Worksheet NwSheet; ExcelObj.Range ShtRange; DataTable dt = new DataTable(); if (ofd.ShowDialog() == DialogResult.OK) < textBox1.Text = ofd.FileName; workbook = app.Workbooks.Open(ofd.FileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); //Устанавливаем номер листа из котрого будут извлекаться данные //Листы нумеруются от 1 NwSheet = (ExcelObj.Worksheet)workbook.Sheets.get_Item(1); ShtRange = NwSheet.UsedRange; for (int Cnum = 1; Cnum dt.AcceptChanges(); string[] columnNames = new String[dt.Columns.Count]; for (int i = 0; i < dt.Columns.Count; i++) < columnNames[0] = dt.Columns[i].ColumnName; >for (int Rnum = 2; Rnum > dt.Rows.Add(dr); dt.AcceptChanges(); > dataGridView1.DataSource = dt; app.Quit(); > else Application.Exit();
Пример №2
Данный пример в качестве механизма получения данных использует класс «OleDbConnection», который предоставляет открытое подключение к источнику данных. При подключении необходимо указать строку специальную строку с несколькими параметрами:
- Provider=Microsoft.ACE.OLEDB.12.0 – имя поставщика OLE DB;
- Data Source=ofd.FileName – путь к источнику данных полученный при выборе файла в диалоговом окне;
- Extended Properties='Excel 12.0 XML' – параметр расширенного подключения;
- HDR = YES — указывает, что первая строка содержит имена столбцов, а не данные. Значение «NO» свидетельствует, что лист не содержит заголовков столбцов.
Драйвер Excel считывает определенное количество строк (по умолчанию 8 строк) в указанный источник для определения типа данных каждого столбца. Если столбец содержит смешанные типы данных, особенно если числовые данные смешаны с текстовыми данными, драйвер принимает решение в пользу того типа данных, которого больше, и возвращает значения NULL в ячейки, содержащие данные другого типа. (В случае равенства преимущество получает числовой тип.) Большинство параметров форматирования ячеек в листе Excel не затрагивает это определение типа данных. Можно изменить поведение драйвера Excel, указав режим импорта. Чтобы указать режим импорта, необходимо добавить параметр IMEX=1 к значению расширенных свойств в строке соединения. В этом состоянии драйвер принудительно преобразовывает смешанные данные в текст. После составления строки подключения, устанавливается соединение с указанным файлом через класс «OleDbConnection»
System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection(constr); con.Open();
При успешном подключении к источнику данных Excel с помощью «Microsoft ADO.NET», создаётся расположенный в памяти кэш данных, с использованием класса «DataSet». Далее извлекается список таблиц метаданных с помощью метода «GetOleDbSchemaTable».
DataSet ds = new DataSet(); DataTable schemaTable = con.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] < null, null, null, "TABLE" >);

После получения таблицы с листами, получаем название первого листа, для создания sql запроса к файлу. Изменяя значение «Rows», вы изменяете, номер листа в книге, к которому будет выполнен запрос.
string sheet1 = (string)schemaTable.Rows[0].ItemArray[2]; string select = String.Format("SELECT * FROM []", sheet1);

Далее при помощи класса «OleDbDataAdapter» и его метода «Fill» данные загружаются в Dataset – «ds».
System.Data.OleDb.OleDbDataAdapter ad = new System.Data.OleDb.OleDbDataAdapter(select, con); ad.Fill(ds);
Полный листинг примера приведен ниже.
OpenFileDialog ofd = new OpenFileDialog(); ofd.DefaultExt = "*.xls;*.xlsx"; ofd.Filter = "Excel 2003(*.xls)|*.xls|Excel 2007(*.xlsx)|*.xlsx"; ofd.Title = "Выберите документ для загрузки данных"; if (ofd.ShowDialog() == DialogResult.OK) < textBox1.Text = ofd.FileName; String constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ofd.FileName + ";Extended Properties='Excel 12.0 XML;HDR=YES;';"; System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection(constr); con.Open(); DataSet ds = new DataSet(); DataTable schemaTable = con.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] < null, null, null, "TABLE" >); string sheet1 = (string)schemaTable.Rows[0].ItemArray[2]; string select = String.Format("SELECT * FROM []", sheet1); System.Data.OleDb.OleDbDataAdapter ad = new System.Data.OleDb.OleDbDataAdapter(select, con); ad.Fill(ds); DataTable tb = ds.Tables[0]; con.Close(); dataGridView1.DataSource = tb; con.Close(); > else
Пример №3
Для работы с документами также можно воспользоваться библиотеками сторонних производителей. Для примера рассмотрим библиотеку «Excel Data Reader – Read Excel files in .Net». Данный компонент вы можете скачать как с нашего сайта Rusfolder.net, так и с сайта производителя Codeplex.com.

Скачайте данный компонент и перейдите в обозреватель решений. Найдите группу «References», в которой содержатся все ссылки на внешние компоненты в проекте. Сделайте клик правой клавишей мыши по данной группе и выберете из появившегося контекстного меню, пункт «Добавить ссылку…».

Выберете группу «Обзор», данная группа позволяет вам осуществить поиск компонента в файловой системе. Нажмите на кнопку «Обзор…», расположенную в нижней части окна менеджера ссылок.

У вас откроется окно с заголовком «Выберете файлы, на которые нужно установить ссылки», перейдите в директорию со скачанными библиотеками. Данные библиотеки находятся в архиве «WinRar», распакуйте его. В папке с распакованным архивом вы увидите две директории:
- Net20 — директория содержит библиотеки необходимые при работе с .Net Framework версии от 2.0 до 4.0;
- Net45 – директория содержит библиотеки необходимые при работе с .Net Framework версии 4.5.
При создании данного проекта был выбран .Net Framework версии 3.5, поэтому переходим в директорию «Net20» и выбираем две библиотеки расположенные в ней, это «Excel.dll» и «ICSharpCode.SharpZipLib.dll». После выбора данных библиотек, нажмите на кнопку «Добавить» расположенную в нижней части данного окна.

После добавления библиотек, вы увидите их название, и путь к ним в центральной части окна менеджера ссылок. Так же напротив каждой из них будет установлена галочка, это означает, что в проект будут добавлены ссылки на обе библиотеки. В левой части окна будет выведено описание библиотек, это «Имя», «Автор» и «Версия файла». Нажмите на кнопку «ОК», расположенную в нижней части окна менеджера.

После добавления ссылок на библиотеки, у вас появится два новых пункта в обозревателе решений.

Перейдите в конструктор формы, нажав сочетание клавиш «Shift+F7». Добавьте на форму элемент управления «Button» из панели элементов и сделайте двойной клик левой клавишей мыши по нему. Вы перейдете в автоматически созданный метод «button3_Click», события компонента «Click». Добавьте приведенный ниже листинг в тело данного метода.
//http://exceldatareader.codeplex.com/ OpenFileDialog ofd = new OpenFileDialog(); ofd.DefaultExt = "*.xls;*.xlsx"; ofd.Filter = "Excel 2003(*.xls)|*.xls|Excel 2007(*.xlsx)|*.xlsx"; ofd.Title = "Выберите документ для загрузки данных"; if (ofd.ShowDialog() == DialogResult.OK) < textBox1.Text = ofd.FileName; System.IO.FileStream stream = System.IO.File.Open(ofd.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read); Excel.IExcelDataReader IEDR; int fileformat = ofd.SafeFileName.IndexOf(".xlsx"); if (fileformat >-1) < //2007 format *.xlsx IEDR = Excel.ExcelReaderFactory.CreateOpenXmlReader(stream); >else < //97-2003 format *.xls IEDR = Excel.ExcelReaderFactory.CreateBinaryReader(stream); >//Если данное значение установлено в true //то первая строка используется в качестве //заголовков для колонок IEDR.IsFirstRowAsColumnNames = true; DataSet ds = IEDR.AsDataSet(); //Устанавливаем в качестве источника данных dataset //с указанием номера таблицы. Номер таблицы указавает //на соответствующий лист в файле нумерация листов //начинается с нуля. dataGridView1.DataSource = ds.Tables[0]; IEDR.Close(); > else
В данном примере рассмотрен листинг реализующий вставку данных скопированных в буфер обмена из файла Excel. Для получения данных из буфера обмена используется класс «Clipboard» с использованием его метода «GetDataObject», который извлекает данные находящиеся в данный момент, в системном буфере обмена. Во избежание ошибок с форматом получаемых данных, используется интерфейс «IDataObject», который предоставляет не зависящий от формата, механизм передачи данных.
IDataObject dataInClipboard = Clipboard.GetDataObject(); string stringInClipboard = (string)dataInClipboard.GetData(DataFormats.Text);
Более подробно ознакомиться с классом «Clipboard», вы можете на сайте Microsoft MSDN.
Так как в буфере обмена, все данные содержаться в виде одной строки и их необходимо разбить на массив данных.

Данную задачу решает метод «String.Split». Метод возвращает строковый массив, содержащий подстроки разделенные элементами «r» — возврат каретки и «n» — перевод строки.
char[] rowSplitter = < 'r', 'n' >; string[] rowsInClipboard = stringInClipboard.Split(rowSplitter, StringSplitOptions.RemoveEmptyEntries);

Полученный массив строк содержит «t» — знак горизонтальной табуляции, который разделят значения ячеек. Для добавления столбцов с заголовками (если такая строка скопирована в буфер обмена), необходимо взять из массива первый элемент и с использованием метода «String.Split» разбить на новый массив, указав в качестве элемента разделения знак горизонтальной табуляции — «t».

Далее необходимо с помощью цикла «foreach» пройти по всему массиву и добавить новые колонки с указанием в качестве имени полученное значение.
string[] words = rowsInClipboard[0].Split('t'); foreach (string word in words) < dt.Columns.Add(word); >По такому же принципу происходит добавление строк в таблицу. for (int i = 2; i
После получения всех данных из буфера обмена и заполнения таблицы «dt», она устанавливается в качестве источника данных элементу управления «dataGridView1». Перейдите в конструктор формы, нажав сочетание клавиш «Shift+F7». Добавьте на форму компонент «Button» из панели элементов и сделайте двойной клик левой клавишей мыши по нему. Вы перейдете в автоматически созданный метод «button4_Click», события компонента «Click». Добавьте приведенный ниже полный листинг в тело данного метода.
//Переменная указывающая, использовать ли //первую строку, в качестве заголовков для //столбцов. bool IsFirstRowAsColumnNames = true; IDataObject dataInClipboard = Clipboard.GetDataObject(); string stringInClipboard = (string)dataInClipboard.GetData(DataFormats.Text); char[] rowSplitter = < 'r', 'n' >; string[] rowsInClipboard = stringInClipboard.Split(rowSplitter, StringSplitOptions.RemoveEmptyEntries); DataTable dt = new DataTable(); if (IsFirstRowAsColumnNames) < //В данном случае берется первая строка //и разделятся на отдельные части с помощью //класса Split. Данные помещаются в массив //после чего, циклом forech добавляются //заголовки столбцов string[] words = rowsInClipboard[0].Split('t'); foreach (string word in words) < dt.Columns.Add(word); >for (int i = 2; i > else < //Если в скопированных данных отсутствуют //заголовки для столбцов, то // автоматически пронумеровать их for (int colc = 1; colc for (int i = 1; i > dataGridView1.DataSource = dt;
Пример №5
Добавление данных вручную.
В первых трех примерах присутствует строка закрытия подключения к выбранному файлу. Например:
IEDR.Close(); con.Close(); app.Quit();
Данные строки кода необходимы для завершения процесса «EXCEL.EXE», каждый раз запускающегося при подключении к выбранному файлу. При отсутствии данного кода, количество процессов с каждым открытым файлом будет возрастать, что может привести к сбоям в работе операционной системы.

Вы так же можете самостоятельно рассмотреть и другие компоненты по работе с файлами Microsoft Excel, например библиотеки от «GemBoxSoftware».
Ссылка для скачивания примера: Яндекс.Диск
Ссылка для скачивания библиотеки Excel Data Reader: Яндекс.Диск
Си sharp как создать xlsx datagridview
Имеется грид с данными
dtgrid.jpg
хочу экспортировать в ексель.
Пользуюсь следующим кодом
using System; using Excel; using System.Windows.Forms; using System.IO; using System.Data; . public static void ExportDataGridViewToExcel(DataGridView sourceDataGridView) < Microsoft.Office.Interop.Excel._Application excel = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel._Workbook workbook = excel.Workbooks.Add(Type.Missing); Microsoft.Office.Interop.Excel._Worksheet worksheet = null; try < worksheet = workbook.ActiveSheet; worksheet.Name = "ExportedFromDataGrid"; int cellRowIndex = 1; int cellColumnIndex = 1; //Loop through each row and read value from each column. for (int i = -1; i < sourceDataGridView.Rows.Count - 1; i++) < for (int j = 0; j < sourceDataGridView.Columns.Count; j++) < // Excel index starts from 1,1. As first Row would have the Column headers, adding a condition check. if (cellRowIndex == 1) < worksheet.Cells[cellRowIndex, cellColumnIndex] = sourceDataGridView.Columns[j].HeaderText; >else < worksheet.Cells[cellRowIndex, cellColumnIndex] = sourceDataGridView.Rows[i].Cells[j].Value; >cellColumnIndex++; > cellColumnIndex = 1; cellRowIndex++; > //Getting the location and file name of the excel to save from user. SaveFileDialog saveDialog = new SaveFileDialog(); saveDialog.Filter = "Excel files (*.xlsx)|*.xlsx|All files (*.*)|*.*"; saveDialog.FilterIndex = 1; if (saveDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) < workbook.SaveAs(saveDialog.FileName); MessageBox.Show("Експорт завершений", "Експорт результатів", MessageBoxButtons.OK, MessageBoxIcon.Information); >> catch (System.Exception ex) < MessageBox.Show(ex.Message); >finally < excel.Quit(); workbook = null; excel = null; >>
но в екселе получаю несоответсвие
xls.jpg.
Как можно сделать експорт в ексель идентичные с гридом данные?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
| Aleksandr H. |
| Посмотреть профиль |
| Найти ещё сообщения от Aleksandr H. |