Vinay iGATE Ответов: 3

Экспорт данных в Excel


Я реализовал экспорт набора данных в excel с помощью
: Шаблон Excel, содержащий namerange, в который необходимо вставить данные
:Свойство HttpContext
: FileStream и байтовый массив

Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я записываю данные в excel, он также добавляет заголовок столбца, присутствующий в datatable.
Я хочу избежать заголовка столбца, так как он уже присутствует в шаблоне excel(строка выше nameranges)

Пожалуйста, дайте мне решение.
По крайней мере, дайте мне знать, как получить содержимое объекта HttpContext в режиме отладки, чтобы я мог сделать RnD с этим.

Vinay iGATE

Я обнаружил кое-что в строке подключения, как HDR.
Кто-нибудь знает, какая от этого польза?
HDR = да / HDR = нет

Phouttrat

"HDR=Yes;" указывает, что первая строка содержит имена столбцов, а не данные. "HDR=нет;" указывает на противоположное.
Однако вполне возможно, что вам также понадобится использовать "IMEX=1;", см. следующую ссылку:
https://www.connectionstrings.com/excel/

Но еще одна проблема, которая у вас есть, - это выбор именованного диапазона в файле шаблона. С OLEDB вы не можете этого сделать так что в качестве альтернативы вы можете попробовать это библиотека excel для C#. Это может позволить вам экспорт DataTable в именованный диапазон файла excel.
Кроме того, он имеет прямой путь файл экспорта в Excel в браузере в ASP.NET.

Таким образом, ваши шаги по реализации будут следующими
: Чтение шаблона excel
: Вам требуется элемент управления namedrange
: Вставить объект DataTable на позиции, что это элемент управления namedrange
: Потоковая передача excel в браузер клиента

3 Ответов

Рейтинг:
27

Prasad_Kulkarni

Ссылаться:
Статья: Быстрый экспорт данных в Excel[^]
Аналогичный ответ: Как экспортировать значение из набора данных в лист Excel[^]
Гораздо больше подобных вещей на CodeProject[^]

Короче говоря:

for (int col = 0; col < dataTable.Columns.Count; col++)
{
    for (int row = 0; row < dataTable.Rows.Count; row++)
    {
        excelSheet.Cells[row + 1, col + 1] =
                dataTable.Rows[row].ItemArray[col];
    }
}


.. а для массовых данных вы можете пойти с:
excelSheet.get_Range("A1:H25", Type.Missing).Value2 =
    bidimensionalObjectArray;


Рейтинг:
1

IpsitaMishra

Попробуйте это я надеюсь что это решит вашу проблему

Страница in. Aspx

<asp:DataGrid ID="myGridView" Width="100%" runat="server" AutoGenerateColumns="False"

            DataKeyNames="Id" AlternatingRowStyle-CssClass="alt">
            <ItemStyle BackColor="#EBEBEB" />
            <AlternatingItemStyle BackColor="White" />
            <Columns>
                <asp:TemplateColumn HeaderStyle-HorizontalAlign="Center" HeaderText="ID">
                    <ItemTemplate >
                        <asp:Label ID="lblId" runat="server" Text='<%# Eval("ID")%>'></asp:Label>
                    </ItemTemplate>
                    <ItemStyle HorizontalAlign="Center" Width="15%" />
                </asp:TemplateColumn>

            <asp:TemplateColumn ItemStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center" HeaderText="Name">
                    <ItemTemplate>
                        <asp:Label ID="lblName" Text='<%# Eval("Name")%>' runat="server"></asp:Label>
                    </ItemTemplate>mn
                    <ItemStyle HorizontalAlign="Center" Width="20%" />
                </asp:TemplateColumn>

</Columns>

</asp:DataGrid>

В .CS страницы
       myGridView.DataSource = dd.tables[0];
        myGridView.DataBind();
        ExportToExcel(myGridView);



       public void ExportToExcel(System.Web.UI.Control ctl)
         {
         using (Control myCtl = ctl)
            {
        HttpContext.Current.Response.AppendHeader("Content-Disposition", attachment);
        HttpContext.Current.Response.Charset = charSet;
        HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
        HttpContext.Current.Response.ContentType = content;
        myCtl.Page.EnableViewState = false;
        StringWriter sw = new StringWriter();
        HtmlTextWriter htw = new HtmlTextWriter(sw);

       //Renders the control here.
        myCtl.RenderControl(htw);
        HttpContext.Current.Response.Write(sw.ToString());
        HttpContext.Current.Response.End();
    }
}



Продолжайте улыбаться :):):) счастливого кодирования:)


Vinay iGATE

У меня нет datagridview. Данные поступают непосредственно из таблицы в наборе данных :(

IpsitaMishra

вы можете добавить сетку и сделать ее невидимой просто предположение :)

Рейтинг:
1

Lacy00

Эта статья может помочь: 9 решений для экспорта данных в Excel для ASP.NET[^]