Привет, всем! Облазил вроде весь интернет, и не могу найти решение следующего примера:
Считываем из файла Excel таблицу с данными. После считывания, получаем объект таблицы dt типа DataTable. Теперь нужно выбрать нужные нам колонки , например колонка с ID, колонка с Названием, ценой и тд... И записать их в новую таблицу, например dt1.
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
71
72
73
74
75
76
77
78
79
80
81
| //Создаем объект таблицы
DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
private void button2_Click(object sender, EventArgs e)
{
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.
DataSet ds = new DataSet();
//С помощью метода GetOleDbSchemaTable извлекается список таблиц
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 [{0}]", sheet1); //Запрос Выбрать все из нулевого листа.
//Далее при помощи класса «OleDbDataAdapter» и его метода «Fill» данные загружаются в DataSet – «ds».
System.Data.OleDb.OleDbDataAdapter ad =
new System.Data.OleDb.OleDbDataAdapter(select, con);
//данные загружаем в DataSet
ad.Fill(ds);
DataTable dt = new DataTable();
//В таблицу считываем данные первого листа, нумерация начинается с 0
dt = ds.Tables[0];
dt1 = ds.Tables[0];
//закрываем соединение с источником данных
con.Close();
//Данные выводим из таблицы в DataGridView
dataGridView1.DataSource = dt;
//закрываем соединение с источником данных непонятно зачем???
con.Close();
}
else
{
MessageBox.Show("Вы не выбрали файл для открытия",
"Загрузка данных...", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
private void button1_Click(object sender, EventArgs e)
{
var firstArray = dt1.Rows.Cast<DataRow>().Select(x => x.ItemArray[0]); //читаем в массив нулевую колонку
var secondArray = dt1.Rows.Cast<DataRow>().Select(x => x.ItemArray[1]);//читаем в массив 1 колонку
var productIdColumn = dt1.Rows.Cast<DataRow>().Select(x => x.ItemArray[2]); /**/
/////////////////////////////////////////////////////////////////////
// Тут нужно полученные массивы с колонками поместить в таблицу
// и затем значения вывестив dataGridView2
//////////////////////////////////////////////////////////////////////
dataGridView2.DataSource = dt2;
} |
|