Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
8 / 12 / 2
Регистрация: 25.12.2017
Сообщений: 280

Импорт данных из листов Excel в несколько DataGridView для каждого листа

17.10.2021, 10:54. Показов 1053. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Подключил библиотеку Microsoft.Office.Interop.Excel. Возникла задача - есть файл Excel .xlsx с 6 таблицами. Нужно подключить XLSX к DataGridView, но так, чтобы каждому листу файла XLSX соответствовала своя DataGridView - выгрузить файл, и его листы отдельно в каждую таблицу. То есть, подразумевается работа с хранилищем данных - 6 листов в файле, и на каждый 6 сеток. Как это можно сделать лучше всего?

Дальше полагается, после выгрузки 6 листов файла в 6 сеток, далее вставка/изменение/поиск/удаление прямо в сетке с сохранением в файл.


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

Заранее благодарю за помощь, да и другим людям может быть полезно, так как тема на несколько листов и для каждого своя таблица - встречается редко.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.10.2021, 10:54
Ответы с готовыми решениями:

Импорт данных из нескольких листов Excel в DataGridView
Всем доброго дня. Заранее извиняюсь если окажется, что тема дублируется. подскажите решение на такой вопрос, у меня на форме есть 2...

Копирование данных с одного листа на несколько других листов
В общем, есть код который должен копировать данные из одного листа на несколько других листов. Вот он: Sub CopyToOtherSheet() Dim WS As...

Импорт данных из excel в DataGridView
Здравствуйте только начал изучать Vb, как подключится к excel и перенести таблицу в vb точнее в DataGridView

13
fly
 Аватар для I can
4951 / 4635 / 844
Регистрация: 13.04.2015
Сообщений: 9,826
17.10.2021, 10:59
Цитата Сообщение от Jim Reinor Посмотреть сообщение
для каждого своя таблица - встречается редко.
Потому что не надо так делать. Вы же не будете смотреть все таблицы сразу?
0
8 / 12 / 2
Регистрация: 25.12.2017
Сообщений: 280
17.10.2021, 11:08  [ТС]
Цитата Сообщение от I can Посмотреть сообщение
Потому что не надо так делать. Вы же не будете смотреть все таблицы сразу?
В шаблоне программы - 6 вкладок TabControl, в каждом DataGridView для данных с каждого листа файла XLSX. Как-то так, если задача вообще реализуема.

Добавлено через 4 минуты
Это что-то вроде БД без связей, чтобы просто программа при переносе на другие компьютеры таскала с собой файл-справочник с таблицами на листах, и открывала каждый лист в отдельной сетке.
0
fly
 Аватар для I can
4951 / 4635 / 844
Регистрация: 13.04.2015
Сообщений: 9,826
17.10.2021, 11:10
Цитата Сообщение от Jim Reinor Посмотреть сообщение
Как-то так, если задача вообще реализуема
Да это несложно сделать, но сам подход не совсем правильный, на мой взгляд.

Добавлено через 1 минуту
Цитата Сообщение от Jim Reinor Посмотреть сообщение
чтобы просто таскать с собой файл с таблицами на листах и открывать их в разных сетках
А зачем тогда программа нужна? Встроенные инструменты Экселя очень мощные.
0
8 / 12 / 2
Регистрация: 25.12.2017
Сообщений: 280
17.10.2021, 11:14  [ТС]
Цитата Сообщение от I can Посмотреть сообщение
Да это несложно сделать, но сам подход не совсем правильный, на мой взгляд.
Хорошо бы попробовать. Такое уж экзотическое требование. Файл не нужно искать через OpenFileDialog, у него одно постоянное имя и он сам открывается при запуске программы.
Загрузить листы файла в несколько таблиц на вкладках, и там обрабатывать информацию и сохранять изменения.

В статьях большинство примеров написаны заумно, и сделаны под другие требования, и они мне не подошли, даже для теста. Хотелось бы что-то маленькое и по частям.

Добавлено через 2 минуты
Цитата Сообщение от I can Посмотреть сообщение
А зачем тогда программа нужна? Встроенные инструменты Экселя очень мощные.
Назначение программы - занести в таблицу данные об оборудовании, сотрудниках, дефектах, заявках, и еще 2 категории, и работать с ними - добавлять/удалять/искать/изменять, и открыть категории (листы файла XLSX) в нескольких сетках DataGridView для каждого листа. Программа должна будет в итоге отсылать выбранную строку данных через меню, сотрудникам через телефон и майл, но это уже позднее.
0
fly
 Аватар для I can
4951 / 4635 / 844
Регистрация: 13.04.2015
Сообщений: 9,826
17.10.2021, 11:26
Цитата Сообщение от Jim Reinor Посмотреть сообщение
Файл не нужно искать через OpenFileDialog
Да это как раз самое простое.
Сложность может быть в том, что таблица Эксель может содержать формулы, объединённые ячейки, разное форматирование, гиперссылки, связи и т.п. фичи.
0
8 / 12 / 2
Регистрация: 25.12.2017
Сообщений: 280
17.10.2021, 11:28  [ТС]
Цитата Сообщение от I can Посмотреть сообщение
Да это как раз самое простое.
Сложность может быть в том, что таблица Эксель может содержать формулы, объединённые ячейки, разное форматирование, гиперссылки, связи и т.п. фичи.
В моем случае во всех листах таблица содержит только текст, наборы цифр (коды оборудования) и даты, и ничего более. Формул, объединенных ячеек, форматирования и гиперссылок со связями и др. нет.

Имя файла постоянное, и надо его подгружать вместе с запуском программы - 6 листов появятся в 6 отдельных таблицах программы.

Аналогично, как в базах данных - таблицы грузятся в несколько ячеек, только тут простой файл с листами, в которых таблицы, которые надо загрузить по сеткам.
БД просто так не потаскать с собой, потому что надо на компах наличие СУБД, а она есть только на моем, и на другом его нет. Потому так как тут справочник, и связей между таблицами нет вовсе, тут выгоднее чтобы программа таскала с собой файл с листами ( в них таблицы)
0
fly
 Аватар для I can
4951 / 4635 / 844
Регистрация: 13.04.2015
Сообщений: 9,826
17.10.2021, 11:32
Цитата Сообщение от Jim Reinor Посмотреть сообщение
надо его подгружать вместе с запуском программы.
Вы, надеюсь, понимаете, что данные из файла подгружаются в оперативную память, а DGV нужен просто для отображения?
Какой смысл отображать сразу все шесть листов в таком случае, хоть даже это сделать очень просто?
0
8 / 12 / 2
Регистрация: 25.12.2017
Сообщений: 280
17.10.2021, 11:41  [ТС]
Цитата Сообщение от I can Посмотреть сообщение
Вы, надеюсь, понимаете, что данные из файла подгружаются в оперативную память, а DGV нужен просто для отображения?
Какой смысл отображать сразу все шесть листов в таком случае, хоть даже это сделать очень просто?
Думаю, я понимаю и знаю, на что иду.

Главное в проекте - подгрузить файл с постоянным названием с запуском программы, отобразить его шесть листов на 6 DGV на 6 вкладках TabControl, отредактировать данные в DGV (вставить/удалить/изменить/удалить/найти) и сохранить внесенные изменения в DGV в XLSX файл. И далее по новой обработать через программу, когда сведения изменятся.

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

Тут отличие только в том, что сначала решение строилось на БД без связей в виде справочника, но потом выяснилось, что лучше таскать простой файл с таблицами, к обработке которого прикрутить дополнительные опции.

Добавлено через 3 минуты
В справочных системах автоматизации работа с сетками сплошь и рядом практикуется, и данные редактируются через дополнительные меню.
0
 Аватар для Andrey-MSK
3349 / 2235 / 388
Регистрация: 14.08.2018
Сообщений: 7,557
Записей в блоге: 4
18.10.2021, 09:33
Цитата Сообщение от Jim Reinor Посмотреть сообщение
Microsoft.Office.Interop.Excel
зачем вам Interop для показа справочника?
Используйте ADO .NET. Строка подключения для Excel:
XML
1
2
3
4
    <add name="ExcelXLSConnect"
         connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;'"/>
    <add name="ExcelXLSXConnect"
         connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0 Xml;HDR=Yes;'"/>
Добавлено через 2 минуты
И примерно вот такой BaseDA для SQL и Excel
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System.Configuration;
using System.IO;
 
namespace MEFCFDAL.DataAccess
{
    public class BaseSQLDA
    {
        protected static readonly string _connectionString = ConfigurationManager.ConnectionStrings["SQLConnect"].ConnectionString;
 
        protected static string GetExcelConnectionString(string pathToFile)
        {
            string extension = Path.GetExtension(pathToFile);
            string excelConString = string.Empty;
 
            switch (extension)
            {
                case ".xls":
                    excelConString = ConfigurationManager.ConnectionStrings["ExcelXLSConnect"].ConnectionString;
                    break;
                case ".xlsx":
                    excelConString = ConfigurationManager.ConnectionStrings["ExcelXLSXConnect"].ConnectionString;
                    break;
            }
 
            return string.Format(excelConString, pathToFile);
        }
    }
}
0
74 / 48 / 27
Регистрация: 25.03.2014
Сообщений: 357
Записей в блоге: 1
18.10.2021, 11:35
Скажите а вы с одного листа можете выгрузить данные? Если да то что мешает сделать перебор всех листов экселя, т.е. импортировали 1 лист, потом второй и т.д. например как я делал только у меня запись в эксель:
C#
1
2
3
4
5
6
7
8
9
10
          
//где то узнаете количество листов в книге(мне знать сколько листов не нужно 
//поэтому в моем массиве не количество страниц)
   for (int generalindexmassiv = 0; generalindexmassiv < massiv.Length; generalindexmassiv++)
                {
                    workSheet = (Excel.Worksheet)workBook.Worksheets.get_Item(generalindexmassiv);
 
                   //... остальной код в котором в вашем случае вы делаете импорт на форму
}
//закрыли книгу
0
 Аватар для Andrey-MSK
3349 / 2235 / 388
Регистрация: 14.08.2018
Сообщений: 7,557
Записей в блоге: 4
18.10.2021, 11:43
Jim Reinor, забыл сам запрос для Excel показать
C#
1
2
3
string excelQuery = string.Format("SELECT {0} AS ID_DrawSys, SpecPos, KKS, Oboznachenie, Naimenovanie, " +
    "Kolvo, KolvoIzg, EdIzm, Material, VesEd " +
    "FROM [tblDrawSpec$]", idDrawSys);
Вот это [tblDrawSpec$] - название листа в книге Excel.
0
74 / 48 / 27
Регистрация: 25.03.2014
Сообщений: 357
Записей в блоге: 1
18.10.2021, 13:38
Вот так если через Microsoft.Office.Interop.Excel

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
  private void button1_Click(object sender, EventArgs e)
        {
 
            string filename = Path.GetFullPath("bok123.xlsx");
            string str;
            int rCnt;
            int cCnt;
            Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel._Workbook ExcelWorkBook;
            Microsoft.Office.Interop.Excel.Worksheet ExcelWorkSheet;
            Microsoft.Office.Interop.Excel.Range ExcelRange;
 
            ExcelWorkBook = ExcelApp.Workbooks.Open(filename, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false,
                false, 0, true, 1, 0);
 
            int sheetcount = ExcelWorkBook.Sheets.Count;
            for (int i = 0; i < sheetcount && i < tabControl1.Controls.Count; i++)
            {
                ExcelWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ExcelWorkBook.Worksheets.get_Item(i + 1);
                //tabControl1.SelectedIndex = i;
                  ExcelRange = ExcelWorkSheet.UsedRange;
                int colCount = ExcelRange.Columns.Count; //размер колонок
                int rowCount = ExcelRange.Rows.Count;// размер строк
                for (rCnt = 1; rCnt <= rowCount; rCnt++)
                {
 
                    ((DataGridView)this.tabControl1.TabPages[i].Controls[0]).Rows.Add(1);
                    for (cCnt = 1; cCnt <= colCount; cCnt++)
                    {
                        ((DataGridView)this.tabControl1.TabPages[i].Controls[0]).Rows[rCnt - 1].Cells[cCnt - 1].Value = (ExcelRange.Cells[rCnt, cCnt] as Microsoft.Office.Interop.Excel.Range).Value;
                    }
                }
            }
            ExcelWorkBook.Close(true, null, null);
            ExcelApp.Quit();
 
 
 
            GC.WaitForPendingFinalizers();
            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
        }
0
8 / 12 / 2
Регистрация: 25.12.2017
Сообщений: 280
18.10.2021, 14:31  [ТС]
Для меня эта тема уже не актуальна, после того, как в воскресенье вечерком разобрался с подключением БД в обход критической ошибки несовместимости и выводами данных в таблицу)

Однако все еще может помочь тем, кто захочет реализовать именно так - таскать файл с таблицами в Excel, и каждый лист грузить в каждую отдельную сетку)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.10.2021, 14:31
Помогаю со студенческими работами здесь

Импорт данных из Excel в DataGridView
Всем доброго дня! После обновления Windows 7, при импорте данных из Excel в DGV столкнулся с такой проблемой, не происходит выгрузка...

Импорт данных из Excel в DataGridView
Нужно импортировать данные из файла в грид, а затем добавить в БД. То бишь пользователь загружает что-то из эксельки в грид, проверяет еще...

Импорт данных из Excel в DataGridView
Здравствуйте, дорогие форумчане. Столкнулся с проблемой по импорту данных в VB 2010. На самом деле статей очень много и все они полезные,...

Импорт данных из Excel в DataGridView
Здравствуйте! Мне нужно извлечь данных из excel. У меня возникла ошибка. Как ее исправить, почему выдается ошибка? Спасибо! using...

Импорт данных из Excel в DataGridView
Всем привет! Вот код, который загружает данные из Excel в DataGridView Dim MyConnection As System.Data.OleDb.OleDbConnection ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru