Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 29.06.2020
Сообщений: 11
1
.NET 4.x

Экспорт таблицы в excel через сайт на базе firebird (visual studio)

30.06.2020, 15:16. Просмотров 916. Ответов 6

При экспорте с таблицы на excel в ячейки экспортируются пустыми значениями а должен быть например 10.123, а вот 10.000 уже как 10.

Из-за чего может быть?

код из .cs

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
280
281
282
283
284
285
286
//Экспорт в ексель protected void btExportXlsx_NotVisible_Click(object sender, EventArgs e) { ds = (DataSet)Session[guid + "DataSet"]; DataTable dt_arxiv = (DataTable)Session[guid + "dt_arxiv"];
 
    string okpo = Session[guid + "okpo"].ToString();
 
    if (okpo != "")
    {
        //Excel.Application xlApp;
        //Excel.Workbook xlWorkBook;
        //Excel.Worksheet xlWorkSheet;
        object misValue = System.Reflection.Missing.Value;
 
        //xlApp = new Excel.Application();
        //xlWorkBook = xlApp.Workbooks.Add(misValue);
 
        Workbook workbook = new Workbook();
 
        DataTable dt_f_orm = frm_form.Copy();
        DataColumn[] keys = new DataColumn[3];
        keys[0] = dt_f_orm.Columns["razdel"];
        keys[1] = dt_f_orm.Columns["gr_st"];
        keys[2] = dt_f_orm.Columns["id"];
        dt_f_orm.PrimaryKey = keys;
 
        DataTable dtRz = dt_f_orm.Select("gr_st = 0", "ORD ASC").CopyToDataTable();
 
        //Информация
        workbook.Worksheets.Add().Name = "Информация";
        Worksheet xlWorkSheet = workbook.Worksheets["Информация"];
 
        Range er = xlWorkSheet.Range["A1:A100"];
        er.Style.Alignment.WrapText = true;
        er.Font.Bold = true;
        er.Alignment.Horizontal = SpreadsheetHorizontalAlignment.Left;
        er.Alignment.Vertical = SpreadsheetVerticalAlignment.Center;
        er.Font.Size = 12;
        er.ColumnWidth = 500;
        er.Font.Name = "Times New Roman";
 
        er = xlWorkSheet.Range["A4:A4"];
        er.RowHeight = 200;
 
        er = xlWorkSheet.Range["B1:B100"];
        er.Style.Alignment.WrapText = true;
        er.Alignment.Horizontal = SpreadsheetHorizontalAlignment.Left;
        er.Alignment.Vertical = SpreadsheetVerticalAlignment.Center;
        er.Font.Size = 12;
        er.Font.Name = "Times New Roman";
        er.ColumnWidth = 2000;
 
        xlWorkSheet.Cells[0, 0].Value = "Год";
        xlWorkSheet.Cells[0, 1].Value = Session[guid + "god"].ToString();
 
        xlWorkSheet.Cells[1, 0].Value = "Период";
        xlWorkSheet.Cells[1, 1].Value = lbl_mes.Text.ToString().Replace("Период: ", "");
 
        xlWorkSheet.Cells[2, 0].Value = "";
        xlWorkSheet.Cells[2, 1].Value = "";
 
        xlWorkSheet.Cells[3, 0].Value = "Наименование";
        xlWorkSheet.Cells[3, 1].Value = dt_arxiv.Select(list_pok[0][0].ToString() + " = '" + okpo + "'")[0]["name"].ToString();
 
        for (int i = 0; i < dt_bokovik.Rows.Count; i++)
        {
            xlWorkSheet.Cells[i + 4, 0].Value = dt_bokovik.Rows[i]["name"].ToString();
            xlWorkSheet.Cells[i + 4, 1].Value = dt_arxiv.Select(list_pok[0][0].ToString() + " = '" + okpo + "'")[0][dt_bokovik.Rows[i]["graph"].ToString()].ToString();
        }
 
        for (int r = 0; r < dtRz.Rows.Count; r++)
        {
            DataTable dtGR = dt_f_orm.Select("razdel = " + dtRz.Rows[r]["razdel"].ToString() + " and gr_st = 2").CopyToDataTable();
 
            string sheet_name = ((dtRz.Rows[r]["razdel"].ToString() + ". " + dtRz.Rows[r]["name"].ToString()).Length > 30 ? (dtRz.Rows[r]["razdel"].ToString() + ". " + dtRz.Rows[r]["name"].ToString()).Substring(0, 25) + "..." : dtRz.Rows[r]["razdel"].ToString() + ". " + dtRz.Rows[r]["name"].ToString());
            workbook.Worksheets.Add().Name = sheet_name;
            xlWorkSheet = workbook.Worksheets[sheet_name];
 
            xlWorkSheet.DefaultColumnWidth = 20;              
 
            er = xlWorkSheet.Range["A2"];
            er.ColumnWidth = 1500;
            er.RowHeight = 350;
 
            er = xlWorkSheet.Range["B2"];
            er.ColumnWidth = 300;
            er.RowHeight = 100;
 
            DataTable dtGR_col = frm_form.Select("razdel = " + dtRz.Rows[r]["razdel"].ToString() + " and gr_st in (2,20)", "ord").CopyToDataTable();
            int j = 0;
 
            max_row_span = 0;
            js_array = ""; index_row = 0;
            foreach (DataRow gr in dtGR_col.Rows)
            {
                if (gr["KOD_PARENT"].ToString() == "")
                {
                    GridViewBandColumn band = gvTable_addColumn(dtGR_col, gr, Session[guid + "idf"].ToString(), r, "", 0);
                    MaxRowSpan(0, band);
                }
            }
 
            er = xlWorkSheet.Range.FromLTRB(0, 0, dtGR.Rows.Count + 1, max_row_span);
            er.Style.Alignment.WrapText = true;
            er.Font.Bold = true;
            er.Style.Alignment.Horizontal = SpreadsheetHorizontalAlignment.Center;
            er.Style.Alignment.Vertical = SpreadsheetVerticalAlignment.Center;
            er.ColumnWidth = 500;
 
            dt_range = new DataTable();
            dt_range.Columns.Add("x1", typeof(int));
            dt_range.Columns.Add("y1", typeof(int));
            dt_range.Columns.Add("x2", typeof(int));
            dt_range.Columns.Add("y2", typeof(int));
            dt_range.Columns.Add("value", typeof(string));
            col_level = 0;
 
            js_array = ""; index_row = 0;
            foreach (DataRow gr in dtGR_col.Rows)
            {
                if (gr["KOD_PARENT"].ToString() == "")
                {
                    GridViewBandColumn band = gvTable_addColumn(dtGR_col, gr, Session[guid + "idf"].ToString(), r, "", 0);
                    SetRangeDt(0, band);
                }
            }
 
            foreach (DataRow dr in dt_range.Rows)
            {
                er = xlWorkSheet.Range.FromLTRB(Convert.ToInt32(dr["x1"]), Convert.ToInt32(dr["y1"]), Convert.ToInt32(dr["x2"]), Convert.ToInt32(dr["y2"]));
                er.Merge();
                er.Value = dr["value"].ToString();
                er.FillColor = System.Drawing.Color.LightGray;
                er.Borders.SetAllBorders(Color.Black, BorderLineStyle.Thin);
 
                if (Convert.ToInt32(dr["x1"]) == 0 && Convert.ToInt32(dr["y1"]) == 0)
                    er.ColumnWidth = 1500;
            }
 
            for (int i = 0; i <= ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Rows.Count - 1; i++)
            {
                for (j = 2; j <= ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Columns.Count - 1; j++)
                {
                    string column_name = "";
                    if (ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Columns[j].Caption == "name")
                    {
                        column_name = "А";
                        (xlWorkSheet.Cells[max_row_span + 1 + i, j - 2] as Range).Alignment.Horizontal = SpreadsheetHorizontalAlignment.Left;
                    }
                    else if (ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Columns[j].Caption == "kod")
                    {
                        column_name = "Б";
                    }
                    else
                    {
                        column_name = ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Columns[j].Caption;
 
                        (xlWorkSheet.Cells[max_row_span + 1 + i, j - 2] as Range).Alignment.Horizontal = SpreadsheetHorizontalAlignment.Right;
                    }
 
                    string frmt = frm_cell.Select("kod_gr = '" + column_name + "' and razdel = '" + dtRz.Rows[r]["razdel"] + "' and kod_st = '0'")[0]["frmt"].ToString();
                    if (ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Rows[i]["kod"].ToString() != "")
                    {
                        if (frm_cell.Select("kod_gr = '" + column_name + "' and razdel = '" + dtRz.Rows[r]["razdel"] + "' and kod_st = '" + ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Rows[i]["kod"].ToString() + "'").Length > 0)
                            frmt = frm_cell.Select("kod_gr = '" + column_name + "' and razdel = '" + dtRz.Rows[r]["razdel"] + "' and kod_st = '" + ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Rows[i]["kod"].ToString() + "'")[0]["frmt"].ToString();
                    }
 
                    if (frmt.Substring(0, 1) == "N")
                    {
                        // if (ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Rows[i][j].ToString().Replace("," , ".") != "")
                        //{
                        //  double value = Convert.ToDouble(ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Rows[i][j].ToString().Replace("," , ".").Trim());
                        // xlWorkSheet.Cells[max_row_span + 1 + i, j - 2].Value = value;
                        // }
                        if (double.TryParse(ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Rows[i][j].ToString().Trim(), out doubleValue))
                        {
                            xlWorkSheet.Cells[max_row_span + 1 + i, j - 2].Value = doubleValue;
                        }
                        else xlWorkSheet.Cells[max_row_span + 1 + i, j - 2].Value = null;
                    }
                    else
                    {
                        if (column_name == "Б")
                        {
                            if (ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Rows[i][j].ToString().Replace(".", ",") != "")
                            {
                                xlWorkSheet.Cells[max_row_span + 1 + i, j - 2].Value = ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Rows[i][j].ToString();
                            }
                            else xlWorkSheet.Cells[max_row_span + 1 + i, j - 2].Value = null;
                        }
                        else xlWorkSheet.Cells[max_row_span + 1 + i, j - 2].Value = ds.Tables[dtRz.Rows[r]["razdel"].ToString()].Rows[i][j].ToString().Replace("&nbsp;", " ").Replace("</b>", "").Replace("<b>", "");
                    }
 
                    (xlWorkSheet.Cells[max_row_span + 1 + i, j - 2] as Range).Font.Name = "Times New Roman";
                    (xlWorkSheet.Cells[max_row_span + 1 + i, j - 2] as Range).Font.Size = 12;
                }
            }
        }
 
        workbook.Worksheets.RemoveAt(0);
        workbook.Worksheets.ActiveWorksheet = workbook.Worksheets[0];
 
        string fileName = okpo + ".xls";
        fileName = fileName.Replace(" ", "");
 
        workbook.SaveDocument(Server.MapPath(@"~\UploadControl\" + fileName), DocumentFormat.Xls);
 
        UploadingUtils.RemoveFileWithDelay(fileName, Server.MapPath(@"~\UploadControl\" + fileName), 5);
 
        HttpResponse Response = System.Web.HttpContext.Current.Response;
        Response.ClearHeaders();
        Response.ContentType = "xls";
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);
        Response.TransmitFile(Server.MapPath(@"~\UploadControl\" + fileName));
        Response.Flush();
        Response.End();
    }
}
 
int max_row_span = 0;
void MaxRowSpan(int row_span, GridViewBandColumn band)
{
    if (band.Columns.Count > 0)
    {
        row_span++;
        if (row_span > max_row_span)
            max_row_span = row_span;
 
        for (int i = 0; i < band.Columns.Count; i++)
        {
            if (band.Columns[i].Columns.Count > 0)
                MaxRowSpan(row_span, (GridViewBandColumn)band.Columns[i]);
        }
    }
}
 
DataTable dt_range = new DataTable();
int col_level = 0;
int max_col_in_band = 0;
private IFormatProvider value;
private double doubleValue;
 
void SetRangeDt(int level, GridViewBandColumn band)
{
    if (band.Columns.Count > 0)
    {
        max_col_in_band = 0;
        getMaxColInBand(band);
 
        DataRow dr = dt_range.NewRow();
        dr["x1"] = col_level;
        dr["y1"] = level;
        dr["x2"] = col_level + max_col_in_band - 1;
        dr["y2"] = level;
        dr["value"] = band.Caption;
        dt_range.Rows.Add(dr);
 
        for (int i = 0; i < band.Columns.Count; i++)
        {
            if (band.Columns[i].Columns.Count > 0)
                SetRangeDt(level + 1, (GridViewBandColumn)band.Columns[i]);
            else
            {
                dr = dt_range.NewRow();
                dr["x1"] = col_level;
                dr["y1"] = level + 1;
                dr["x2"] = col_level;
                dr["y2"] = max_row_span;
                dr["value"] = band.Columns[i].Caption;
                dt_range.Rows.Add(dr);
 
                col_level++;
            }
        }
    }
}
 
void getMaxColInBand(GridViewBandColumn band)
{
    if (band.Columns.Count > 0)
    {
        for (int i = 0; i < band.Columns.Count; i++)
        {
            if (band.Columns[i].Columns.Count > 0)
                getMaxColInBand((GridViewBandColumn)band.Columns[i]);
            else max_col_in_band++;
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2020, 15:16
Ответы с готовыми решениями:

Не получается подключится к базе MS SQL Server через VIsual Studio 2012
Здравствуйте, я создал новый проект, пытаюсь в нём создать модель Entity Framework. Когда создаю...

Как нарисовать график в Excel через Visual Studio?
Здравствуйте! Помогите, пожалуйста, закончить задачу! Есть множество точек с координатами x и...

Перенести значения из таблицы Excel на сайт через php
Есть таблица в exl NxM как реализовать, перенос значений из столбцов строк на сайт(php) \\Если...

программа подключается к базе (Firebird, SQLite) только на компе с Microsoft Visual C#
Подскажите, пожалуйста, как разобраться. Программа подключается к базе (Firebird, SQLite) только...

6
Эксперт .NET
7399 / 5166 / 889
Регистрация: 21.01.2016
Сообщений: 19,905
01.07.2020, 06:59 2
Macrosofaq, есть подозрения, что никто в этом дерьмокоде копаться за вас не станет.

Это вы на сервере с офисным пакетом работаете? Вы себя в полнолуние хорошо чувствуете?)
0
0 / 0 / 0
Регистрация: 29.06.2020
Сообщений: 11
02.07.2020, 05:14  [ТС] 3
Цитата Сообщение от Usaga Посмотреть сообщение
Macrosofaq, есть подозрения, что никто в этом дерьмокоде копаться за вас не станет.
Это вы на сервере с офисным пакетом работаете? Вы себя в полнолуние хорошо чувствуете?)
это не тот дерьмокод, не в том унитазе копаюсь...
0
Эксперт .NET
7399 / 5166 / 889
Регистрация: 21.01.2016
Сообщений: 19,905
02.07.2020, 07:32 4
Macrosofaq, я бы вам рекомендовал две вещи:
1. Не использовать офис для формирования документа, а использовать библиотеку OpenXML SDK или аналогичную.
2. Создать простое консольное приложение и попробовать сформировать документ в нём.

Офис на сервере использовать плохо потому, что он хорошо так ресурсов потребляет и не работает в параллель, что легко может потребоваться на сервере.
0
0 / 0 / 0
Регистрация: 29.06.2020
Сообщений: 11
02.07.2020, 11:33  [ТС] 5
Цитата Сообщение от Usaga Посмотреть сообщение
1. Не использовать офис для формирования документа, а использовать библиотеку OpenXML SDK или аналогичную.
ну это уже со временем, сейчас пока рабочим сделать
Цитата Сообщение от Usaga Посмотреть сообщение
2. Создать простое консольное приложение и попробовать сформировать документ в нём.
в будущем если не расторгнем контракт то все будет по тихой спасибо
0
Эксперт .NET
7399 / 5166 / 889
Регистрация: 21.01.2016
Сообщений: 19,905
02.07.2020, 11:36 6
Цитата Сообщение от Macrosofaq Посмотреть сообщение
ну это уже со временем, сейчас пока рабочим сделать
При использовании офиса на сервере рабочего варианта вы не получите. Два одновременных пользователя запросивших документ получат ошибку. Это не есть "рабочий" вариант. Но моё дело предложить верный вариант, не более
0
396 / 279 / 97
Регистрация: 21.02.2019
Сообщений: 1,087
02.07.2020, 11:51 7
Macrosofaq,
.. вообще говоря, если необходим экспорт в простую таблицу XLS, то достаточно создать в коде HTML-таблицу, которую можно передать в виде строки в поток как файл .xls, и которая будет импортирована в Excel на клиенте без дополнительных вопросов (или с вопросом о кодировке максимум) ... Да, некоторые выкрутасы форматирования здесь будут недоступны, но если речь просто об отображении данных - вполне промежуточный вариант без запуска Excel на сервере ...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2020, 11:51

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Проблема создания подключения БД Firebird в Entity FrameWork (Visual Studio 2019)
Добрый день! Подскажите куда копать, может есть у кого опыт такой настройки. В общем есть...

Экспорт данных из таблицы Excel в шаблон Excel
Добрый день! Проблемка заключается в следующем: В папке debug во вложении есть файл...

Экспорт классов из dll библиотек (Visual Studio)
Здравствуйте! Подскажите, как такой код вставить в dll файл и загрузить его в программу: //log.h...

Экспорт Excel таблиц на сайт!
Здравствуйте! Есть сайт, на котором необходимо сделать выкладку товаров, а именно из excel!...

Экспорт приложения qt в Visual Studio 2012 Express для Windows
Доброе утро! такой вопрос, можно ли полноценно перенести свой проект из qt в Visual Studio. В...

Хитроумный экспорт Excel->Excel через кнопку
В общем, встал вопрос автоматизации создания документа. Есть большая табличка с кучей полей в...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.