2016-03-31 8 views
6

Mam funkcję "eksport do słowa" w mojej aplikacji. Działa idealnie. Używam zawartości gridview wyeksportowanej do pliku tekstowego.Dodaj nagłówek/stopkę w eksportowanym pliku tekstowym z ASP.NET

Teraz chcę dodać nagłówek/stopkę w eksportowanym pliku word, który jest generowany z poniższego kodu:

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

również nagłówek & stopka powinna być wyświetlana na wszystkich stronach pliku word, yust jak podczas przy użyciu funkcji nagłówka/stopki programu Word.

Czy to możliwe? Czy ktoś ma pomysł na to?

+0

Czy próbowałeś Response.AppendHeader –

+0

Myślę, response.header jest meta nagłówku pliku, a nie rzeczywistą nagłówka pliku. Jeśli masz jakiś przykład, pokaż mi. –

+1

Nie eksportujesz pliku tekstowego. Eksportujesz HTML i zapisujesz go w pliku .doc, aby oszukać program Word w celu jego otwarcia. Musisz użyć specjalnych atrybutów i elementów HTML MS Word, aby osiągnąć to, co chcesz. Najprostszym sposobem byłoby prawdopodobnie utworzenie dokumentu Word z nagłówkiem i stopką, a następnie zapisanie go jako pliku HTML. Lub rozważyć przejście do biblioteki, która generuje prawdziwe pliki Word, takie jak Open XML SDK lub DocX. Pliki generowane przez program prawdopodobnie zmyliłyby klientów programu Word, którzy nie oczekują kodu HTML w pliku .doc. – mason

Odpowiedz

2

Co robisz jest rzeczywiście tworzenia pliku HTML i nadając mu rozszerzenie że Słowo wie otworzyć. Nie tworzysz prawdziwego pliku .DOC, ale program Word rozpozna kod HTML i wyświetli go.

Podejrzewam, że smak HTML, którego szuka, jest identyczny z zapachem, który zapisuje. Dlatego utworzyłem nowy dokument w programie Word 2013, dodałem nagłówki i stopki oraz zapisałem je jako plik HTML. Po sprawdzeniu pliku HTML okazuje się, że Word je usuwa. Tak więc wątpię, że istnieje sposób na określenie nagłówków i stopek w otwieranych plikach HTML.

Co można zrobić, to przełącznik do generowania rzeczywistych plików MS Word. Będą miały lepsze wsparcie dla różnych klientów programu Word i odpowiedników w formacie Word (takich jak wersje dla komputerów Mac, wersje dla urządzeń mobilnych i narzędzie Libre Office).

Micrsoft dostarcza bibliotekę do generowania plików .docx, zwany Open XML SDK. Jednak okazało się, że nieco trudne w użyciu.

Ja osobiście używane DocX kilka razy. Oto w jaki sposób chcesz to osiągnąć z tej biblioteki (kod pochodzi z 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 (w tłumaczeniu Telerik bo nie wiem, VB.NET)

' 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. 

Zauważ, że powyższy kod został zaczerpnięty z blogu napisany w roku 2010. biblioteka jest prawdopodobne, aby zmieniły się w ciągu minionych sześciu lat.

+0

OK, spróbuję tego. Jak mogę dodać tutaj zawartość mojej siatki? –

+0

@PiyushKhatri Nie renderowałbym GridView. Zamiast tego renderowałbym podstawowe dane (np. Model lub DataTable, który jest powiązany z GridView). Zajrzyj do [opcji, które DocX ma dla osadzonych tabel] (http://cathalscorner.blogspot.com/2010/06/docx-and-tables.html). – mason