Tingeling_81 Skrevet 4. januar 2005 Del Skrevet 4. januar 2005 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
MailMan13 Skrevet 4. januar 2005 Del Skrevet 4. januar 2005 Det nærmeste du kommer med åpen programvare: http://jakarta.apache.org/poi/index.html HSSF funker greit til enkle regneark, har dog ikke prøvd HWPF, men kanskje de har implementert nok til det du trenger? Lenke til kommentar
zulo Skrevet 21. januar 2005 Del Skrevet 21. januar 2005 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
zulo Skrevet 24. januar 2005 Del Skrevet 24. januar 2005 (endret) 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 24. januar 2005 av zulo Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå