Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
6 / 6 / 3
Регистрация: 29.08.2016
Сообщений: 107
1

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

13.02.2018, 15:46. Показов 2405. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго дня. Заранее извиняюсь если окажется, что тема дублируется.

подскажите решение на такой вопрос, у меня на форме есть 2 DGV и есть Excel файл в котором заполнено 2 листа.

мне необходимо при импортировать данные срази из двух листов файла Excel в два разных DGV на форме.

пока у меня получилось сделать только с одного листа:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//Выполняем выгрузку в ДГВ данных из выбранного файла эксель
                OpenFileDialog opf = new OpenFileDialog();
                opf.Filter = "Excel File(*.xlsx;*.xls)|*.xlsx;*.xls|All Files(*.*)|*.*";
                opf.ShowDialog();
                DataTable tb = new DataTable();
                string filename = opf.FileName;
                string ConStr = String.Format("Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0}; Extended Properties=Excel 12.0;", filename);
                System.Data.DataSet ds = new System.Data.DataSet("EXCEL");
                OleDbConnection cn = new OleDbConnection(ConStr);
                cn.Open();
                DataTable schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                string sheet1 = (string)schemaTable.Rows[0].ItemArray[2];
                string select = String.Format("SELECT * FROM [{0}]", sheet1);
                OleDbDataAdapter ad = new OleDbDataAdapter(select, cn);
                ad.Fill(ds);
                tb = ds.Tables[0];
                cn.Close();
                dataGridView1.DataSource = tb;
Подскажите кто может. очень нужно реализовать данную задачу.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.02.2018, 15:46
Ответы с готовыми решениями:

Импорт из excel нескольких листов
Здравствуйте не могу найти возможность выгрузки таблиц нескольких листов из excel в access в...

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

Импорт данных из excel в DataGridView
Здравствуйте, нужна Ваша помощь. Необходимо организовать импорт данных их Excel в datagridview c#....

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

10
20 / 35 / 14
Регистрация: 08.10.2015
Сообщений: 406
14.02.2018, 14:36 2
AlekseyS_35, ну я бы завела для второго листа второй Datatable
C#
1
2
tring sheet2 = (string)schemaTable.Rows[1].ItemArray[2];  //лист2
string select2 = String.Format("SELECT * FROM [{0}]", sheet2);
0
6 / 6 / 3
Регистрация: 29.08.2016
Сообщений: 107
14.02.2018, 14:44  [ТС] 3
Цитата Сообщение от Aumi Посмотреть сообщение
C#
1
2
string sheet2 = (string)schemaTable.Rows[1].ItemArray[2]; //лист2
string select2 = String.Format("SELECT * FROM [{0}]", sheet2);
при попытке применить данные строки у меня во второй datagridview происходит отгрузка тех же данных. что и в первый.?
0
20 / 35 / 14
Регистрация: 08.10.2015
Сообщений: 406
14.02.2018, 15:10 4
AlekseyS_35,
C#
1
2
3
4
5
 OleDbDataAdapter ad2 = new OleDbDataAdapter(select2, cn);
                ad2.Fill(ds2);
                tb2 = ds2.Tables[0];
                cn.Close();
                dataGridView2.DataSource = tb2;
Здесь вы меняли код? Как бы код тот же самый, но элементы второй раз создаются. Поэтому второй DGW будет брать данные из DataTable2
0
6 / 6 / 3
Регистрация: 29.08.2016
Сообщений: 107
14.02.2018, 17:46  [ТС] 5
Цитата Сообщение от Aumi Посмотреть сообщение
C#
1
2
3
4
5
OleDbDataAdapter ad2 = new OleDbDataAdapter(select2, cn);
 ad2.Fill(ds2);
 tb2 = ds2.Tables[0];
 cn.Close();
 dataGridView2.DataSource = tb2;
Здесь вы меняли код? Как бы код тот же самый, но элементы второй раз создаются. Поэтому второй DGW будет брать данные из DataTable2
да менял но все равно почему то в разные DGV отгрузка происходит с первого листа

вот код: подскажите что делаю не так.

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
            //Выполняем выгрузку в ДГВ данных из выбранного файла эксель
            OpenFileDialog opf = new OpenFileDialog();
            opf.Filter = "Excel File(*.xlsx;*.xls)|*.xlsx;*.xls|All Files(*.*)|*.*";
            opf.ShowDialog();
            DataTable tb = new DataTable();
            DataTable tb2 = new DataTable();
            string filename = opf.FileName;
            string ConStr = String.Format("Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0}; Extended Properties=Excel 12.0;", filename);
            System.Data.DataSet ds = new System.Data.DataSet("EXCEL");
            OleDbConnection cn = new OleDbConnection(ConStr);
            cn.Open();
            DataTable schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
            string sheet1 = (string)schemaTable.Rows[0].ItemArray[2];//выгрузка с листа 1
            string select = String.Format("SELECT * FROM [{0}]", sheet1);
            OleDbDataAdapter ad = new OleDbDataAdapter(select, cn);
            ad.Fill(ds);
            tb = ds.Tables[0];
            dataGridView1.DataSource = tb;
            string sheet2 = (string)schemaTable.Rows[1].ItemArray[2];//выгрузка с листа 2
            string select2 = String.Format("SELECT * FROM [{0}]", sheet2);
            OleDbDataAdapter ad2 = new OleDbDataAdapter(select2, cn);
            ad2.Fill(ds);
            tb2 = ds.Tables[0];
            cn.Close();
            dataGridView2.DataSource = tb2;
0
20 / 35 / 14
Регистрация: 08.10.2015
Сообщений: 406
14.02.2018, 18:18 6
C#
1
2
ad2.Fill(ds); //в этом месте ошибка 
            tb2 = ds.Tables[0]; // и здесь
нужно второй ds завести. А так получается,, что во второй datatable вы пишете первый dataset
0
6 / 6 / 3
Регистрация: 29.08.2016
Сообщений: 107
15.02.2018, 13:04  [ТС] 7
Если я правильно понимаю то код для выгрузки со второго листа должен выглядеть так.
C#
1
2
3
4
5
6
7
8
9
            DataTable tb2 = new DataTable();
            System.Data.DataSet ds2 = new System.Data.DataSet("EXCEL");
            string sheet2 = (string)schemaTable.Rows[1].ItemArray[2]; //лист2
            string select2 = String.Format("SELECT * FROM [{0}]", sheet2);
            OleDbDataAdapter ad2 = new OleDbDataAdapter(select2, cn);
            ad2.Fill(ds2);
            tb2 = ds2.Tables[0];
            cn.Close();
            dataGridView2.DataSource = tb2;
Однако если я его применяю то почему то все равно вставка ко второй dataGridView2 происходит с первого листа.

полный код:

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
            //Выполняем выгрузку в ДГВ данных из выбранного файла эксель
            OpenFileDialog opf = new OpenFileDialog();
            opf.Filter = "Excel File(*.xlsx;*.xls)|*.xlsx;*.xls|All Files(*.*)|*.*";
            opf.ShowDialog();
            DataTable tb = new DataTable();
            string filename = opf.FileName;
            string ConStr = String.Format("Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0}; Extended Properties=Excel 12.0;", filename);
            System.Data.DataSet ds = new System.Data.DataSet("EXCEL");
            OleDbConnection cn = new OleDbConnection(ConStr);
            cn.Open();
            DataTable schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
            string sheet1 = (string)schemaTable.Rows[0].ItemArray[2];//выгрузка с листа 1
            string select = String.Format("SELECT * FROM [{0}]", sheet1);
            OleDbDataAdapter ad = new OleDbDataAdapter(select, cn);
            ad.Fill(ds);
            tb = ds.Tables[0];
            cn.Close();
            dataGridView1.DataSource = tb;
 
            DataTable tb2 = new DataTable();
            System.Data.DataSet ds2 = new System.Data.DataSet("EXCEL");
            string sheet2 = (string)schemaTable.Rows[1].ItemArray[2]; //лист2
            string select2 = String.Format("SELECT * FROM [{0}]", sheet2);
            OleDbDataAdapter ad2 = new OleDbDataAdapter(select2, cn);
 
            ad2.Fill(ds2);
            tb2 = ds2.Tables[0];
            cn.Close();
            dataGridView2.DataSource = tb2;
0
6 / 6 / 3
Регистрация: 29.08.2016
Сообщений: 107
15.02.2018, 13:11  [ТС] 8
прикладываю скрин.
Миниатюры
Импорт данных из нескольких листов Excel в DataGridView  
0
20 / 35 / 14
Регистрация: 08.10.2015
Сообщений: 406
15.02.2018, 13:50 9
AlekseyS_35,
Вот код. Я его только что проверила и он работает

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
       private void simpleButton11_Click(object sender, EventArgs e)
        {
            String constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
                             "C:\\Users\\Documents\\тест импорта и экспорта данных\\AllAll\\test.xlsx" +
                             ";Extended Properties='Excel 12.0 XML;HDR=no;IMEX=1';";// я поставил "hdr = no" так как 1я строка в экселе у меня не содержит наименования столбцов
            OleDbConnection connectionExcel = new OleDbConnection(constr);
            connectionExcel.Open();
 
            DataTable schemaTable = connectionExcel.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables,
                new object[] { null, null, null, "TABLE" });
 
         
            string sheet1 = (string)schemaTable.Rows[0].ItemArray[2];  //лист2
            string select = String.Format("SELECT * FROM [{0}]", sheet1); 
            OleDbDataAdapter adapterExcel = new OleDbDataAdapter(select, connectionExcel);
            DataTable tableExcel = new DataTable();//таблица которая заполнится данными из экселевского файла
 
            adapterExcel.Fill(tableExcel);
           
            
            dataGridView1.DataSource = tableExcel;
 
 
 
            string sheet2 = (string)schemaTable.Rows[1].ItemArray[2];  //лист1
            string select2 = String.Format("SELECT * FROM [{0}]", sheet2);
            OleDbDataAdapter adapterExcel2 = new OleDbDataAdapter(select2, connectionExcel);
            DataTable tableExcel2 = new DataTable();//таблица которая заполнится данными из экселевского файла
 
            adapterExcel2.Fill(tableExcel2);
 
 
            dataGridView2.DataSource = tableExcel2;
 
 
            connectionExcel.Close();
 
        }
1
6 / 6 / 3
Регистрация: 29.08.2016
Сообщений: 107
15.02.2018, 15:10  [ТС] 10
Цитата Сообщение от Aumi Посмотреть сообщение
Вот код. Я его только что проверила и он работает
Спасибо за помощь.

можете подсказать как при импорте данных в DGV автоматически подсчитать данные в определенном столбце с условием и вывести результат предположим в другую таблицу?

возможно ли как-то решить данную задачу.

Добавлено через 23 минуты
Дополню свой вопрос.

если к примеру во втором указано ФИО менеджера а в третьем столбце указано название Компании, то необходимо по подсчитать сколько компаний ведёт тот или иной менеджер.
0
20 / 35 / 14
Регистрация: 08.10.2015
Сообщений: 406
16.02.2018, 13:20 11
Цитата Сообщение от AlekseyS_35 Посмотреть сообщение
подсчитать данные в определенном столбце
Написать запрос что нибудь похожее на это
Цитата Сообщение от Aumi Посмотреть сообщение
string select2 = String.Format("SELECT count(*) FROM [{0}]", sheet2);
0
16.02.2018, 13:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.02.2018, 13:20
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru