Gå til innhold

Generere Word-dokumenter fra Java


Anbefalte innlegg

Hei!

 

Jeg holder på med et prosjekt der jeg har behov for å generere Word-dokumenter (evt. Excel) fra et Java-program. Funnet noe gratis kode som gjør dette ved hjelp av forhåndsdefinerte maler og bokmerker, og det funker som bare det for å få ut en enkelt rapport med faste felter. (Linken er: http://www.java400.de/en/default.html?../Javactpe.htm).

Problemet er at jeg har tabeller i rapportene mine som kan ha ulikt antall rader. Jeg har også behov for å generere flere instanser av den samme malen i ett og samme dokument. Noen som har vært borti dette, eller vet hvor jeg kan finne en løsning? Har lett rundt på internett, men ser ut til at dette ikke er så vanlig problem...

Jeg vet jo at Microsoft og Sun ikke akkurat er bestevenner, men SÅ uvanlig kan det vel ikke være?

 

Jeg takker og bukker for alle svar!

Lenke til kommentar
Videoannonse
Annonse
  • 3 uker senere...

driver og forsker på akkurat samme problemet, skal generere rapporter ved å bruke dokumentmaler og fylle inn data som hentes fra en database. Ser ut til at HWPF ikke er stabil enda, men det kan jo testes.

 

Noen som vet om man kan bruke HSSF til å lage nytt dokument av en excel mal og fylle inn verdier på "bokmerkene". Går det an å få tak i disse feltene som skal forandre hver gang fra kode? Ville gjerne ha definert felter som f.eks "Navn" slik at jeg kunne bare fra kode satt feltet "Navn" til å være en viss verdi..

Lenke til kommentar

Hei

 

Jeg har nå testet HSSF og det går an å lese fra en excel fil (som om den var en mal)

og skrive til en ny excel fil med endrede rader og celler osv..

 

Har skrivi to hjelpemetoder for å enkelt kunne sette inn en cell og en rad...kanskje du kan bruke disse metodene, du kan kanskje erstatte String[] i nyRad metoden med en LinkedList ellerno..det kommer an på hva du vil :)

 

Metoden nyRad setter inn en ny rad som om du høyreklikker på raden i excel og velger Insert..altså setter den inn en ny rad og flytter alt annet nedover istedenfor at den skriver over raden..så det kan kanskje løse problemet med at du har tabeller med ulikt antall rader som du skal sette inn i excel arket

 

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class HssfTest {

public static final int CELLE_TOTAL_ANTALL_ANSATTE = 2;
public static final int RAD_NY_ANSATT = 11;
public static final int FOOTER = 13;

public static void main(String[] args){
 System.out.println("main");
 new HssfTest();
}

public HssfTest(){
 
 POIFSFileSystem myxls;
 
 try {
 	
 	System.out.println("try");
 	
 	myxls = new POIFSFileSystem(new FileInputStream("bok.xls"));
 	HSSFWorkbook wb     = new HSSFWorkbook(myxls);
 	
 	HSSFSheet sheet = wb.getSheetAt(0); 
 	
 	HSSFRow row     = sheet.getRow(3);
 	
 	nyCelle(row, CELLE_TOTAL_ANTALL_ANSATTE, "en verdi");
     
 	String[] cv = { "1","Ola","Pedersen" };
 	nyRad(sheet,RAD_NY_ANSATT, cv);
 	
 	String[] cv2 = { "2","Geir","Kløfta" };
 	nyRad(sheet,RAD_NY_ANSATT, cv2);
 	
 	String[] cv3 = { "3","Nina","Sur" };
 	nyRad(sheet,RAD_NY_ANSATT, cv3);
     
//    create a new file
 	FileOutputStream out = new FileOutputStream("workbook.xls");
 	wb.write(out);
 	out.close();
 
 } catch (Exception e) {
 	
 	
 	e.printStackTrace();
 }
 

}

public void nyCelle(HSSFRow rad, int kolonne, String verdi ){
 
 HSSFCell cell   = rad.getCell((short)kolonne);
 cell = rad.createCell((short) kolonne);
 
   	
 cell.setCellType(HSSFCell.CELL_TYPE_STRING);
    cell.setCellValue(verdi);
 
}

public void nyRad(HSSFSheet ark, int radNr, String[] celleverdier ){
 
 ark.shiftRows(11, ark.getLastRowNum(), 1); 
 HSSFRow rad;
 rad = ark.createRow(radNr);
 
 int c = celleverdier.length;
 
 for(int i =0;i<c;i++){  	
 	
 	nyCelle(rad,(short)i, celleverdier[i]);	
 	
 }
 
}

}

Endret av zulo
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...