Domanda

Vorrei esportare un GridView per eccellere, che è abbastanza facile. Ma soprattutto la griglia, in Excel, vorrei qualche altra informazione per l'identificazione. Posso in qualche modo esportare le cose diverse da GridView mentre poi mettere in GridView qui sotto?

Modifica Per qualche ragione, quando la GridView1 è visibile e si tenta di esportare, l'intero esportazioni di pagina e non solo il GridView. Non so perché!

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
È stato utile?

Soluzione

Sì, è possibile.

fare qualcosa di simile:

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

prima di passare il GridView.

Altri suggerimenti

Se si desidera esportare i tuoi contenuti per ExcelML controllare il RadGrid da Telerik

È anche possibile inserire informazioni di intestazione nella rete etc

Ecco il mio codice per fare lo stesso

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();
}

Si noti che im tagliare l'HTML risultante utilizzando un'espressione regolare per evitare la formattazione, le immagini, div e whatnots.

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

Ricordate di ignorare quanto segue al fine di garantire quella griglia renderà al di fuori di una pagina

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

L'apertura di questo file in Excel genera un messaggio di avviso. Vorrei usare una delle librerie di esportazione open-source come NPOI. http://npoi.codeplex.com/

Se ancora preferisce utilizzare l'output HTML, si può considerare il download di documentazione Microsoft sul formato HTML per Office da questo link: http://msdn.microsoft.com/en-us /library/aa155477%28office.10%29.aspx

È necessario solo il file CHM da questo archivio (confezionati in EXE).

In bocca al lupo.

Se il GridView è riempito utilizzando i dati di un DataTable, DataSet o List <> quindi la seguente libreria vi permetterà di esportare a un Excel 2007 (.xlsx) file semplicemente chiamando uno " CreateExcelDocument "funzione.

// 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;
}

viene fornito il codice sorgente completo, così si potrebbe adattare, per aggiungere le righe in più di dati, nella parte superiore di uno o più fogli di lavoro.

Questa libreria utilizza il Open XML le librerie, quindi è completamente gratuito. http://www.mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top