[NEWSboard IBMi Forum]

Thema: Libxlsxwriter

Hybrid View

  1. #1
    Registriert seit
    Aug 2014
    Beiträge
    179
    Ich habe es unter 7.2 hinbekommen und musste dazu die makefile.ibm etwas modifizieren

    Anbei ein Programm, dass folgende Excel-Tabelle erstellt

    Click image for larger version. 

Name:	capture20181213093005989.png 
Views:	16 
Size:	26,6 KB 
ID:	497

    Code:
             ctl-opt main(main) dftactgrp(*no) alloc(*teraspace)                                                            
                     actgrp('CRTEXCEL') bnddir('LIBXLSX');                                                                  
          //------------------------------------------------------------------//                                            
          //                                                                  //                                            
          // Create Excel-Sheet                                               //                                            
          //                                                                  //                                            
          //-----------------                                                 //                                            
          // R.Ross 03.2018 *                                                 //                                            
          //------------------------------------------------------------------//                                            
          // Prototypes                                                       //                                            
          //------------------------------------------------------------------//                                            
                                                                                                                            
          /include libxlsx/qcpysrc,xlsxwriter                                                                               
                                                                                                                            
          //------------------------------------------------------------------//                                            
          // Main                                                             //                                            
          //------------------------------------------------------------------//                                            
             dcl-proc main;                                                                                                 
                                                                                                                            
             dcl-s   workbook    pointer;                                                                                   
             dcl-s   worksheet   pointer;                                                                                   
             dcl-s   format01    pointer;                                                                                   
             dcl-s   format02    pointer;                                                                                   
             dcl-s   bold        pointer;                                                                                   
                                                                                                                            
               workbook  = workbook_new('/tmp/xlsx/formula.xlsx');                                                          
               worksheet = workbook_add_worksheet(workbook:'Testsheet 1');                                                  
                                                                                                                            
               format01  = workbook_add_format(workbook);                                                                   
               format_set_num_format(format01:'#,##0.00');                                                                  
               format02  = workbook_add_format(workbook);                                                                   
               format_set_num_format(format02:'#,##0.00');                                                                  
               format_set_bold(format02);                                                                                   
                                                                                                                            
               bold      = workbook_add_format(workbook);                                                                   
               format_set_bold(bold);                                                                                       
                                                                                                                            
               worksheet_write_string(worksheet:0:0:'Monat':*null);                                                         
               worksheet_write_string(worksheet:0:1:'Umsatz':*null);                                                        
                                                                                                                            
               worksheet_write_string(worksheet:1:0:'Januar':*null);                                                        
               worksheet_write_string(worksheet:2:0:'Februar':*null);                                                       
               worksheet_write_string(worksheet:3:0:'März':*null);                                                          
               worksheet_write_string(worksheet:4:0:'April':*null);                                                         
               worksheet_write_string(worksheet:5:0:'Mai':*null);                                                           
                                                                                                                            
               worksheet_write_number(worksheet:1:1:6250:format01);                                                         
               worksheet_write_number(worksheet:2:1:3580:format01);                                                         
               worksheet_write_number(worksheet:3:1:780:format01);                                                          
               worksheet_write_number(worksheet:4:1:43580:format01);                                                        
               worksheet_write_number(worksheet:5:1:22890:format01);                                                        
                                                                                                                            
               worksheet_write_string(worksheet:6:0:'Summe':bold);                                                          
                                                                                                                            
               worksheet_write_formula(worksheet:6:1:'=SUM(B2:B6)':format02);                                               
                                                                                                                            
               workbook_close(workbook);                                                                                    
                                                                                                                            
             end-proc;                                                                                                      
          //------------------------------------------------------------------//

  2. #2
    Registriert seit
    May 2007
    Beiträge
    295
    Zitat Zitat von Rainer Ross Beitrag anzeigen
    Ich habe es unter 7.2 hinbekommen und musste dazu die makefile.ibm etwas modifizieren
    Hallo. Rein interessenshalber wäre es spannend zu wissen was geändert werden musste?

    Danke und Greets
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  3. #3
    Registriert seit
    Aug 2014
    Beiträge
    179
    Hallo. Rein interessenshalber wäre es spannend zu wissen was geändert werden musste?
    - In die makefile.ibm die ccsid eingefügt

    CCFLAGS=OUTPUT(*PRINT) OPTIMIZE(10) DBGVIEW(*SOURCE) TGTCCSID(1141) ENUM(*INT) TERASPACE(*YES) STGMDL(*INHERIT) DEFINE(USE_STANDARD_TMPFILE USE_BIG_ENDIAN LXW_HAS_SNPRINTF) SYSIFCOPT(*IFS64IO) INCDIR('../include' '$(ZLIB_INC)' '../third_party/minizip')

    - Die Exports aus der exports.bnd in die LIBXLSX/QSRVSRC(EXPORTS BND) eingefügt
    - Das CRTSRVPGM mit der neuen EXPORTS geändert

    CRTSRVPGM SRVPGM(LIBXLSX/LIBXLSX) MODULE(LIBXLSX/*ALL) STGMDL(*INHERIT) EXPORT(*SRCFILE) SRCFILE($(BIN_LIB)/QSRVSRC) SRCMBR(EXPORTS) TEXT('libxlsxwriter : creating Excel files natively') BNDSRVPGM(ZLIB/ZLIB)

    Hier die neue makefile.ibm

    Code:
    #
    # Build script for libxlsxwriter
    #
    
    #The library can be installed by entering QShell (qsh) and using the Makefile.ibm script like this
    
    #cd /home/projects/libxlsxwriter/src
    #make -f Makefile.ibm
    
    #-----------------------------------------------------------
    # User-defined part start
    #
    
    # BIN_LIB is the destination library for the service program.
    # the rpg modules and the binder source file are also created in BIN_LIB.
    # binder source file and rpg module can be remove with the clean step (make clean)
    BIN_LIB=LIBXLSX
    
    # to this folder the header files (prototypes) are copied in the install step
    INCLUDE=/home/projects/libxlsxwriter/include
    
    # this folder should include the C header files from the zlib project
    ZLIB_INC=/zlib/include
    
    # CCFLAGS = C compiler parameter
    CCFLAGS=OUTPUT(*PRINT) OPTIMIZE(10) DBGVIEW(*SOURCE) TGTCCSID(1141) ENUM(*INT) TERASPACE(*YES) STGMDL(*INHERIT) DEFINE(USE_STANDARD_TMPFILE USE_BIG_ENDIAN LXW_HAS_SNPRINTF) SYSIFCOPT(*IFS64IO) INCDIR('../include' '$(ZLIB_INC)' '../third_party/minizip')
    
    
    #
    # User-defined part end
    #-----------------------------------------------------------
     
     
    .SUFFIXES: .rpgle .c .cpp
     
    # suffix rules
    .rpgle:
        system "CRTRPGMOD $(BIN_LIB)/$@ SRCSTMF('$<') $(RCFLAGS)"
    .c:
        system "CRTCMOD MODULE($(BIN_LIB)/$@ SRCSTMF('$<' $(CCFLAGS)
                   
    all: clean compile bind install
    
    compile: thirdparty
        system "CRTCMOD MODULE($(BIN_LIB)/XLSXAPP) SRCSTMF('app.c') $(CCFLAGS)"
        system "CRTCMOD MODULE($(BIN_LIB)/XLSXCHART) SRCSTMF('chart.c') $(CCFLAGS)"
        system "CRTCMOD MODULE($(BIN_LIB)/XLSXCONTNT) SRCSTMF('content_types.c') $(CCFLAGS)"
        system "CRTCMOD MODULE($(BIN_LIB)/XLSXCORE) SRCSTMF('core.c') $(CCFLAGS)"
        system "CRTCMOD MODULE($(BIN_LIB)/XLSXCUSTOM) SRCSTMF('custom.c') $(CCFLAGS)"
        system "CRTCMOD MODULE($(BIN_LIB)/XLSXDRAW) SRCSTMF('drawing.c') $(CCFLAGS)"
        system "CRTCMOD MODULE($(BIN_LIB)/XLSXFORMAT) SRCSTMF('format.c') $(CCFLAGS)"
        system "CRTCMOD MODULE($(BIN_LIB)/XLSXHASH) SRCSTMF('hash_table.c') $(CCFLAGS)"
        system "CRTCMOD MODULE($(BIN_LIB)/XLSXPACKAG) SRCSTMF('packager.c') $(CCFLAGS)"
        system "CRTCMOD MODULE($(BIN_LIB)/XLSXRELATI) SRCSTMF('relationships.c') $(CCFLAGS)"
        system "CRTCMOD MODULE($(BIN_LIB)/XLSXSTRING) SRCSTMF('shared_strings.c') $(CCFLAGS)"
        system "CRTCMOD MODULE($(BIN_LIB)/XLSXSTYLES) SRCSTMF('styles.c') $(CCFLAGS)"
        system "CRTCMOD MODULE($(BIN_LIB)/XLSXTHEME) SRCSTMF('theme.c') $(CCFLAGS)"
        system "CRTCMOD MODULE($(BIN_LIB)/XLSXUTIL) SRCSTMF('utility.c') $(CCFLAGS)"
        system "CRTCMOD MODULE($(BIN_LIB)/XLSXWBOOK) SRCSTMF('workbook.c') $(CCFLAGS)"
        system "CRTCMOD MODULE($(BIN_LIB)/XLSXWSHEET) SRCSTMF('worksheet.c') $(CCFLAGS)"
        system "CRTCMOD MODULE($(BIN_LIB)/XLSXWRITER) SRCSTMF('xmlwriter.c') $(CCFLAGS)"
    
    thirdparty:
        system "CRTCMOD MODULE($(BIN_LIB)/IOAPI) SRCSTMF('../third_party/minizip/ioapi.c') $(CCFLAGS)"        
        system "CRTCMOD MODULE($(BIN_LIB)/ZIP) SRCSTMF('../third_party/minizip/zip.c') $(CCFLAGS)"
    
    bind:
        system -kpieb "CRTSRVPGM SRVPGM(LIBXLSX/LIBXLSX) MODULE(LIBXLSX/*ALL) STGMDL(*INHERIT) SRCFILE($(BIN_LIB)/QSRVSRC) SRCMBR(EXPORTS) BNDSRVPGM(ZLIB/ZLIB) TEXT('libxlsxwriter : creating Excel files natively')"
    
    util:
        system -kpieb "CRTCMOD MODULE($(BIN_LIB)/XLSXUTIL) SRCSTMF('utility.c') $(CCFLAGS)"
    
    packager:
        system "CRTCMOD MODULE($(BIN_LIB)/XLSXPACKAG) SRCSTMF('packager.c') $(CCFLAGS)"
    
    
    install:
    
    clean:
        -system "DLTMOD $(BIN_LIB)/XLSXAPP"
        -system "DLTMOD $(BIN_LIB)/XLSXCHART"
        -system "DLTMOD $(BIN_LIB)/XLSXCONTNT"
        -system "DLTMOD $(BIN_LIB)/XLSXCORE"
        -system "DLTMOD $(BIN_LIB)/XLSXCUSTOM"
        -system "DLTMOD $(BIN_LIB)/XLSXDRAW"
        -system "DLTMOD $(BIN_LIB)/XLSXFORMAT"
        -system "DLTMOD $(BIN_LIB)/XLSXHASH"
        -system "DLTMOD $(BIN_LIB)/XLSXPACKAG"
        -system "DLTMOD $(BIN_LIB)/XLSXRELATI"
        -system "DLTMOD $(BIN_LIB)/XLSXSTRING"
        -system "DLTMOD $(BIN_LIB)/XLSXSTYLES"
        -system "DLTMOD $(BIN_LIB)/XLSXTHEME"
        -system "DLTMOD $(BIN_LIB)/XLSXUTIL"
        -system "DLTMOD $(BIN_LIB)/XLSXWBOOK"
        -system "DLTMOD $(BIN_LIB)/XLSXWSHEET"
        -system "DLTMOD $(BIN_LIB)/XLSXWRITER"
        -system "DLTMOD $(BIN_LIB)/IOAPI"
        -system "DLTMOD $(BIN_LIB)/ZIP"
    
    dist-clean: clean
        -system "DLTSRVPGM $(BIN_LIB)/LIBXLSX"
           
    .PHONY:

  4. #4
    Registriert seit
    May 2007
    Beiträge
    295
    Vielen Dank.
    Da kommt man vom 100sten ins 1000ste ...
    Mir fehlt auch noch das ZLIB. Jetzt gehts los :-D
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  5. #5
    Registriert seit
    Aug 2014
    Beiträge
    179
    Hallo,

    ich habe zwei Savefiles für die LIBXLSX und ZLIB für 7.2 zum Download erstellt
    https://bitbucket.org/Rainer_Ross/li...ter/downloads/

    Viele Grüße
    Rainer

  6. #6
    Registriert seit
    Sep 2005
    Beiträge
    393
    OffTopic ..

    ganz ehrlich ... Toll was so alles geht!

    Aber wenn ich bedenke welcher optische Aufwand in den Excel Ausgaben für unsere 'Chefs' betrieben wird, währe es für mich der Horror das mit diesem, sicherlich tollen, Tool zu machen.

    bei uns macht 'Irgendwer' das Excel so fertig, wie es werden soll und wir laden die Daten wie von Fuerchau beschrieben oder verwenden ein Tool (haben wir von Meinikat gekauft)
    und exportieren unsere Daten programmiert mit select * from ...where ...
    Egal ob einzelnde Felder oder riesige Tabellen.
    Ich kann gezielt in ner Spalte auf setzen oder nach einem Inhalt suchen und ab dem die Daten schreiben.

    mit einem Pgm ein Excel zu designen ...
    Nein, bestimmt nicht!

    Der ILEMax

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.254
    Nun ja, der obige Ansatz ist halt etwas komplizierter als ein CPYFRMIMPF.
    Diese Ausgabe kann von Excel auch ganz einfach geöffnet werden.

    Aber die Datenimporte von Excel sind da viel einfacher, keine Programmierung, besseres Arbeiten mit den Ergebnissen.
    Aktualisieren ist mit obiger Methode eher nicht möglich.

    Ich kann Datenimporte auch direkt in eine Pivot/PowerPivot-Tabelle machen.
    Mach dies mal mit obigem Tool.
    Der Aufwand ist geradezu unverhältnismäßig.

    Und wo ist da das berühmte WYSIWYG?
    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

  8. #8
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    Also wir stellen unseren Benutzern da auch eher diverse Excel-Templates zur Verfügung, die ein wenig VBA-Code enthalten. Damit kann jeder Benutzer bei Bedarf die Daten aktualisieren und die Datenaufbereitung bzw. das Layout wird auch per VBA gesteuert.

    GRuß,
    KM

  9. #9
    Registriert seit
    May 2007
    Beiträge
    295
    Natürlich sind die Methoden über den Import (CA oder ODBC etc) um einiges einfacher und konfortabler. Wird bei uns hier in der Bude auch so gelebt.

    Ich war nur positiv überrascht was es nicht schon so alles gibt auf der IBMi
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  10. #10
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    Eine weitere Möglichkeit AS/400-Daten in XLSX zu bringen wäre noch Node.js. Hier gibt es ein Tutorial von Scott Klement.

    https://www.scottklement.com/present...%20IBM%20i.pdf

    Ich denke gerade mit Node.js wird man in Zukunft noch viel mehr auf der AS/400 machen.

    Gruß,
    KM

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.254
    "...in Zukunft noch viel mehr auf der AS/400 machen"

    Nun ja, da der Nachwuchs fehlt, wird daraus eher "...in Zukunft fast nichts mehr auf der AS/400 machen".
    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

Berechtigungen

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