Anmelden

View Full Version : Excel mit ACS in Batch erstellen



camouflage
05-04-22, 16:20
Nachdem ich hier im Forum manchmal durch Motz oder Unwissenheit aufgefallen bin, möchte ich auch etwas zurückgeben. Öfters wird nach dem Transfer in Excel gefragt und meistens als Antwort auf das schnöde CSV verwiesen. Dabei lassen sich via ACS auch in Batch Excel Dateien erstellen, nicht schnell aber immerhin und für lau.

Hier der Code als CLLE:



/* Batch Excel Transfer mit ACS */
/* ---------------------------------------- mylogic.io */
PGM PARM(&LIB &FILE &XLSFILE)


DCL VAR(&LIB) TYPE(*CHAR) LEN(10)
DCL VAR(&FILE) TYPE(*CHAR) LEN(10)
DCL VAR(&XLSFILE) TYPE(*CHAR) LEN(30)
DCL VAR(&SYSNAME) TYPE(*CHAR) LEN(8)
DCL VAR(&JAVA) TYPE(*CHAR) LEN(1500)


DCL VAR(&HOME) TYPE(*CHAR) LEN(50) +
VALUE('/QOpenSys/QIBM/ProdData/JavaVM/jdk80/64bit')
DCL VAR(&JARNAME) TYPE(*CHAR) LEN(50) +
VALUE('/QIBM/ProdData/Access/ACS/Base/acsbundle.jar')


/* Check Parameters */
IF COND((&LIB *EQ ' ') *OR (&FILE *EQ ' ') *OR +
(&XLSFILE *EQ ' ')) THEN(RETURN)


/* Get System Name */
RTVNETA SYSNAME(&SYSNAME)


/* Set Environment */
ADDENVVAR ENVVAR(JAVA_HOME) VALUE(&HOME) LEVEL(*SYS) +
REPLACE(*YES)
MONMSG MSGID(CPF0000)
/* Set no Messages */
ADDENVVAR ENVVAR(QIBM_QSH_CMD_OUTPUT) VALUE(NONE) +
LEVEL(*JOB) REPLACE(*YES)
MONMSG MSGID(CPF0000)


/* Create Java String */
CHGVAR VAR(&JAVA) VALUE('java +
-Dcom.ibm.iaccess.ActLikeExternal=true -jar')
CHGVAR VAR(&JAVA) VALUE(&JAVA *bcat &JARNAME)
CHGVAR VAR(&JAVA) VALUE(&JAVA *bcat +
'/plugin=cldownload /system=')
/* add Systemname */
CHGVAR VAR(&JAVA) VALUE(&JAVA *tcat &SYSNAME)
CHGVAR VAR(&JAVA) VALUE(&JAVA *bcat '/clientfile=')
/* add XLS Filename (/Pfad/File.xlsx) */
CHGVAR VAR(&JAVA) VALUE(&JAVA *tcat &XLSFILE)
/* SQL String */
CHGVAR VAR(&JAVA) VALUE(&JAVA *bcat '/sql="select * +
from')
CHGVAR VAR(&JAVA) VALUE(&JAVA *BCAT &LIB *TCAT '/' +
*CAT &FILE)
CHGVAR VAR(&JAVA) VALUE(&JAVA *tcat '"')
/* Header Columns 0=keine, 1=Feldnamen */
/* CHGVAR VAR(&JAVA) VALUE(&JAVA *bcat '/colheadings=0') */
/* Header Columns Bezeichnung */
CHGVAR VAR(&JAVA) VALUE(&JAVA *bcat '/usecollabels')


/* Java Call */
QSH CMD(&JAVA)
RMVENVVAR ENVVAR(JAVA_HOME)
MONMSG MSGID(CPF0000)


ENDPGM

Fuerchau
05-04-22, 17:17
Was mir am Excel-Output des ACS nur aufgefallen ist, dass Zahlen als String in Excel abgelegt werden.
Im Excel muss man dann immer noch die Zellen als Zahl umrechnen lassen.
Dies geht dann per Klick auf das rote Dreieck einer Zelle bzw. eines markierten Bereichs.
Wobei Excel bei NULL-Werten, also leeren Zellen, dann wieder streikt.

Dies ist unabhängig von der Dezimaleinstellung (Punkt, Komma) der Java-Connection.
Hast du da auch eine Lösung für?

camouflage
05-04-22, 17:29
Hallo Baldur,
Ist mir nicht aufgefallen. Die Zahlen in Excel werden korrekt dargestellt.
Abgesehen davon, kannst Du ja im CL auch einen SQL-String zusammenbasteln, bis du lustig bist.