Avatar billede fc_kongen Nybegynder
01. marts 2008 - 20:02 Der er 26 kommentarer og
1 løsning

HWPF skriv til Word

Hej

Jeg har nogle problemer med at skrive til et word dokument. Har prøvet nogle forskellige måder men ender altid med at den ikke gider at skrive noget i dokumentet. Er der nogen som kan give mig et virkene eksempel på hvordan man skal gøre det?
Avatar billede arne_v Ekspert
02. marts 2008 - 04:10 #1
HWPF er ikke særligt stabilt endnu.

(jævnfør http://poi.apache.org/hwpf/index.html)

Men prøv evt. at post et lille kode eksempel med problemet, som vi kan kigge på.
Avatar billede fc_kongen Nybegynder
02. marts 2008 - 10:31 #2
Her er en af dem jeg har forsøgt med. Den giver ingen compiler fejl men den skriver heller ikke noget i mit word dokument.

package my.contacteditor;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.poi.hpsf.MutableProperty;
import org.apache.poi.hpsf.MutablePropertySet;
import org.apache.poi.hpsf.MutableSection;
import org.apache.poi.hpsf.SummaryInformation;
import org.apache.poi.hpsf.Variant;
import org.apache.poi.hpsf.WritingNotSupportedException;
import org.apache.poi.hpsf.wellknown.PropertyIDMap;
import org.apache.poi.hpsf.wellknown.SectionIDMap;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

/**
*
* @author XXXX
*/
public class PoiWord {
   
    /** Creates a new instance of PoiWord */
    public PoiWord() throws WritingNotSupportedException, IOException {

        String fileName = "c:test.doc";
       
        /* Create a mutable property set. Initially it contains a single section
        * with no properties. */
        MutablePropertySet mps = new MutablePropertySet();

        /* Retrieve the section the property set already contains. */
        MutableSection ms = (MutableSection) mps.getSections().get(0);

        /* Turn the property set into a summary information property. This is
        * done by setting the format ID of its first section to
        * SectionIDMap.SUMMARY_INFORMATION_ID. */
        ms.setFormatID(SectionIDMap.SUMMARY_INFORMATION_ID);

        /* Create an empty property. */   
        MutableProperty p = new MutableProperty();

        /* Fill the property with appropriate settings so that it specifies the
        * document's title. */
        p.setID(PropertyIDMap.PID_TITLE);
        p.setType(Variant.VT_LPWSTR);
        p.setValue("Sample title");
        /* Place the property into the section. */
        ms.setProperty(p);
     
        /* Create the POI file system the property set is to be written to. */
        POIFSFileSystem poiFs = new POIFSFileSystem();
       
   
        /* For writing the property set into a POI file system it has to be
        * handed over to the POIFS.createDocument() method as an input stream
        * which produces the bytes making out the property set stream. */
        InputStream is = mps.toInputStream();

        /* Create the summary information property set in the POI file
        * system. It is given the default name most (if not all) summary
        * information property sets have. */
        poiFs.createDocument(is, SummaryInformation.DEFAULT_STREAM_NAME);

        /* Write the whole POI file system to a disk file. */
        poiFs.writeFilesystem(new FileOutputStream(fileName));
       
        System.out.println("stuff + " + poiFs);

    }
Avatar billede nielle Nybegynder
02. marts 2008 - 11:44 #3
Du skal nok lige starte med at give end et korrekt filnavn:

String fileName = "c:\test.doc";

eller:

String fileName = "c:\\test.doc";
Avatar billede fc_kongen Nybegynder
02. marts 2008 - 12:42 #4
LOL ja tak:)(*grimmer mig lidt jeg ikke så den*)
Det var det som skulle til at jeg kan oprette og skrive i filen. Men det som bliver vist i mit dokument er. Har i en forklaring på dette? eller er der noget som jeg gør forkert?

ÐÏ à¡± á                ;  þÿ                                        þÿÿÿ        ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿR o o t  E n t r y                                                ÿÿÿÿÿÿÿÿ                                            €        S u m m a r y I n f o r m a t i o n                          (  ÿÿÿÿÿÿÿÿÿÿÿÿ                                        d                                                                          ÿÿÿÿÿÿÿÿÿÿÿÿ                                                                                                                    ÿÿÿÿÿÿÿÿÿÿÿÿ                                                þÿ 
                      à…ŸòùOh «‘  +'³Ù0  2              ¬      S a m p l e  t i t l e    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ    þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿþÿÿÿþÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Avatar billede nielle Nybegynder
02. marts 2008 - 19:51 #5
Umiddelbart ligner det da starten på et Word dokument - som set når man åbner det i NotePad i stedet for Word.
Avatar billede fc_kongen Nybegynder
02. marts 2008 - 21:57 #6
Men ved du hvad der kan være årsagen til at det bliver vist sådan. Eller rettere hvordan man løser dette problem?
Avatar billede nielle Nybegynder
02. marts 2008 - 22:04 #7
Desværre ikke ... for jeg går da ud fra at du har åbnet den i Word?
Avatar billede fc_kongen Nybegynder
02. marts 2008 - 22:04 #8
yeps har jeg
Avatar billede fc_kongen Nybegynder
02. marts 2008 - 22:33 #9
Skal dog siges at der ser noget anderledes ud når jeg åbner det i word
Avatar billede nielle Nybegynder
02. marts 2008 - 22:41 #10
Nu giver det vel så ikke mening at åbne det i noget som helst andet end Word. Hvordan anderledes?

(ikke at jeg tror at jeg kan hjælpe dig meget mere her)
Avatar billede fc_kongen Nybegynder
02. marts 2008 - 22:45 #11
nej da men ville lige se hvordan den tolkede tegnene i et andet program. Men word tolker det helt underligt desværre
Avatar billede nielle Nybegynder
02. marts 2008 - 22:58 #12
I forhold til koden fra dette link:

http://www.koders.com/java/fid402B9311ADFEA4B35D0C8DB200758A362F11DE24.aspx

så mangler du en masse final-erklæringer...
Avatar billede fc_kongen Nybegynder
02. marts 2008 - 23:38 #13
Har prøvet at sætte det ind men det er desværre samme resultat:( Overvejer lidt om det er noget helt forkert kode jeg har brugt?
Avatar billede arne_v Ekspert
03. marts 2008 - 03:19 #14
Lidt googling fortæller at HWPF ikke kan oprette et Word dokument. Man kloner et tomt
dokument.

Opret empty.doc, åben det i word, skriv noget, gem, slet igen og gem igen.

package february;

import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Range;

public class WriteWord {
    public static void main(String[] args) throws Exception {
        FileInputStream fis = new FileInputStream("C:\\empty.doc");
        HWPFDocument doc = new HWPFDocument(fis);
        Range r = doc.getRange();
        r.insertAfter("Dette er sætning 1.");
        r.insertAfter("Dette er sætning 2.");
        r.insertAfter("Dette er sætning 3.");
        r.insertAfter("Dette er sætning 4.");
        FileOutputStream fos = new FileOutputStream("C:\\test.doc");
        doc.write(fos);
        fis.close();
        fos.close();
    }
}

Skulle så lave et test.doc med 4 sætninger.
Avatar billede arne_v Ekspert
03. marts 2008 - 03:20 #15
Og final har ikke nogen funktionel betydning.

Enkelte Java programmører har en sær skik med at erklære hvad som helst final.
Avatar billede nielle Nybegynder
03. marts 2008 - 08:56 #16
Jeg skal ikke udtale mig om hvad der er god skik i Java. Men det er ikke rigtigt at det er helt uden betydning at man erklære noget som final (const i andre sprog).

F.eks. vil dette ikke kompilere:

        int i = 123;
        byte b = i;

mens dette vil:

        final int i = 123;
        byte b = i;

Jeg gætter dog på at det ikke er sådan nogle subtiliteter der er i spil her.
Avatar billede fc_kongen Nybegynder
03. marts 2008 - 10:58 #17
Hej arne

Når jeg forsøger det som du skriver der. Så bliver der ikke skrevet noget ud i word dokumentet.
Avatar billede fc_kongen Nybegynder
03. marts 2008 - 11:53 #18
Det virker hvis der står noget i dokumentet empty.doc super så kan jeg komme lidt videre takker arne. Så skal jeg bare finde ud af hvordan man placere tingene som jeg gerne vil have det. det skulle du vil ikke vide?

Vil gerne have oppe i venstre højrne navn efternavn og så lige under add. herefter skal jeg have noget stående på mid af papiret og så noget i bunden?
Avatar billede arne_v Ekspert
03. marts 2008 - 19:09 #19
nielle>

Hvis vi kalder det at programmet compiler for en funktion, saa har final en funktionel betydning.
Avatar billede arne_v Ekspert
03. marts 2008 - 19:15 #20
fc_k>

Huskede du: skriv noget, gem, slet igen og gem igen ??
Avatar billede arne_v Ekspert
03. marts 2008 - 19:28 #21
fc_k>

Kig paa Range/Section/Pargraph og andet argument til insert metoderne der styrer
formateringen af teksten.
Avatar billede fc_kongen Nybegynder
08. marts 2008 - 08:11 #22
Tak for det har fået det til at virke nu.
Avatar billede nielle Nybegynder
08. marts 2008 - 09:05 #23
Hvorfor tager du så pointene selv? Burde arne_v ikke have haft dem?
Avatar billede fc_kongen Nybegynder
09. marts 2008 - 17:52 #24
hov det var også en fejl. hvordan får jeg smidt dem over til ham nu?
Avatar billede nielle Nybegynder
09. marts 2008 - 18:05 #25
Du opretter bare t nyt spørgsmpl her i ketegorien med titlen "Point til arne_v" og en reference fra det ene spørgsmål til det andet (helst begge veje). F.eks. sådan:

http://www.eksperten.dk/spm/821887
Avatar billede fc_kongen Nybegynder
10. marts 2008 - 19:31 #26
så fik jeg oprettet en ny spørgsmål til arne:) Men tak fordi du så det så han kan få sine points
Avatar billede arne_v Ekspert
10. marts 2008 - 19:43 #27
Jeg tror at det er meget almindeligt at bruge en template.doc med noget
template tekst i fremfor en empty.doc og saa kun rette template teksten fremfor
at gaa igang med at tilfoeje nye sektioner og saetninger.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester