[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jul 2004
    Beiträge
    19

    Excel Datei mit RPG und POI/HSSF in A4

    Hallo Forum,

    ich erstelle mit POI/HSSF und RPG eine Excel Datei die ich mit Daten fülle.
    Beim erstellen der Excel Datei stellt er mir standardmäßig das Seitenformat Letter ein.
    Ich möchte aber Format A4 haben. In der Doku habe ich eine Klasse für den
    Drucker Setup gefunden und folgendes codiert:


    D* // DRUCKER SETUP
    D PrtSetup S O CLASS(*JAVA
    D :'org.apache.poi.hssf.usermodel-
    D .HSSFPrintSetup')



    D* // PRINTER KONSTRUKTOR
    D setupPrinter PR O EXTPROC(*JAVA
    D :'org.apache.poi.hssf.usermodel-
    D .HSSFPrintSetup'
    D :*CONSTRUCTOR)
    D CLASS(*JAVA
    D :'org.apache.poi.hssf.usermodel-
    D .HSSFPrintSetup')




    D* // PAPIERGRÖSSE EINSTELLEN
    D setPaperSize PR O EXTPROC(*JAVA
    D :'org.apache.poi.hssf.usermodel-
    D .HSSFPrintSetup'
    D :'setPaperSize')
    D CLASS(*JAVA
    D :'org.apache.poi.hssf.usermodel-
    D .HSSFPrintSetup')



    Wie muss ich jetzt die Papiergröße abändern ?
    Hat jemand ein Beispiel ?

    Danke für alle Antworten

  2. #2
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    Versuch doch mal folgendes:

    PrtSetup = setupPrinter();
    setPaperSize(PrtSetup) = 9;

    Gruß,
    KM

  3. #3
    Registriert seit
    Jul 2004
    Beiträge
    19

    POI Excel A4

    Hallo,
    ich bekomme beim Compilieren eine
    Fehlermeldung:

    setPaperSize(PrtSetup) = 9;



    *RNF7416 30 753 069500 Die Arten der Operanden auf der rechten und linken Seite
    des Ausdrucks in der Operation EVAL stimmen nicht überein.

  4. #4
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    Füge mal folgendes ein:

    PHP-Code:
    D A4                        5I 0 inz(9)
    .
    .
    .
    setPaperSize(PrtSetup) = A4
    Die Methode setPaperSize erwartet den Typ SHORT.

    Gruß,
    KM

  5. #5
    Registriert seit
    Jul 2004
    Beiträge
    19
    Hallo KM,

    leider ohne Erfolg, die Fehlermeldung
    bleibt wie gehabt.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    setPaperSize ist falsch deklariert.
    Bei Prozeduraufrufen kann keine Zuweisung erfolgen.
    Das gewünschte Argument muss als Parameter übergeben werden.

    Prüfe mal die Prozedurdeklaration und korrigiere diese, so dass folgender Aufruf möglich ist:

    setPaperSize(PrtSetup:9);
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Jul 2004
    Beiträge
    19
    Hallo Fuerchau, ich habe jetzt die Prozedurdefinition abgeändert in:

    D* // PAPIERGRÖSSE EINSTELLEN
    D setPaperSize PR O EXTPROC(*JAVA
    D :'org.apache.poi.hssf.usermodel-
    D .HSSFPrintSetup'
    D :'setPaperSize')
    D CLASS(*JAVA
    D :'org.apache.poi.hssf.usermodel-
    D .HSSFPrintSetup')
    D parm 5I 0 value

    Ich kann das PGM fehlerfrei compilieren, aber beim Aufruf des PGMs kommt die Fehlermeldung:

    Java-Ausnahme "java.lang.NoClassDefFoundError:
    org/apache/poi/hssf/usermodel/HSSFPrintSetup" empfangen, als die Methode
    "" mit Kennung "()V" in Klasse
    "org.apache.poi.hssf.usermodel.HSSFPrintSetup" aufgerufen
    wurde.Fehlerbeseitigung: Mit Hilfe des Benutzers, der für die Programmpflege
    verantwortlich ist, die Fehlerursache bestimmen.Technische Beschreibung . .

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ich kenne mich in den Funktionen da nicht aus.
    Aber die Deklaration (sprich der Aufruf) muss ja in etwa ähnlich anderen Zuweisungs-Operationen definiert werden.

    Prüfe da genau die Argumente und Ausprägungen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Oct 2004
    Beiträge
    240
    Da ich nur die Deklarationen sehen, kann ich mir kein richtiges Urteil bilden. Aber wie setzt du die Javazeilen:

    PHP-Code:
    // Papiergrösse A4 (short 9)
           
    HSSFPrintSetup ps sheet.getPrintSetup();
           
    ps.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE); 
    um? Das Objekt HSSFPrintSetup muss aus dem Sheet initialisiert werden. Machst du das?

    Allerdings muss ich hier auch ein Warnungen aussprechen:

    1. RPG und Java....(siehe auch Homepage von Dieter Bender)

    2. die POI-Lib
    Die Exceltabelle wird komplett im Hauptspeicher erstellt. Der Hauptspeicherbedarf ist ca. Faktor 15-20 (!) vom xls.

    Da bei uns auch mal größere Listen drüberlaufen, verwende ich die POI-Lib nicht! (besser JExcelAPI)

    Anbei ein Commandline Tool, aber wie gesagt: nix für große XLS-Dateien.

    Robert P.

    PHP-Code:
    import com.ibm.as400.access.*;
    import java.sql.*;
    import java.io.FileOutputStream;
    import org.apache.poi.hssf.usermodel.*;


    public class 
    PoiDemo {

       public 
    void run (String dbFileString outFileString userString password)
                       
    throws SQLException {

           
    dbFile dbFile.replaceAll("/"".");   // SQL schreibweise

           // JDBC-Treiber laden
           
    DriverManager.registerDriver(new com.ibm.as400.access.AS400JDBCDriver());

           
    Connection conn =
               
    DriverManager.getConnection("jdbc:as400://127.0.0.1;extended metadata=true",
                         
    userpassword);

           
    Statement stmt conn.createStatement ();
           
    ResultSet rs stmt.executeQuery ("select * from " dbFile);

           
    ResultSetMetaData meta   rs.getMetaData();
           
    int anzFields meta.getColumnCount();
           
    int zeile 0;

           
    // neues Dokument
           
    HSSFWorkbook wb = new HSSFWorkbook();
           
    // neues sheet
           
    HSSFSheet sheet wb.createSheet("Demo");
           
    // Papiergrösse A4 (short 9)
           
    HSSFPrintSetup ps sheet.getPrintSetup();
           
    ps.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);

           
    // Zeile erzeugen, um 1 erhöhen
           
    HSSFRow row sheet.createRow(zeile++);
           
    HSSFCell cell;

           
    // Überschriften erzeugen
           
    for (int i 0anzFieldsi++) {
               
    cell row.createCell((shorti);
               
    String label meta.getColumnLabel(i+1);

               
    // alte, mehrzeilige Columnheadings komprimieren (für Autofilter & Co)
               
    switch (label.length()) {
                   case 
    60:
                       
    label label.substring(019).trim() + " " +
                               
    label.substring(2039).trim() + " " +
                               
    label.substring(40).trim();
                       break;
                   case 
    40:
                       
    label label.substring(019).trim() + " " +
                               
    label.substring(2039).trim();
                       break;
                   default:
                       
    label label.trim();
               }

               
    cell.setCellValue(label);
               
    //  Spaltenbreite aus Metadaten holen (256=eine Zeichenbreite + etwas Abstand)
               
    sheet.setColumnWidth((shorti, (short) (meta.getColumnDisplaySize(i+1) * (256 16) + 512));
           }

           
    // Daten umschaufeln
           
    while (rs.next ()) {
               
    row sheet.createRow(zeile++);
               for (
    int i 0anzFieldsi++) {
                   
    cell row.createCell((shorti);
                   
    // zwischen numerisch unterscheiden, der Rest als String
                   
    if (meta.getColumnClassName(i+1).equals("java.math.BigDecimal")) {
                       
    cell.setCellValue(rs.getDouble(i+1));
                       
    cell.setCellType(cell.CELL_TYPE_NUMERIC);
                   } else {
                       
    cell.setCellValue(rs.getString(i+1));
                       
    cell.setCellType(cell.CELL_TYPE_STRING);
                   }

               }
           }

           
    rs.close();
           
    stmt.close();
           
    conn.close();

           
    // File schreiben
           
    try {
               
    FileOutputStream xlsFile = new FileOutputStream(outFile);
               
    wb.write(xlsFile);
               
    xlsFile.close();
           } catch (
    Exception e) {
               
    System.out.println("Fehler beim Erstellen von File " outFile ": " e);
           }
       }

       public static 
    void main (String args []) throws SQLException {

           if (
    args.length == 4) {
               try {
                   new 
    PoiDemo().run(args[0],args[1],args[2],args[3]);
               } catch (
    SQLException e) {
                  
    System.out.println("Datenbankfehler: " e);
               }
           } else {
               
    System.out.println("AS/400 DbFile2XLS");
               
    System.out.println("Parameter: AS400Lib/File IFS-OutFile User Password");
           }
       }

    Anmkerungen:
    1. Das Tool verwendet nicht die nativen DB2-Treiber
    2. Für den Normalgebrauch ist von metadata=true abzuraten. In diesem Fall ist das Absicht, damit man an die wirklichen Feldbezeichnungen kommt.
    3. wie gesagt, braucht viel Speicher bei großen XLS-Tabellen
    4. hier ein Beispielaufruf:
    PHP-Code:
    QSH

    java 
    -classpath /pfad:/pfad/poi-2.5.1.jar PoiDemo Lib/ARTIKEL /freigaben/Artikel.xls user pass 

Similar Threads

  1. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  2. EXCEL, PDF, ZIP, IDEA, e-mail, alles auf iSeries
    By Kilianski in forum NEWSboard Server Software
    Antworten: 0
    Letzter Beitrag: 22-11-06, 15:23
  3. RPG - Eine Datei 2x einbinden
    By TobiasHe in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 08-04-05, 08:44
  4. Excel - Dateigenerierung mit Java (POI/HSSF)
    By ErnieBaer in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-02-05, 15:03
  5. Datei aus Queryauswertung nach excel übertragen
    By Markus H in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 19-07-01, 19:21

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •