2011-07-21 34 views
6

Chciałbym dynamicznie utworzyć dokument za pomocą JavaScript, a następnie otworzyć ten dokument w Microsoft Word. czy to możliwe? Oto mój obecny kod:Używanie JavaScript do "tworzenia" dokumentu Microsoft Word

<html> 
    <head> 
     <title></title> 

     <script src="js/jquery-1.4.4.js" type="text/javascript"></script> 
    </head> 
    <body> 

    <div id="myDiv">The quick brown fox jumped lazly over the dead log.</div> 

    <script type="text/jscript"> 
    var printWindow = window.open("", "Print", "width=800,height=400,scrollbar=0"); 
    var printAreaHtml = $("#myDiv").attr("outerHTML"); 

    printWindow.document.open("text/html", "replace"); 
    printWindow.document.writeln("<html><head>") 
    printWindow.document.writeln("<meta HTTP-EQUIV='Content-Type' content='application/vnd.ms-word'>"); 
    printWindow.document.writeln("<meta HTTP-EQUIV='Content-Disposition' content='attachment;filename=print.doc'>"); 
    printWindow.document.writeln("</head>"); 
    printWindow.document.writeln("<body>"); 
    printWindow.document.write(printAreaHtml); 

    printWindow.document.writeln("</body>"); 
    printWindow.document.writeln("</html>"); 
    printWindow.document.close(); 

    // printWindow.print();  

    </script> 

    </body> 
</html> 
+0

Co próbujesz osiągnąć? –

+0

Teoretycznie można utworzyć poprawne dane binarne i zaprezentować je w taki sposób, aby można je było poprawnie zapisać, jednak zwykle odbywa się to po stronie serwera, aby można było przeprowadzić prawidłowe typy mime i konwersję danych. – zzzzBov

+1

zobacz http://stackoverflow.com/questions/15899883/generate-a-word-document-in-javascript-with-docx-js – Dan

Odpowiedz

4

nie jestem pewien dokładnie to, co staramy się robić w kodzie się tam, ale tutaj jest trochę informacji znalazłem o dostępie do dokumentu programu Word oraz tabelę w dokumencie:

  1. Obiekt Microsoft Word Model

    Ten model obiektowy jest częścią Microsoft Word (nie Javascript) i pozwala "zdalnie zautomatyzować" słowo z innych programów (nie tylko stron internetowych, ale dowolnego programu komputerowego).

    Jest przeznaczony głównie dla języka Visual Basic, ale można uzyskać do niego dostęp ze strony internetowej - patrz pkt 2 poniżej.

    Jednak korzystanie z JavaScript jest nieco trudniejsze, szczególnie dlatego, że nie można używać wizualnych stałych podstawowych - należy odwoływać się do nich według wartości. Jeśli będziesz to badać dalej, wkrótce będziesz wiedział, co mam przez to na myśli.

    Więc gdzie można uzyskać informacje na temat tego modelu obiektowego?

    Wszystko to znajduje się w plikach pomocy programu Word, jeśli go szukasz.

    Jeśli zajrzysz do pomocy programu Word, w informacjach programowych znajdziesz odniesienie do programowania Microsoft Visual Visual Basic.

    , model obiektowy programu Word, który pozwala robić rzeczy, które będą potrzebne do rozwiązania problemu jak:

    • Otwórz Słowa
    • otworzyć dokument w Wordzie
    • uzyskać dostęp do zbioru tabel w tym ActiveDocument .
    • Uzyskaj dostęp do wierszy i komórek danej tabeli.
  2. Jak uzyskać dostęp do tej funkcji z Javascript?

    Można to zrobić tylko za pomocą przeglądarki Internet Explorer (i być może Opery).

    Tutaj musisz się nauczyć o ActiveXObjects.

    ActiveXObjects (jeśli nie wiesz) to osobne programy komputerowe, które umożliwiają dodatkową funkcjonalność. Istnieje wiele obiektów ActiveX w Internecie.

    Podczas instalacji programu Word instalowany jest również obiekt ActiveX do automatyzacji słowa, umożliwiający dostęp do modelu obiektów programu Word.

    Więc w javascript, pozwala otworzyć nową instancję słowo:

    var oApplication=new ActiveXObject("Word.Application"); 
    oApplication.Visible=true; // "Visible" is in the Word Object Model` 
    

    Nie masz go.

    Następnie, jeśli chcesz otworzyć złożyć i uzyskać tabelę:

    oApplication.Documents.Open("myfilename"); 
    var oDocument=oApplication.ActiveDocument; 
    var oTable=oDocument.Tables(1);` 
    

A teraz zostawiam to do ciebie, aby nie poddawać się z resztą.

-1

Czasami nie możemy używać aplikacji po stronie serwera lub ActiveX do tworzenia dokumentów biurowych z powodu aplikacji mobilnej phonegap, która używa tylko javascipt po stronie klienta do działania. jedynym sposobem znalazłem na razie jest uding słowa binarnego formatu pliku lub OOXML

http://msdn.microsoft.com/en-us/library/hh643138(v=office.12)

niektórzy mówią, że jej o wiele łatwiej stworzyć plik RTF i zgadzam się z nimi.

0

Nie można uzyskać tego działającego po stronie klienta. Najważniejsze jest to, aby wysyłać nagłówki nie jako html. Sugerowałbym więc, abyś używał skryptów po stronie serwera, jak Max zasugerował i najlepiej użył pliku .htaccess, jeśli używasz serwera Apache, aby nazwać te pliki również jako .doc.

Pozwala założyć, że twój plik php musi utworzyć plik .doc z przekazanymi argumentami, powiedzmy id. id więc chcesz file_.doc aby wskazać file.php? id =, spróbuj zastosować następującą regułę przepisywania, dzięki czemu przeglądarka rozumie przez przedłużacza zbyt pliku RewriteRule _ (. *). doc file.php? = $ 1

1

EDIT : nie było to możliwe, gdy zadano pytanie, ale w 2017 r. jest. Zobacz link z komentarza: jrm - http://www.effectiveui.com/blog/2015/02/23/generating-a-downloadable-word-document-in-the-browser/

Przeglądarka umieszcza pewne poważne ograniczenia dotyczące Javascript, które uniemożliwiają utworzenie pliku do pobrania. Zobacz ten powiązane pytanie:

Create a file in memory for user to download, not through server

+1

Znalezione przez Ciebie pytanie pokazuje, że możliwe jest pobieranie plików z przeglądarki bez przechodzenia do serwer poprzez dane uris. Chociaż obsługa przeglądarki mogła być nieco gorsza, kiedy została odebrana w 2010 roku, ale mimo to. Problem nie polega na pobraniu pliku, ale generowaniu go bez użycia ActiveX. – Aidiakapi

+0

Jest to możliwe. Facet wyjaśnia, jak to zrobić. http://www.effectiveui.com/blog/2015/02/23/generating-a-downloadable-word-document-in-the-browser/ – r3x

+1

dzięki @jrm, zredagowałem odpowiedź –

-1

To jest absolutnie możliwe. Googoose to wtyczka jQuery, którą napisałem, aby obsługiwać wiele bardziej skomplikowanych konwersji. Jest wciąż całkiem nowy, ale wydaje się, że jest kilka innych prób, więc możesz je sprawdzić. Oto najlepsza jak dotąd dokumentacja, która w rzeczywistości wyjaśnia ten proces: http://sebsauvage.net/wiki/doku.php?id=word_document_generation. Jeśli jesteś zainteresowany sprawdź przykłady w Googoose.

Powiązane problemy