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

Положить два DataTable в один Excel на разные листы

06.08.2018, 19:23. Показов 995. Ответов 12

Author24 — интернет-сервис помощи студентам
Всем привет.
Нужно при нажатие на кнопку. Положить два datatable в один 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
44
45
46
47
48
49
 private DataTable GetData()
        {
 
            //строка соединения
            string connString = @"Data Source=msk";
            SqlConnection con = new SqlConnection(connString);
            DataTable dt = new DataTable();
            string connString1 = @"Data Source=msk";
            SqlConnection con1 = new SqlConnection(connString1);
            DataTable dt1 = new DataTable();
 
        
 
            try
            {
                string query = @"select distinct * from ТМ";
                SqlCommand comm = new SqlCommand(query, con);
                con.Open();
                SqlDataAdapter da = new SqlDataAdapter(comm);
                DataSet ds = new DataSet();
                da.Fill(ds);
                dt = ds.Tables[0];
 
                string query1 = @"select distinct * FROM TM2";
                SqlCommand comm1 = new SqlCommand(query1, con1);
                con1.Open();
                SqlDataAdapter da1 = new SqlDataAdapter(comm1);
                DataSet ds1 = new DataSet();
                da1.Fill(ds1);
                dt1 = ds1.Tables[0];
 
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
 
                  
 
            finally
            {
               
                con.Close();
                con.Dispose();
        
          
            }
 
            return dt;

Выгружаю данные

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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
private void button1_Click(object sender, EventArgs e)
 
        {
 
 
 
 
 
 
 
            xlApp = new Excel.Application();
 
 
 
            try
 
            {
 
                //добавляем книгу
 
                xlApp.Workbooks.Add(Type.Missing);
 
 
 
                //делаем временно неактивным документ
 
                xlApp.Interactive = false;
 
                xlApp.EnableEvents = false;
 
 
 
                //выбираем лист на котором будем работать (Лист 1)
 
                xlSheet = (Excel.Worksheet)xlApp.Sheets[1];
 
 
 
                //Название листа
 
                xlSheet.Name = "лИСТ 1";
 
 
 
                //Выгрузка данных
 
                DataTable dt = GetData();
 
 
 
                int collInd = 0;
 
                int rowInd = 0;
 
                string data = "";
 
 
 
                //называем колонки
 
                for (int i = 0; i < dt.Columns.Count; i++)
 
                {
 
                    data = dt.Columns[i].ColumnName.ToString();
 
                    xlSheet.Cells[1, i + 1] = data;
 
 
 
                    //выделяем первую строку
 
                    xlSheetRange = xlSheet.get_Range("A1:V1", Type.Missing);
 
 
 
                    //делаем полужирный текст и перенос слов
 
                    xlSheetRange.WrapText = true;
 
                    xlSheetRange.Font.Bold = true;
 
                    xlSheetRange.ColumnWidth = 100;
 
                }
 
 
 
                //////////
 
 
 
                int RowsCount = dt.Rows.Count;
 
                int ColumnsCount = dt.Columns.Count;
 
                object[,] arrData = new object[RowsCount, ColumnsCount];
 
                for (int j = 0; j < RowsCount; j++)
 
                    for (int i = 0; i < ColumnsCount; i++)
 
                        arrData[j, i] = dt.Rows[j][i];
 
                xlSheet.Range["A2"].Resize[arrData.GetUpperBound(0) + 1,
 
                arrData.GetUpperBound(1) + 1].Value = arrData;
 
 
 
 
 
 
 
 
 
 
 
 
 
                xlSheetRange.Columns.AutoFit();
 
                xlSheetRange.Rows.AutoFit();
 
 
 
 
 
 
 
                //// ЛИСТ2
 
 
 
                //выбираем лист на котором будем работать (Лист 2)
 
                xlSheet = (Excel.Worksheet)xlApp.Sheets[2];
 
 
 
                //Название листа
 
                xlSheet.Name = "Лист2";
 
 
 
                //Выгрузка данных
 
                DataTable dt1 = GetData();
 
 
 
                int collInd1 = 0;
 
                int rowInd1 = 0;
 
                string data1 = "";
 
 
 
                //называем колонки
 
                for (int i = 0; i < dt1.Columns.Count; i++)
 
                {
 
                    data1 = dt1.Columns[i].ColumnName.ToString();
 
                    xlSheet.Cells[1, i + 1] = data1;
 
 
 
                    //выделяем первую строку
 
                    xlSheetRange = xlSheet.get_Range("A1:V1", Type.Missing);
 
 
 
                    //делаем полужирный текст и перенос слов
 
                    xlSheetRange.WrapText = true;
 
                    xlSheetRange.Font.Bold = true;
 
                    xlSheetRange.ColumnWidth = 100;
 
                }
 
 
 
                //////////
 
 
 
                int RowsCount1 = dt1.Rows.Count;
 
                int ColumnsCount1 = dt1.Columns.Count;
 
                object[,] arrData1 = new object[RowsCount, ColumnsCount];
 
                for (int j = 0; j < RowsCount; j++)
 
                    for (int i = 0; i < ColumnsCount; i++)
 
                        arrData1[j, i] = dt1.Rows[j][i];
 
                xlSheet.Range["A2"].Resize[arrData1.GetUpperBound(0) + 1,
 
                arrData1.GetUpperBound(1) + 1].Value = arrData1;
 
 
 
 
 
               
 
                xlSheetRange.Columns.AutoFit();
 
                xlSheetRange.Rows.AutoFit();
 
 
 
 
 
            }
 
            catch (Exception ex)
 
            {
 
                MessageBox.Show(ex.ToString());
 
            }
 
 
 
 
 
 
 
 
 
            finally
 
            {
 
                //Показываем ексель
 
                xlApp.Visible = true;
 
 
 
                xlApp.Interactive = true;
 
                xlApp.ScreenUpdating = true;
 
                xlApp.UserControl = true;
 
 
 
                //Отсоединяемся от Excel
 
                releaseObject(xlSheetRange);
 
                releaseObject(xlSheet);
 
                releaseObject(xlApp);
 
            }
 
 
 
 
 
 
 
 
 
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.08.2018, 19:23
Ответы с готовыми решениями:

Текстовые файлы на разные листы в один документ Excel
Народ, подскажите как сделать: есть текстовые файлы с данными - нужно загнать все эти текстовые...

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

Копировать одноименные листы из файлов Excel в один файл Excel
nshardarbekov@mail.ru Добрый день, уважаемые! Помогите пожалуйста создать макрос, для того чтобы...

Копировать листы из файлов Excel в один файл Excel
Добрый день, господа! Помогите создать макрос, для того чтобы собрать(скопировать) листы из разных...

12
997 / 356 / 135
Регистрация: 27.10.2006
Сообщений: 764
07.08.2018, 16:48 2
ну, если на обоих листах вы запускаете одну процедуру DataTable GetData(), то вы и должны получать одну и ту же информацию, которая вставляется на оба листа.
Чтобы получить разную информацию на листах, то нужно получать (запрашивать) разную информацию и уже после этого разносить их по разным листам.
0
910 / 795 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
07.08.2018, 16:53 3
вы в методе GetData получаете 2 DataTable, а возвращаете всегда первый, откуда будут разные данные? либо объединяйте выходные данные в кортеж из двух DataTable, либо в функцию GetData надо вносить коррективы, чтобы возвращала только то что нужно именно.
0
6 / 6 / 1
Регистрация: 13.12.2015
Сообщений: 398
07.08.2018, 19:34  [ТС] 4
SeIZVeIZ, а два GetData спасут ситуацию?
на деле ничего не вышло
0
910 / 795 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
08.08.2018, 09:14 5
studentrm, спасут, но это неверный выход, лучше как-то так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private DataTable GetData(string connectionString, string query)
        {
            DataTable dt = null;
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                dt = new DataTable();
                try
                {
                    SqlCommand comm = new SqlCommand(query, con);
                    con.Open();
                    SqlDataAdapter da = new SqlDataAdapter(comm);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    dt = ds.Tables[0];
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            return dt;
        }
и использование:
C#
1
2
var dt1 = GetData(@"Data Source=msk", @"select distinct * FROM ТМ");
            var dt2 = GetData(@"Data Source=msk", @"select distinct * FROM TM2");
0
6 / 6 / 1
Регистрация: 13.12.2015
Сообщений: 398
08.08.2018, 09:27  [ТС] 6
SeIZVeIZ,
C#
1
2
var dt1 = GetData(@"Data Source=msk", @"select distinct * FROM ТМ");
            var dt2 = GetData(@"Data Source=msk", @"select distinct * FROM TM2");
а var ---- прописываю где выгрузка данных в excel?

DataTable dt1 = GetData();
DataTable dt2= GetData();
0
910 / 795 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
08.08.2018, 09:44 7
studentrm, да, вместо своих старых GetData
0
6 / 6 / 1
Регистрация: 13.12.2015
Сообщений: 398
08.08.2018, 13:33  [ТС] 8
SeIZVeIZ, одинаковые кладет
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
using System;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows.Forms;
usingSystem.Data.SqlClient;
using Excel =Microsoft.Office.Interop.Excel;
usingOfficeOpenXml;
usingOfficeOpenXml.Drawing;
usingOfficeOpenXml.Style;
namespaceСУО
{
publicpartialclasstransmodelmiddle : Form
    {
publictransmodelmiddle()
        {
InitializeComponent();
        }
privateDataTable GetData1(stringconnectionString, string query)
        {
//строкасоединения
stringconnString=@"Data Source=msk;Initial Catalog=Report;Integrated Security=True";
SqlConnection con =newSqlConnection(connString);
DataTabledt=newDataTable();
try
            {
SqlCommandcomm=newSqlCommand(query, con);
con.Open();
SqlDataAdapter da =newSqlDataAdapter(comm);
DataSet ds =newDataSet();
da.Fill(ds);
dt=ds.Tables[0];
            }
catch (Exception ex)
            {
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
finally
            {
con.Close();
con.Dispose();
            }
returndt;
privatevoid button1_Click(object sender, EventArgs e)
        {
xlApp=newExcel.Application();
try
            {
//добавляемкнигу
xlApp.Workbooks.Add(Type.Missing);
//делаем временно неактивным документ
xlApp.Interactive=false;
xlApp.EnableEvents=false;
//выбираем лист на котором будем работать (Лист 1)
xlSheet= (Excel.Worksheet)xlApp.Sheets[1];
//Название листа
xlSheet.Name="Лист1";
vardt= GetData1 ("Data Source=msk;Initial Catalog=Report;Integrated Security=True", "select * from Table1");
//Выгрузкаданных
///DataTabledt = GetData1();
intcollInd=0;
introwInd=0;
string data ="";
//называемколонки
for (inti=0; i<dt.Columns.Count; i++)
               {
data=dt.Columns[i].ColumnName.ToString();
xlSheet.Cells[1, i +1] =data;
//выделяем первую строку
xlSheetRange=xlSheet.get_Range("A1:V1", Type.Missing);
//делаем полужирный текст и перенос слов
xlSheetRange.WrapText=true;
xlSheetRange.Font.Bold=true;
xlSheetRange.ColumnWidth=100;
                }
//////////
intRowsCount=dt.Rows.Count;
intColumnsCount=dt.Columns.Count;
object[,] arrData=newobject[RowsCount, ColumnsCount];
for (int j =0; j <RowsCount; j++)
for (inti=0; i<ColumnsCount; i++)
arrData[j, i] =dt.Rows[j][i];
xlSheet.Range["A2"].Resize[arrData.GetUpperBound(0) +1,
arrData.GetUpperBound(1) +1].Value =arrData;
MessageBox.Show("12");
xlSheetRange.Columns.AutoFit();
xlSheetRange.Rows.AutoFit();
xlSheet= (Excel.Worksheet)xlApp.Sheets[2];
xlSheet.Name="Лист2";
var dt1 = GetData1("Data Source=msk;Initial Catalog=Report;Integrated Security=True", "select top 10 * from Table2");
//////////
int collInd1 =0;
int rowInd1 =0;
string data1 ="";
//называемколонки
for (inti=0; i< dt1.Columns.Count; i++)
                {
                    data1 = dt1.Columns[i].ColumnName.ToString();
xlSheet.Cells[1, i +1] = data1;
//выделяем первую строку
xlSheetRange=xlSheet.get_Range("A1:V1", Type.Missing);
//делаем полужирный текст и перенос слов
xlSheetRange.WrapText=true;
xlSheetRange.Font.Bold=true;
xlSheetRange.ColumnWidth=100;
                }
 
//////////
int RowsCount1 = dt1.Rows.Count;
int ColumnsCount1 = dt1.Columns.Count;
object[,] arrData1 =newobject[RowsCount, ColumnsCount];
for (int j =0; j <RowsCount; j++)
for (inti=0; i<ColumnsCount; i++)
arrData1[j, i] = dt1.Rows[j][i];
xlSheet.Range["A2"].Resize[arrData1.GetUpperBound(0) +1,
arrData1.GetUpperBound(1) +1].Value = arrData1;
////////
xlSheetRange.Columns.AutoFit();
xlSheetRange.Rows.AutoFit();
            }
catch (Exception ex)
            {
MessageBox.Show(ex.ToString());
            }
finally
           {
//Показываемексель
xlApp.Visible=true;
xlApp.Interactive=true;
xlApp.ScreenUpdating=true;
xlApp.UserControl=true;
//Отсоединяемсяот Excel
releaseObject(xlSheetRange);
releaseObject(xlSheet);
releaseObject(xlApp);
}
        }
voidreleaseObject(objectobj)
        {
try
            {
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj=null;
            }
catch (Exception ex)
            {
obj=null;
MessageBox.Show(ex.ToString(), "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
finally
            {
GC.Collect();
            }
        }
publicExcel.ApplicationxlApp { get; set; }
publicExcel.WorksheetxlSheet { get; set; }
publicExcel.RangexlSheetRange { get; set; }
}
}
0
910 / 795 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
08.08.2018, 13:45 9
вы вообще видели мой код и Ваш?
0
6 / 6 / 1
Регистрация: 13.12.2015
Сообщений: 398
08.08.2018, 13:47  [ТС] 10
SeIZVeIZ, так точно. Getdata изменил и vardt внес.
0
910 / 795 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
08.08.2018, 14:33 11
Ваш код:
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
private DataTable GetData1(string connectionString, string query)
        {
//строкасоединения
string connString=@"Data Source=msk;Initial Catalog=Report;Integrated Security=True";
SqlConnection con =newSqlConnection(connString);
DataTabledt=newDataTable();
try
            {
SqlCommandcomm=newSqlCommand(query, con);
con.Open();
SqlDataAdapter da =newSqlDataAdapter(comm);
DataSet ds =newDataSet();
da.Fill(ds);
dt=ds.Tables[0];
            }
catch (Exception ex)
            {
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
finally
            {
con.Close();
con.Dispose();
            }
return dt;

мой код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private DataTable GetData(string connectionString, string query)
        {
            DataTable dt = null;
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                dt = new DataTable();
                try
                {
                    SqlCommand comm = new SqlCommand(query, con);
                    con.Open();
                    SqlDataAdapter da = new SqlDataAdapter(comm);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    dt = ds.Tables[0];
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            return dt;
        }
найдите отличия как говорится
0
6 / 6 / 1
Регистрация: 13.12.2015
Сообщений: 398
08.08.2018, 14:35  [ТС] 12
SeIZVeIZ, а где лист заполняется. Верно?
0
910 / 795 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
08.08.2018, 14:40 13
и да, воспользуйтесь отладчиком да посмотрите какие данные в методе GetData у Вас вообще получаются, может ошибка у Вас где-то в другом месте совсем, с Вашим кодом понять это очень трудно когда всё наляпано не пойми как
0
08.08.2018, 14:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.08.2018, 14:40
Помогаю со студенческими работами здесь

Как экспортировать таблицы из access в excel на разные листы?
Привет, подскажите пожалуйста, как заставить процедуру экспортировать таблицы из access в excel на...

Delphi экспорт из stringgrid в excel файла на разные листы
Добрый вечер! Подскажите как экспортировать данные из StringGrid1 в excel файл, при этом нужно,...

Объединить листы excel в один
Доброе время суток! Еще раз нуждаюсь в вашей помощи! Нужен макрос для объединение разных таблиц...

Как слить два DataTable'а в один?
Задача следующая: Имеется датасет с двумя таблицами (parent и child с релэйшионом по ключу)...


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

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