Вопрос

Я хотел бы экспортировать GridView в Excel, что достаточно просто.Но над сеткой, в Excel, я хотел бы получить некоторую другую информацию для идентификации.Могу ли я каким-то образом экспортировать вещи, отличные от gridviews, а затем поместить в gridview ниже?

Редактировать: По какой-то причине, когда виден GridView1 и я пытаюсь экспортировать, экспортируется вся страница, а не только gridview.Не уверен, почему!

Protected Sub btnExport_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExport.Click
    'Create a StringWriter and HtmlTextWriter
    Dim sw As System.IO.StringWriter = New System.IO.StringWriter()
    Dim htw As New System.Web.UI.HtmlTextWriter(sw)

    'Clear the Response object's content and specify the header for the HTML response and type of application file to create
    Response.ClearContent()
    Response.AddHeader("content-disposition", "attachment; filename=SaveFile.xls")
    Response.ContentType = "application/vnd.ms-excel"
    Response.Charset = ""
    EnableViewState = False

    htw.WriteLine("Test, test, test")

    Try
        'Check for the number of GridView rows
        If GridView1.Rows.Count < 65535 Then
            'Turn sorting and paging off and rebind the GridView control
            GridView1.AllowSorting = False
            GridView1.AllowPaging = False
            GridView1.PageSize = GridView1.Rows.Count
            GridView1.AutoGenerateSelectButton() = False
            GridView1.DataBind()


            'Render the GridView1 as HTML - this will cause an error that will fire the VerifyRenderingInServerForm event -- this event is trapped by the Overriding sub procedure given at the end of the program listing
            GridView1.RenderControl(htw)

            'Write the response
            Response.Write(sw.ToString())
            Response.End()

            'Turn sorting and paging on and rebind the GridView control
            GridView1.AllowSorting = True
            GridView1.AllowPaging = True
            '.GridView1.PageSize = 10
            GridView1.AutoGenerateSelectButton() = True
            GridView1.DataBind()
        End If
    Catch ex As Exception

    End Try

End Sub
Это было полезно?

Решение

Да, ты можешь.

Сделайте что-то вроде этого:

HttpContext.Current.Response.Write("some string value")

прежде чем вы передадите свой gridview.

Другие советы

Если вы хотите экспортировать свой контент в ExcelML, ознакомьтесь с Радгрид из Телерика

Вы также можете вставить информацию о заголовке в сетку и т.д.

Вот мой код для выполнения того же самого

protected void ExportExcel_OnClick(object sender, EventArgs e) {
    Response.Clear();
    Response.AddHeader("content-disposition", "attachment;filename=brugere.xls");
    Response.Charset = "windows-1252";
    Response.ContentType = "application/vnd.xls";
    using (StringWriter stringWrite = new StringWriter())
    using (HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite)) {
        GridView1.AllowPaging = false;
        GridView1.DataBind();
        GridView1.RenderControl(htmlWrite);
        string html = stringWrite.ToString();
        string result = Replacer.Replace(html, "");
        Response.Write(result);
    }
    Response.End();
}

Обратите внимание, что я обрезаю результирующий html-код с помощью регулярного выражения, чтобы избежать форматирования, изображений, divs и прочего.

static readonly Regex Replacer = new Regex("(<input[^<>]*>)|"+
  "(class=\"[^\"]*\")|(style=\"[^\"]*\")|"+
  "(<a[^]*>)|(</a>)|(<div>)|(</div>)|" +
  "(cellspacing=\"[^\"]*\")|(cellpadding=\"[^\"]*\")|" +
  "(id=\"[^\"]*\")|(border=\"[^\"]*\")", RegexOptions.IgnoreCase);

Не забудьте переопределить следующее, чтобы гарантировать, что сетка будет отображаться за пределами Страницы

public override void VerifyRenderingInServerForm(Control control) {
    return; 
}

Открытие этого файла в Excel приведет к появлению предупреждающего сообщения.Я бы использовал одну из библиотек экспорта с открытым исходным кодом, такую как NPOI.http://npoi.codeplex.com/

Если вы по-прежнему предпочитаете использовать выходные данные HTML, вы можете рассмотреть возможность загрузки документации Microsoft по формату Office HTML по этой ссылке:http://msdn.microsoft.com/en-us/library/aa155477%28office.10%29.aspx

Вам нужен только файл CHM из этого архива (упакованный в EXE).

Удачи.

Если ваш GridView заполнен с использованием данных из DataTable, набора данных или списка<> затем следующая библиотека позволит вам экспортировать его в файл Excel 2007 (.xlsx), просто вызвав один "CreateExcelDocument Создать документ" функция.

// Step 1: Create a DataSet, and put some sample data in it
DataSet ds = CreateSampleData();

// Step 2: Create the Excel .xlsx file
try
{
    string excelFilename = "C:\\Sample.xlsx";
    CreateExcelFile.CreateExcelDocument(ds, excelFilename);
}
catch (Exception ex)
{ 
    MessageBox.Show("Couldn't create Excel file.\r\nException: " + ex.Message);
    return;
}

Предоставляется полный исходный код, так что вы можете адаптировать его, чтобы добавить дополнительные строки данных в верхней части одного или нескольких листов.

Эта библиотека использует Открытый XML библиотеки, так что это абсолютно бесплатно.http://www.mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top