Задача экспорта и импорта данных с Microsoft Excel полезна в тех случаях, когда часть работы пользователь выполняет в электронных таблицах, а часть — в среде программирования. Это — альтернатива программированию баз данных (БД), когда пользователь, не владея технологией БД, успешно справляется с табличным процессором.
ПОСТАНОВКА ЗАДАЧИ
В программе, написанной на C#, требуется импортировать данные заданной структуры из Microsoft Excel.
РЕШЕНИЕ
Для подключения в проект необходимой библиотеки добавьте ссылку: Проект/Добавить ссылку … /Microsoft Excel 16.0 Object Library. Тогда в Обозревателе решений должны появиться вложенные закладки:
Зависимости
COM
Interop.Microsoft.Office.Core
Interop.Microsoft.Office.Interop.Excel
Платформы
Microsoft.NetCore.App
Теперь для использования библиотеки работы с Excel удобно задать ee псевдоним:
using Excel = Microsoft.Office.Interop.Excel;
Для запуска импорта данных поместим на форму элемент button1, для выбора имени файла данных — элемент OpenFileDialog1, для отображения данных — элемент listBox1.
Текст Windows-приложения (файл Form1.cs) на платформе .Net Framework приведен ниже:
using System; using System.Windows.Forms; using Excel = Microsoft.Office.Interop.Excel; namespace Excel_Import_Framework { public partial class Form1 : Form { string[,] list = new string[50, 5]; public Form1() { InitializeComponent(); } private void Button1_Click(object sender, EventArgs e) { int n = ExportExcel(); listBox1.Items.Clear(); string s; for (int i = 0; i < n; i++) // по всем строкам { s = ""; for (int j = 0; j < 5; j++) //по всем колонкам s += " | " + list[i, j]; listBox1.Items.Add(s); } } // Импорт данных из Excel-файла (не более 5 столбцов и любое количество строк <= 50. private int ExportExcel() { // Выбрать путь и имя файла в диалоговом окне OpenFileDialog ofd = new OpenFileDialog(); // Задаем расширение имени файла по умолчанию (открывается папка с программой) ofd.DefaultExt = "*.xls;*.xlsx"; // Задаем строку фильтра имен файлов, которая определяет варианты ofd.Filter = "файл Excel (Spisok.xlsx)|*.xlsx"; // Задаем заголовок диалогового окна ofd.Title = "Выберите файл базы данных"; if (!(ofd.ShowDialog() == DialogResult.OK)) // если файл БД не выбран -> Выход return 0; Excel.Application ObjWorkExcel = new Excel.Application(); Excel.Workbook ObjWorkBook = ObjWorkExcel.Workbooks.Open(ofd.FileName); Excel.Worksheet ObjWorkSheet = (Excel.Worksheet)ObjWorkBook.Sheets[1]; //получить 1-й лист var lastCell = ObjWorkSheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell);//последнюю ячейку // размеры базы int lastColumn = (int)lastCell.Column; int lastRow = (int)lastCell.Row; // Перенос в промежуточный массив класса Form1: string[,] list = new string[50, 5]; for (int j = 0; j < 5; j++) //по всем колонкам for (int i = 0; i < lastRow; i++) // по всем строкам list[i, j] = ObjWorkSheet.Cells[i + 1, j + 1].Text.ToString(); //считываем данные ObjWorkBook.Close(false, Type.Missing, Type.Missing); //закрыть не сохраняя ObjWorkExcel.Quit(); // выйти из Excel GC.Collect(); // убрать за собой return lastRow; } } }
Результат считывания одного листа Excel-книги размещается в массив list и отображается в элементе listBox1.
NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.
![]() |
![]() |
![]() |
![]() |
Большое спасибо!!! Вставила код в программу — всё работает! )))
Спасибо! Это — то, что я искал!
Только очень тормозно работает!!!
Алексей! У меня небольшой файл отображается через 1 секунду.