Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 06.07.2011
Сообщений: 44

Формирование Excel файла по данным из DataGridView

11.12.2012, 14:27. Показов 1689. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Моей задачей было создать такой функционал чтоб при нажатии на кнопку, данные которые занесены в GridView автматически переносились в новосозданный Excel файл. Задумка удалась и локально у меня все работает как часы.
Как только я выложил все это дело на сайт, конкретно в админку одного магазина...так кнопка перестала полностью реагировать и файл не формируется. Так вот вопрос:
Что я сделал не так? И почему локально все ок? А на внешнем ресурсе все через задницу?
Вот мой код:
C#
1
2
3
using Microsoft.Office.Interop;
using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
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
  public void ExportToExcel(GridView gvProducts)
        {
            ApplicationClass Excel = new ApplicationClass();
            XlReferenceStyle RefStyle = Excel.ReferenceStyle;
            Excel.Visible = true;
            Workbook wb = null;
            String TemplatePath = "http://la-ua.com/ExpExcel.xlt";
            //  String TemplatePath = @"\JS\Exp.Excel.xlt";
            try
            {
                wb = Excel.Workbooks.Add(TemplatePath); // !!! 
            }
            catch (System.Exception ex)
            {
                throw new Exception("Не удалось загрузить шаблон для экспорта " + TemplatePath + "\n" + ex.Message);
            }
            Worksheet ws = wb.Worksheets.get_Item(1) as Worksheet;
            for (int j = 0; j < gvProducts.Columns.Count; ++j)
            {
                (ws.Cells[1, j + 1] as Range).Value2 = gvProducts.Columns[j].HeaderText;
                for (int i = 0; i < gvProducts.Rows.Count; ++i)
                {
                    object Val = gvProducts.Rows[i].Cells[j].Text;
                    if (Val != null)
                        (ws.Cells[i + 2, j + 1] as Range).Value2 = Val.ToString();
                }
            }
            ws.Columns.EntireColumn.AutoFit();
            Excel.ReferenceStyle = RefStyle;
            ReleaseExcel(Excel as Object);
        }
 
        protected void btGetExcel_Click(object sender, EventArgs e)
        {                                          
            ExportToExcel(gvProducts);
        }
А так же код ASP.NET, если в нем есть смысл...:
HTML5
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
<%@ Import Namespace="AutoLabDecor.Engine.Data.Services" %>
<%@ Import Namespace="AutoLabDecor.Engine.Data.Entities" %>
<%@ Import Namespace="AutoLabDecor.Engine.Data.DataContext" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<%@ Register Src="~/Controls/Admin/SelectCategoryControl.ascx" TagPrefix="ccu" TagName="SelectCategoryControl" %>
<%@ Register Src="~/Controls/PopUp/HiddenProductsModal.ascx" TagPrefix="ccu" TagName="HiddenProductsModal" %>
<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="cphToolbar">
 
    <script type="text/javascript">
        function Open_HiddenProducts() {
            $find(modalPoPup_HiddenProducts).show();
        }
    </script>
 
    <table cellpadding="0" cellspacing="0" border="0">
        <tr>
            <td align="left">
                <asp:LinkButton ID="LinkButton1" runat="server" Text="Создать товар" CausesValidation="false"
                    PostBackUrl="~/Admin/Products/CreateProduct.aspx"></asp:LinkButton>
            </td>
            <td style="width: 10px;">
            </td>
            <td align="left">
                <asp:LinkButton ID="LinkButton2" runat="server" Text="Таблицы авто" CausesValidation="false"
                    PostBackUrl="~/Admin/Dictionaries/AutoModels/AutoModelsList.aspx"></asp:LinkButton>
            </td>
            <td style="width: 10px;">
            </td>
            <td align="left">
                <asp:LinkButton ID="LinkButton3" runat="server" Text="Список категорий" CausesValidation="false"
                    PostBackUrl="~/Admin/Dictionaries/ProductCategories/CategoriesList.aspx"></asp:LinkButton>
            </td>
            <td style="width: 10px;">
            </td>
            <td align="left">
                <asp:Panel ID="pnHiddenProd" runat="server" Visible="false">
                    <asp:UpdatePanel runat="server">
                        <ContentTemplate>
                            <asp:LinkButton ID="LinkButton4" runat="server" Text="Список невидимых товаров" CausesValidation="false"
                                OnClientClick="Open_HiddenProducts()"></asp:LinkButton>
                        </ContentTemplate>
                    </asp:UpdatePanel>
                </asp:Panel>
            </td>
            <td style="width: 10px;">
            </td>
            <td align="left">
                <asp:LinkButton ID="LinkButton5" runat="server" Text="Список товаров без картинок и характеристик"
                    CausesValidation="false" PostBackUrl="~/Admin/Products/ProductWithoutList.aspx"></asp:LinkButton>
            </td>
            <td style="text-align: right; width: 70%; font-weight: bold; font-size: 14px">
                Кол-во на стр.:
                <asp:TextBox ID="tbProdCount" runat="server" Width="35"></asp:TextBox>
            </td>
        </tr>
    </table>
</asp:Content>
<asp:Content ID="Content2" runat="server" ContentPlaceHolderID="ContentPlaceHolder1">
 
    <script type="text/javascript">
        function OpenImagesForm(productID) {
            window.showModalDialog('../ViewProductImages.aspx?ProductID=' + productID, '', 'dialogWidth:1200px; dialogHeight:650px; center:yes;');
        }
    </script>
 
    <table cellpadding="0" cellspacing="0" border="0" width="100%">
        <tr>
            <td>
                <asp:UpdatePanel runat="server" ID="upMain" UpdateMode="Conditional">
                    <ContentTemplate>
                        <table>
                            <tr>
                                <td>
                                    <ccu:SelectCategoryControl ID="SelectCategoryControl1" runat="server"></ccu:SelectCategoryControl>
                                </td>
                                <td>
                                    <asp:Button ID="btGetData" runat="server" Text="Отобразить данные" CausesValidation="false"
                                        OnClick="btGetData_Click" />
                                    <asp:Button ID="Button1" runat="server" Text="Импорт в Excel" CausesValidation="false"
                                        OnClick="btGetExcel_Click" />
                                </td>
                                <td style="width: 45px; height: 45px">
                                    <asp:UpdateProgress ID="upLoaderRegions" runat="server" AssociatedUpdatePanelID="upMain">
                                        <ProgressTemplate>
                                            <div id="floatingCirclesG_2">
                                                <div class="f_circleG_2" id="frotateG_01_2">
                                                </div>
                                                <div class="f_circleG_2" id="frotateG_02_2">
                                                </div>
                                                <div class="f_circleG_2" id="frotateG_03_2">
                                                </div>
                                                <div class="f_circleG_2" id="frotateG_04_2">
                                                </div>
                                                <div class="f_circleG_2" id="frotateG_05_2">
                                                </div>
                                                <div class="f_circleG_2" id="frotateG_06_2">
                                                </div>
                                                <div class="f_circleG_2" id="frotateG_07_2">
                                                </div>
                                                <div class="f_circleG_2" id="frotateG_08_2">
                                                </div>
                                            </div>
                                        </ProgressTemplate>
                                    </asp:UpdateProgress>
                                </td>
                                <td style="text-align: right; width: 70%; font-weight: bold; font-size: 14px">
                                    Кол-во:
                                    <asp:Label ID="lbProdCount" runat="server"></asp:Label>
                                </td>
                            </tr>
                        </table>
                        <asp:GridView runat="server" ID="gvProducts" AutoGenerateColumns="false" DataSourceID="dsProducts"
                            DataKeyNames="ID" AllowSorting="true" OnRowDataBound="gvProducts_OnRowDataBound">
                            <HeaderStyle BackColor="LightGray" />
                            <Columns>
                                <asp:BoundField DataField="ID" HeaderText="ID" />
                                <asp:BoundField DataField="ProductCategoryName" HeaderText="Подкатегория" />
                                <asp:BoundField DataField="Maker" HeaderText="Производитель" SortExpression="ProductMakerID" />
                                <asp:BoundField DataField="Name" HeaderText="Имя" />
                                <asp:BoundField DataField="OriginalPrice" HeaderText="Входная цена" SortExpression="OriginalPrice" />
                                <asp:BoundField DataField="Price" HeaderText="Цена" DataFormatString="{0:F2}" SortExpression="Price" />
                                <asp:BoundField DataField="Count" HeaderText="Наличие" SortExpression="Count" />
                            </Columns>
                        </asp:GridView>
                    </ContentTemplate>
                    <Triggers>
                        <asp:AsyncPostBackTrigger ControlID="btGetData" EventName="Click" />
                    </Triggers>
                </asp:UpdatePanel>
                <%--_______________________________Show ИД заказов на товар______________________________________--%>
                <asp:Button ID="btnShowPopup1" runat="server" Style="display: none" />
                <cc1:ModalPopupExtender ID="mdlPopup1" runat="server" TargetControlID="btnShowPopup1"
                    PopupControlID="pnlPopup1" CancelControlID="btnClose2" BackgroundCssClass="modalBackground"
                    Y="250" />
                <asp:Panel ID="pnlPopup1" runat="server" Width="1010px" Style="display: none" Height="600px">
                    <div align="right" style="width: 100%">
                        <asp:Button ID="btnClose2" runat="server" Text="x" Width="25px" />
                    </div>
                    <asp:UpdatePanel runat="server" ID="UpdatePanel1" UpdateMode="Conditional" ChildrenAsTriggers="true">
                        <ContentTemplate>
                            <asp:Panel ID="Panel2" runat="server" Height="100%" Width="100%">
                                <table cellpadding="0" cellspacing="0" border="0" width="100%;" class="table-editOrder">
                                    <tr>
                                        <td style="width: 750px;">
                                            <table cellpadding="0px" cellspacing="0px" width="100%">
                                                <tr>
                                                    <td style="background-color: #ff8b17;">
                                                        ID заказов на товар
                                                    </td>
                                                </tr>
                                                <tr>
                                                    <td style="padding: 5px;">
                                                        <asp:Repeater ID="rpOrdersProduct" runat="server">
                                                            <ItemTemplate>
                                                                <asp:Label ID="lbOredersProduct" runat="server" Text='<%# String.Format(Eval("OrderID") + " || ") %>'></asp:Label>
                                                            </ItemTemplate>
                                                        </asp:Repeater>
                                                    </td>
                                                </tr>
                                            </table>
                                        </td>
                                    </tr>
                                </table>
                            </asp:Panel>
                        </ContentTemplate>
                    </asp:UpdatePanel>
                    <asp:LinqDataSource ID="ldsOrderProducts" runat="server" ContextTypeName="AutoLabDecor.Engine.Data.DataContext.AutoLabDecorDataContext"
                        TableName="OrderProducts">
                    </asp:LinqDataSource>
                </asp:Panel>
                <asp:LinqDataSource ID="dsProducts" runat="server" ContextTypeName="AutoLabDecor.Engine.Data.DataContext.AutoLabDecorDataContext"
                    TableName="Products" OnSelecting="Products_Selecting" EnableDelete="true">
                </asp:LinqDataSource>
            </td>
        </tr>
    </table>
    <ccu:HiddenProductsModal ID="HiddenProductsModal1" runat="server" />
</asp:Content>
Если у кого нибудь есть идеи буду очень благодарен. Заранее спасибо, всем добра)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.12.2012, 14:27
Ответы с готовыми решениями:

Формирование дерева Treeview по данным из бд или excel
Как это осуществить?

Формирование контроллов по данным из текстового файла
всем доброго времени суток. сразу оговорюсь, в C# я полный новичек, поэтому просьба выражаться более понятным языком:) Ну и сразу вопрос....

Формирование дерева TreeView по данным из текстового файла
Подскажите пожалуйста, есть текстовый файл &quot;menu.txt&quot; котрый можно редактирорвать вручную в виду его частых дополнений, сам файл...

9
 Аватар для Бельфегор
688 / 602 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
11.12.2012, 14:39
Помнится у меня тоже была такая ситуация. Решилась она натройками DCOM для excel. Просто у юзера ASP.NET не было прав на запуск экселья.
0
123 / 121 / 6
Регистрация: 21.12.2011
Сообщений: 348
11.12.2012, 15:13
FR33D, от сердца отрываю http://closedxml.codeplex.com/ .
0
0 / 0 / 0
Регистрация: 06.07.2011
Сообщений: 44
11.12.2012, 16:35  [ТС]
Спасибо конечно за ответы.
Но все таки мне не совсем понятно чем эта ссылка мне поможет в данной ситуации? Извините, но я еще чайник в подобных вещах...можно более подробно или своими словами описать что мне стоит делать?
0
 Аватар для Бельфегор
688 / 602 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
11.12.2012, 16:42
Start -> Run -> напечатай Dcomcnfg.exe жми enter

Откроется окно, слева выбери Component Services -> Computers->My Computer->DCOM Config
Найди там Exel.
Далее, Right click->Properties->Security
Добавь permission-для твоего юзера, network user-a, и ASP.Net юзера с Full control-ом
1
0 / 0 / 0
Регистрация: 06.07.2011
Сообщений: 44
11.12.2012, 17:20  [ТС]
Спасибо, сделал все как вы описали выше...добавил - ничего не изменилось. Все так же кнопка не реагирует(
0
 Аватар для Бельфегор
688 / 602 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
11.12.2012, 17:24
Тут посмотри, хорошо все описано.

http://www.shotdev.com/aspnet/... fig-excel/
1
0 / 0 / 0
Регистрация: 06.07.2011
Сообщений: 44
11.12.2012, 17:37  [ТС]
За ссылку спасибо, сделал все как там сказано. Только никакого эффекта( Возможно стоит перезагрузить машину?
0
 Аватар для Бельфегор
688 / 602 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
11.12.2012, 17:52
Цитата Сообщение от FR33D Посмотреть сообщение
Возможно стоит перезагрузить машину?
Возможно да.
Однако если все сделано правильно, возможно стоит искать другую причину.

Добавлено через 10 минут
О. Кое что вспомнил опять. Попробуй зарегистрировать клиентские скрипты на IIS.

Оркрываешь коммандную строку.
Start->Run->cmd, enter
далее командой cd доежаешь то директории фреймворка.
У меня C:\Windows\Microsoft.NET\Framework64\v4. 0.30319
Можно даже вставить текст в коммандную строку, но через правый клик, вставить.
Далее если в IIS фрамеворк не зарегистрирован, пишеь команду:
aspnet_regiis.exe -i

Затем уже клиентские скрипты.

aspnet_regiis.exe -c

Добавлено через 36 секунд
Думаю это уже поможет.
1
0 / 0 / 0
Регистрация: 06.07.2011
Сообщений: 44
11.12.2012, 18:37  [ТС]
В любом случае спасибо. Подумаю над решением еще...)

Добавлено через 38 минут
Не помогло...ерунда какая то)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.12.2012, 18:37
Помогаю со студенческими работами здесь

Вычисление функции по данным из файла в Excel
1. Согласно своему варианту выбрать функцию для расчёта (Math.Sin(Math.Abs(a * x + b)), при x, y, hx = 0.5, a = 5, b = 3 ). 2. В...

Програмное формирование Excel файла?
Вроде вопрос о чтении данных из Excel файла был уже Мне необходимо писать в файл, но при этом форматировать ячейки (диапазоны ячеек) ...

Формирование файла xml - MS Excel
Добрый вечер! помогите пожалуйста... Есть таблица в excel, необходимо по номеру ттн формировать xml файлы, т.е. если заполнено 2 номера...

Формирование HTML из области Excel файла.
Народ, есть таблица, как ее выделенную часть запихать в !чистый! хтмл ? (т.е. без всяких экселевских хреней) И вообще - можно ли влиять...

Формирование Excel-файла для печати
Доброго времени суток, форумчане! Мне нужно сформировать файл для печати. Пример файла указан в приложении. На данный момент мне лишь...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru