powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как извлечь данные из Excel в datagridview по двум условиям?
7 сообщений из 7, страница 1 из 1
Как извлечь данные из Excel в datagridview по двум условиям?
    #39325675
Sof159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИМЕЕТСЯ
База данных в Ексель
База данных строки - 10 000 шт;
столбцы - 10 шт;

ВОПРОС
1. Каким способом оптимально извлечь из Ексель данные по двум условиям в три разные datagridview ?
2. Извлекаются следующие столбцы таблицы:
- ID
- наименование
- кол 
3. Таблица извлекается с заголовками столбцов (по возможности);

КОД
Код: 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.
44.
45.
46.
47.
48.
49.
50.
51.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OleDbConnection connection = new OleDbConnection(String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=NO\";", textBox1.Text));

            connection.Open();
            OleDbCommand command = new OleDbCommand("SELECT * FROM [Лист1$]", connection);
            OleDbDataReader reader = command.ExecuteReader();
            dataGridView1.Columns.Add("1", "1");
            dataGridView2.Columns.Add("1", "1");
            dataGridView3.Columns.Add("1", "1");
            while (reader.Read())
            {
                if (reader[0].ToString() == textBox2.Text)
                {
                    if (Convert.ToInt32(reader[1]) > 10 && Convert.ToInt32(reader[1]) < 14) dataGridView1.Rows.Add(reader[1].ToString());
                    if (Convert.ToInt32(reader[1]) > 20 && Convert.ToInt32(reader[1]) < 24) dataGridView2.Rows.Add(reader[1].ToString());
                    if (Convert.ToInt32(reader[1]) > 30 && Convert.ToInt32(reader[1]) < 34) dataGridView3.Rows.Add(reader[1].ToString());
                }
            }
            connection.Dispose();
        }

        private void textBox1_DoubleClick(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "Excel 2003(*.xls)|*.xls|Excel 2007(*.xlsx)|*.xlsx";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = openFileDialog1.FileName;
            }
        }
    }
}



СЦЕНАРИЙ
1. Вносим ID задания.
2. Вносим путь к файлу.
3. Нажимаем кнопку "ИЗВЛЕЧЬ".
4. Данные извлекаются в зависимости от "ID" и "порядковый номер" в соответствующую datagridview.

ПРИЛОЖЕНИЕ
1. Проект.
2. Скрин
...
Рейтинг: 0 / 0
Как извлечь данные из Excel в datagridview по двум условиям?
    #39325692
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sof159, загрузить все в DataTable , создать для три DateView

Чтоб с заголовками - нужно их попросить HDR=Yes
Ну и гугл в помощь - http://www.aspsnippets.com/Articles/Read-and-Import-Excel-Sheet-using-ADO.Net-and-C.aspx
...
Рейтинг: 0 / 0
Как извлечь данные из Excel в datagridview по двум условиям?
    #39325702
Sof159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buser,

Перепробовал несколько способов... Что-то не получается. Выдаёт постоянно ошибки..

Если не сложно, можно на примере этого кода показать как нужно?
Или может другие способы есть...

PS
Пока только осваиваю C#... Прошу прощения если вопросы будут некорректны...
...
Рейтинг: 0 / 0
Как извлечь данные из Excel в datagridview по двум условиям?
    #39326153
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sof159, и где эти ошибки?
...
Рейтинг: 0 / 0
Как извлечь данные из Excel в datagridview по двум условиям?
    #39326424
Sof159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buser,
Если рассмотреть решение на базе данного кода.
К примеру, как правильно разместить строки, чтобы в "dataGridView1" отобразилось три столбца из таблицы?
Строки прилагаю
Код: c#
1.
2.
3.
dataGridView1.Rows[0].Cells[0].Value = reader[1].ToString();
dataGridView1.Rows[0].Cells[1].Value = reader[2].ToString();
dataGridView1.Rows[0].Cells[2].Value = reader[3].ToString();




Честно говоря, ошибки уже не помню... Голова кругом
...
Рейтинг: 0 / 0
Как извлечь данные из Excel в datagridview по двум условиям?
    #39326498
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sof159, по мотивам этой ссылки и приведенных ранее:
Код: 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.
44.
45.
46.
47.
48.
49.
    class Program
    {

        private const string cnntemplate = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0 Xml;HDR=YES';";

        private static DataTable GetData(string path)
        {
            using (OleDbConnection connection = new OleDbConnection(String.Format(cnntemplate, Path.GetFullPath(path))))
            {

                connection.Open();

                DataTable dtExcelSchema;

                dtExcelSchema = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

                string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();

                OleDbCommand cmdExcel = new OleDbCommand("SELECT * From [" + SheetName + "]", connection);

                using (OleDbDataAdapter da = new OleDbDataAdapter(cmdExcel))
                {
                    DataTable dt = new DataTable("MyData");

                    da.Fill(dt);

                    return dt;                
                }

            }        
        }

        static void Main(string[] args)
        {

            string path = @".\test.xlsx";

            var dt = GetData(path);

            var nums = new List<double> { 1, 2, 3 }; /* double - просто тестил на соби */

            EnumerableRowCollection<DataRow> query = dt.AsEnumerable().Where(row => nums.Contains(row.Field<double>("порядковый номер")));

            // bind query.AsDataView();

            var view = query.AsDataView();

        }
    }



P.S.: все остальное найдете в msdn и гуглах.
...
Рейтинг: 0 / 0
Как извлечь данные из Excel в datagridview по двум условиям?
    #39333381
Sof159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buser, спасибо за код.

Код проработал, но в упор не могу понять как разместить в WindowsForms .

ВОПРОСЫ
1. Не могли бы вы ещё подсказать как реализовать задачу обозначенную в моём первом посте?
2. Правильно ли я разместил код для работы в WindowsForms ?
3. Строка:
Код: c#
1.
DataTable dt = new DataTable("MyData");


в место "MyData" нужно что-то подставлять, если у меня просто таблица в Ексель, а не база данных?


4. Строка:
Код: c#
1.
string path = @".\test.xlsx";


Относительно какой папки ".\test.xlsx" указывается относительный путь?
Т.е. в какой папке необходимо разместить файл "test.xlsx"?



ПРИЛОЖЕНИЕ.
1. Код

Код: 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.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

// ИЗМ1 по замечаниям программы;
using System.Data.OleDb;
using System.IO;

namespace _19778688_buser_PR
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private const string cnntemplate = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0 Xml;HDR=NO';";

        // private const string cnntemplate = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0 Xml;HDR=YES';"; - исходная строка
        // OleDbConnection connection = new OleDbConnection(String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=NO\";", textBox1.Text));

        private static DataTable GetData(string path)
        {
            using (OleDbConnection connection = new OleDbConnection(String.Format(cnntemplate, Path.GetFullPath(path))))
            {
                connection.Open();

                DataTable dtExcelSchema;

                dtExcelSchema = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

                string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();

                OleDbCommand cmdExcel = new OleDbCommand("SELECT * From [Лист1$]", connection);

                using (OleDbDataAdapter da = new OleDbDataAdapter(cmdExcel))
                {
                    DataTable dt = new DataTable("MyData");
                    da.Fill(dt);
                    return dt;
                }

            }
        }       

        private void button1_Click(object sender, EventArgs e)
        {
            string path = @"c:\Users\admin\Documents\Visual Studio 2015\Projects\VPR\db\1.xlsx";
            // string path = @".\test.xlsx"; // исходный вариант строки

            var dt = GetData(path);

            var nums = new List<double> { 1, 2, 3 }; /* double - просто тестил на соби */

            EnumerableRowCollection<DataRow> query = dt.AsEnumerable().Where(row => nums.Contains(row.Field<double>("порядковый номер")));

            // bind query.AsDataView();

            var view = query.AsDataView();
                        
        }                
    }
}

...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как извлечь данные из Excel в datagridview по двум условиям?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]