2016-03-31 7 views
6

Ich habe eine Funktion "Export in Word" in meiner Anwendung. Es funktioniert perfekt. Ich verwende den Inhalt von gridview, der in eine Word-Datei exportiert wurde.Header/Fußzeile in exportierte Word-Datei von ASP.NET hinzufügen

Jetzt möchte ich Header/Footer in exportierte Word-Datei hinzuzufügen, die aus dem folgenden Code erzeugt:

Dim fileName As String = "Test_" & Format(DateTime.Now, "MMddyyyyhhmmss") & ".doc" 
Dim sw As New StringWriter() 
Dim w As New HtmlTextWriter(sw) 
gvContent.RenderControl(w) 
Dim content As String = sw.GetStringBuilder().ToString() 
Response.Clear() 
Response.AddHeader("Content-Disposition", "attachment; filename=" & fileName) 
Response.Charset = "" 
Response.ContentType = "application/vnd.ms-word" 
Response.Write(finalContent) 
Response.Flush() 
Response.End() 

Auch die Kopf & Fußzeile sollte in allen Seiten der Word-Datei, yust als wenn angezeigt mit der Kopf-/Fußzeilenfunktion von Word.

Ist es möglich? Hat jemand eine Idee dafür?

+0

Haben Sie versucht, Response.AppendHeader –

+0

Nun, ich denke, response.header ist für Meta-Header der Datei, nicht die tatsächliche Dateikopfzeile. Wenn Sie ein Beispiel haben, bitte zeigen Sie mir. –

+1

Sie exportieren nicht wirklich eine Word-Datei. Sie exportieren HTML und speichern es in einer .doc-Datei, um Word dazu zu bringen, es zu öffnen. Sie müssen spezielle MS Word HTML-Attribute und -Elemente verwenden, um das zu erreichen, was Sie wollen. Der einfachste Weg wäre wahrscheinlich, ein Word-Dokument mit einer Kopf- und Fußzeile zu erstellen und es dann als HTML-Datei zu speichern. Oder Sie erwägen, zu einer Bibliothek zu wechseln, die echte Word-Dateien generiert, z. B. Open XML SDK oder DocX. Die Dateien, die Sie erstellen, würden wahrscheinlich Word-Clients verwirren, die HTML in einer .doc-Datei nicht erwarten. – mason

Antwort

2

Was Sie tun, ist tatsächlich eine HTML-Datei erstellen und geben Sie eine Erweiterung, die Word zu öffnen weiß. Sie erstellen keine echte .DOC-Datei, aber Word erkennt das HTML in und zeigt es an.

Ich vermute, dass der Geschmack von HTML, das es sucht, identisch mit dem Geschmack ist, in dem es speichert. So erstellte ich ein neues Dokument in Word 2013, fügte Kopf- und Fußzeilen hinzu und speicherte es als HTML-Datei. Nachdem Sie die HTML-Datei überprüft haben, scheint Word diese Einträge nicht zu enthalten. Daher bezweifle ich, dass es eine Möglichkeit gibt, Kopf- und Fußzeilen in HTML-Dateien anzugeben, die geöffnet werden.

Was Sie tun können, ist zum Generieren von echten MS Word-Dateien wechseln. Diese haben bessere Unterstützung für verschiedene Word-Clients und Word-Entsprechungen (z. B. Mac-Versionen, mobile Versionen und Libre Office).

Micrsoft stellt eine Bibliothek zum Generieren von .DOCX-Dateien mit der Bezeichnung Open XML SDK bereit. Allerdings habe ich festgestellt, dass ein bisschen schwer zu bedienen ist.

Ich persönlich habe DocX ein paar Mal verwendet. Hier ist, wie Sie dies mit dieser Bibliothek erreichen würden (Code genommen von this blog post):

C#

// Create a new document. 
using (DocX document = DocX.Create(@"Test.docx")) 
{ 
    // Add Header and Footer support to this document. 
    document.AddHeaders(); 
    document.AddFooters(); 

    // Get the default Header for this document. 
    Header header_default = document.Headers.odd; 

    // Get the default Footer for this document. 
    Footer footer_default = document.Footers.odd; 

    // Insert a Paragraph into the default Header. 
    Paragraph p1 = header_default.InsertParagraph(); 
    p1.Append("Hello Header.").Bold(); 

    // Insert a Paragraph into the document. 
    Paragraph p2 = document.InsertParagraph(); 
    p2.AppendLine("Hello Document.").Bold(); 

    // Insert a Paragraph into the default Footer. 
    Paragraph p3 = footer_default.InsertParagraph(); 
    p3.Append("Hello Footer.").Bold(); 

    // Save all changes to this document. 
    document.Save(); 
}// Release this document from memory. 

VB.NET (wie von Telerik übersetzt, weil ich weiß VB.NET nicht)

' Create a new document. 
Using document As DocX = DocX.Create("Test.docx") 
    ' Add Header and Footer support to this document. 
    document.AddHeaders() 
    document.AddFooters() 

    ' Get the default Header for this document. 
    Dim header_default As Header = document.Headers.odd 

    ' Get the default Footer for this document. 
    Dim footer_default As Footer = document.Footers.odd 

    ' Insert a Paragraph into the default Header. 
    Dim p1 As Paragraph = header_default.InsertParagraph() 
    p1.Append("Hello Header.").Bold() 

    ' Insert a Paragraph into the document. 
    Dim p2 As Paragraph = document.InsertParagraph() 
    p2.AppendLine("Hello Document.").Bold() 

    ' Insert a Paragraph into the default Footer. 
    Dim p3 As Paragraph = footer_default.InsertParagraph() 
    p3.Append("Hello Footer.").Bold() 

    ' Save all changes to this document. 
    document.Save() 
End Using 
' Release this document from memory. 

Beachten Sie, dass der obige Code aus einem Blogpost aus dem Jahr 2010 stammt. Die Bibliothek dürfte sich in den dazwischen liegenden sechs Jahren verändert haben.

+0

Ok, ich werde das versuchen. Wie kann ich den Inhalt meines Rasters hier hinzufügen? –

+0

@PiyushKhatri Ich würde das GridView nicht rendern. Stattdessen würde ich die zugrunde liegenden Daten (z. B. das Modell oder DataTable, das Sie an die GridView gebunden haben) rendern. Sehen Sie sich die [Optionen an, die DocX für eingebettete Tabellen besitzt] (http://cathalscorner.blogspot.com/2010/06/docx-and-tables.html). – mason

Verwandte Themen