0 / 0 / 1
Регистрация: 06.06.2013
Сообщений: 9
1

Сохранение порядка колонок DataGridView при экспорте в Excel

31.01.2014, 13:49. Показов 1953. Ответов 2
Метки нет (Все метки)

Народ в C# недавно, перерыл все что можно. Проблема в том что у меня в datagridview можно перемещать колонки, после перемещения их положение сохраняется, а при выгрузке в Excel колонки снова находятся в первоначальном положении. Как сделать чтоб при выгрузке в Excel положение колонок было как в datagridview?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.01.2014, 13:49
Ответы с готовыми решениями:

ProgressBar при экспорте данных из DataGridView в таблицу Excel
Добрый день! В приложении по нажатию кнопки данные из DataGridView экспортируются в таблицу excel....

Вывод в DataGridView заранее неизвестного кол-ва строк и колонок из Excel
Добрый день помогите допилить код кусочек прост до безобразия нужно вывести данные из таблицы в...

При экспорте данных из dataGridView в файл выдается System.OutOfMemory.Exception
Есть dataGridView с данными окло 1 млн строк, нужно сохранить данные в файл. ...

При экспорте в excel числа сохраняет как текст
Как устранить это? Вот мой код. Экспорт значений из датагрида. как только не пытался private...

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32443 / 20938 / 8104
Регистрация: 22.10.2011
Сообщений: 36,201
Записей в блоге: 7
31.01.2014, 14:57 2
Не все, что можно, как видно:
Reordering columns in DataGridView
0
0 / 0 / 1
Регистрация: 06.06.2013
Сообщений: 9
07.02.2014, 09:27  [ТС] 3
Лучший ответ Сообщение было отмечено Alex493049469 как решение

Решение

Ну в общем сделал по своему) Думаю кому нибудь пригодиться) Экспорт в 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
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
                Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel.Workbook ExcelWorkBook;
                Microsoft.Office.Interop.Excel.Worksheet ExcelWorkSheet;
                //Книга.
                ExcelWorkBook = ExcelApp.Workbooks.Add(System.Reflection.Missing.Value);
                //Таблица.
                ExcelWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ExcelWorkBook.Worksheets.get_Item(1);
                XlReferenceStyle RefStyle = ExcelApp.ReferenceStyle;
                ExcelApp.Visible = false;
                ExcelApp.ScreenUpdating = false;
 
                ExcelApp.Calculation =  XlCalculation.xlCalculationManual;
 
                 
 
                // Экспорт данных (Медленный с цветом) 
                Dictionary<int, int> indexDict = new Dictionary<int, int>();
                for (int i = 0; i < Grid.Columns.Count; i++)
                {
                    indexDict.Add(Grid.Columns[i].DisplayIndex, i);
                }
 
                if (!ExcelExportQuick)
                {
                    object[,] d = new object[Grid.RowCount + 1, Grid.ColumnCount];
                    int j2 = 0;
                    int i2 = 1;
                    for (int j = 0; j < indexDict.Count; j++)
                    {
                        if (Grid.Columns[indexDict[j]].Visible == true)
                        {
                            d[0, j2] = Grid.Columns[indexDict[j]].HeaderText.ToString();
                            //после прохода всех строк сбрасываем счетчик
                            i2 = 1;
                            for (int i = 0; i < Grid.Rows.Count; i++)
                            {
                                if (Grid.Rows[i].Selected == true)
                                {
                                    Object Val = Grid.Rows[i].Cells[indexDict[j]].Value;
                                    if (Val != null)
                                    {
                                        if (Val.ToString().Length > 910)
                                        {
                                            Object Val2 = Val.ToString().Remove(910);
                                            d[i2, j2] = "'" + Val2.ToString();
                                        }
                                        else
                                        {
                                            d[i2, j2] = "'" + Val.ToString();
                                        }
                                        i2++;
                                    }
                                }
                            }
                            j2++;
                        }
                    }
 
                    int rows = d.GetUpperBound(0) + 1;
                    int cols = d.GetUpperBound(1) + 1;
                    Microsoft.Office.Interop.Excel.Worksheet sheet = (Microsoft.Office.Interop.Excel.Worksheet)ExcelApp.ActiveSheet;
                    object leftTop = ExcelWorkSheet.Cells[1, 1];
                    object rightBottom = ExcelWorkSheet.Cells[Grid.RowCount + 1, Grid.ColumnCount];
                    Microsoft.Office.Interop.Excel.Range range = ExcelWorkSheet.get_Range(leftTop, rightBottom);
                    
                    range.Value2 = d;
                    
                    
 
 
                    j2 = 0;
                    i2 = 0;
                    for (int j = 0; j < Grid.Columns.Count; j++)
                    {
                        if (Grid.Columns[j].Visible == true)
                        {
                            j2++;
                            //Отдельно задаем цвет названия столбцов
                            (ExcelWorkSheet.Cells[1, j2] as Range).Interior.Color = System.Drawing.ColorTranslator.ToOle(Color.FromArgb(60, 179, 113));
                            i2 = 0;
                            for (int i = 0; i < Grid.Rows.Count; i++)
                            {
                                if (Grid.Rows[i].Selected == true)
                                {
                                    Object Val = Grid.Rows[i].Cells[indexDict[j]].Value;
                                    if (Val != null )
                                    {
                                        //передаем цвет ячейки 
                                        (ExcelWorkSheet.Cells[i2 + 2, j2] as Range).Interior.Color = System.Drawing.ColorTranslator.ToOle(Grid.Rows[i].Cells[indexDict[j]].Style.BackColor);
                                        //передаем цвет шрифта
                                        (ExcelWorkSheet.Cells[i2 + 2, j2] as Range).Font.Color = Grid.Rows[i].Cells[indexDict[j]].Style.ForeColor.ToArgb();
                                        i2++;
                                    }
                                }
                            }
                        }
                    }
                }
                
                try
                {
                // Экспорт данных (Быстрый без цвета)
                if (ExcelExportQuick)
                {
                    object[,] d = new object[Grid.RowCount + 1, Grid.ColumnCount];
                    int j2 = 0;
                    int i2 = 1;
                    for (int j = 0; j < indexDict.Count; j++)
                    {
                        if (Grid.Columns[indexDict[j]].Visible == true)
                        {
                            d[0, j2] = Grid.Columns[indexDict[j]].HeaderText.ToString();
                            i2 = 1;
                            for (int i = 0; i < Grid.Rows.Count; i++)
                            {
                                if (Grid.Rows[i].Selected == true)
                                {
                                    Object Val = Grid.Rows[i].Cells[indexDict[j]].Value;
                                    if (Val != null)
                                    {
                                        if (Val.ToString().Length > 910)
                                        {
                                          Object Val2 = Val.ToString().Remove(910);
                                          d[i2, j2] = "'"+Val2.ToString();
                                        }
                                        else 
                                        {
                                            d[i2, j2] = "'"+Val.ToString();
                                        }
                                            i2++;
                                    }
                                }
                            }
                            j2++;
                        }
                    }
 
                    int rows = d.GetUpperBound(0) + 1;
                    int cols = d.GetUpperBound(1) + 1;
                    Microsoft.Office.Interop.Excel.Worksheet sheet = (Microsoft.Office.Interop.Excel.Worksheet)ExcelApp.ActiveSheet;
                    object leftTop = ExcelWorkSheet.Cells[1, 1];
                    object rightBottom = ExcelWorkSheet.Cells[Grid.RowCount + 1, Grid.ColumnCount];
                    Microsoft.Office.Interop.Excel.Range range = ExcelWorkSheet.get_Range(leftTop, rightBottom);
                    //MessageBox.Show(Convert.ToString(d[1,4]));
                    range.Value2 = d;
                    //range.Interior.Color
  
 
                    j2 = 0;
 
                    for (int j = 0; j < Grid.Columns.Count; j++)
                    {
                        if (Grid.Columns[j].Visible == true)
                        {
                            j2++;
                            //Отдельно задаем цвет названия столбцов
                            (ExcelWorkSheet.Cells[1, j2] as Range).Interior.Color = System.Drawing.ColorTranslator.ToOle(Color.FromArgb(60, 179, 113));
                        }
                    }
                }
 
                    }
 
            catch (Exception ex) { MessageBox.Show(ex.Message, "Error");}
 
                ExcelWorkSheet.Columns.EntireColumn.AutoFit();
                ExcelWorkSheet.Columns.EntireRow.AutoFit();
                ExcelApp.ReferenceStyle = RefStyle;
                //Вызываем нашу созданную эксельку.
                ExcelApp.Visible = true;
                ExcelApp.ScreenUpdating = true;
                ExcelApp.UserControl = true;
              
 
     
                Close(ExcelApp);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.02.2014, 09:27
Помогаю со студенческими работами здесь

Сохранение из DataGridView в Excel
здравствуйте, работаю в Visual 2013 возникла проблема, на форме есть грид и меню сверху с пунктами...

DataGridView Сохранение данных в Excel
Доброе время суток. Возник вопрос. Сохраняю данные таким способом: { ...

Как сделать что бы размер DataGridView изменялся при добавление в него колонок/срок
Всем привет! Как мне сделать что бы размер datagridview изменялся при добавление в него...

Как избавиться от пустых колонок при экспорте в Excel?
Здравствуйте. У меня возникла проблема с выводом данных из датагридвью в лист экселя. Дело в том,...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru