Kbase 17636: Source Code for E-DDEEX1.P Sample DDE Program (8.2+)
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  12/17/1998 |
|
Source Code for E-DDEEX1.P Sample DDE Program (8.2+)
/*------------------------------------------------------------------*/
/* E-DDEEX1.P - Sample Program Showing How To Do DDE To Excel */
/*------------------------------------------------------------------*/
/* Note Verify the path is correct for your machine */
&SCOPED-DEFINE LOC_EXCEL C:\Progra~1\Micros~1\Office\EXCEL.EXE
DEFINE VARIABLE ed AS CHARACTER NO-UNDO
VIEW-AS EDITOR SIZE 20 BY 2.
DEFINE VARIABLE listx AS CHARACTER NO-UNDO
VIEW-AS SELECTION-LIST SIZE 36 BY 5.
DEFINE VARIABLE itemn AS CHARACTER NO-UNDO.
DEFINE VARIABLE sty AS CHARACTER NO-UNDO.
DEFINE VARIABLE rowi AS INTEGER NO-UNDO.
DEFINE VARIABLE sys AS INTEGER NO-UNDO.
DEFINE VARIABLE sheet AS INTEGER NO-UNDO.
DEFINE VARIABLE result AS INTEGER NO-UNDO.
DEFINE VARIABLE log_i AS LOGICAL NO-UNDO.
DEFINE VARIABLE excelon AS LOGICAL NO-UNDO INITIAL False.
DEFINE BUTTON bq LABEL "Quit".
DEFINE BUTTON bg LABEL "Start Excel".
DEFINE FRAME MainFrame
SKIP(1) SPACE(1) bq SPACE(1) bg SPACE(1) SKIP(1)
SPACE(1) listx LABEL "DDE History" SPACE(1) SKIP(1)
SPACE(1) ed LABEL "Cell R4C2 (Row 4 Col B)" SKIP(1)
WITH SIDE-LABELS.
ENABLE ALL WITH FRAME MainFrame TITLE "Worksheet Monitor".
ASSIGN listx:DELIMITER = "|". /* No server commands use "|" */
PROCEDURE WinExec EXTERNAL "KERNEL32.DLL":
DEFINE INPUT PARAMETER prog_name AS CHARACTER.
DEFINE INPUT PARAMETER prog_style AS LONG.
DEFINE RETURN PARAMETER result AS LONG.
END PROCEDURE.
PROCEDURE LogExchange:
listx:ADD-LAST(FRAME MainFrame:DDE-NAME + " " +
FRAME MainFrame:DDE-TOPIC + " " +
FRAME MainFrame:DDE-ITEM) IN FRAME MainFrame.
END PROCEDURE.
ON CHOOSE OF bq IN FRAME MainFrame DO:
IF excelon = False THEN
RETURN.
DDE ADVISE sheet STOP ITEM "r4c2".
RUN LogExchange IN THIS-PROCEDURE.
DDE TERMINATE sheet.
RUN LogExchange IN THIS-PROCEDURE.
DDE EXECUTE sys COMMAND "[activate(~"sheet1~")]".
RUN LogExchange IN THIS-PROCEDURE.
DDE EXECUTE sys COMMAND "[close(0)]".
RUN LogExchange IN THIS-PROCEDURE.
DDE EXECUTE sys COMMAND "[activate(~"chart1~")]".
RUN LogExchange IN THIS-PROCEDURE.
DDE EXECUTE sys COMMAND "[close(0)]".
RUN LogExchange IN THIS-PROCEDURE.
DDE EXECUTE sys COMMAND "[error(0)]".
RUN LogExchange IN THIS-PROCEDURE.
DDE EXECUTE sys COMMAND "[quit()]".
RUN LogExchange IN THIS-PROCEDURE.
END.
ON CHOOSE OF bg IN FRAME MainFrame DO:
RUN WinExec (INPUT "{&LOC_EXCEL}", INPUT 2, OUTPUT result).
IF result > 32 THEN
ASSIGN excelon = True.
ELSE
DO:
MESSAGE "WinExec Failed, Code = " result
VIEW-AS ALERT-BOX.
RETURN.
END.
DDE INITIATE sys FRAME FRAME MainFrame:HANDLE
APPLICATION "Excel" TOPIC "System".
RUN LogExchange IN THIS-PROCEDURE.
IF sys = 0 THEN
DO:
MESSAGE "Excel not available".
RETURN.
END.
/* comment out the next 2 lines if you are using Excel 97 and
do not want to open a new book (book2) for the info being passed */
DDE EXECUTE sys COMMAND "[new(1)]".
RUN LogExchange IN THIS-PROCEDURE.
DDE INITIATE sheet FRAME FRAME MainFrame:HANDLE
/* change sheet1 to book1 for excel 97 */
APPLICATION "Excel" TOPIC "Sheet1".
RUN LogExchange IN THIS-PROCEDURE.
DDE SEND sheet SOURCE "Name" ITEM "r1c1".
RUN LogExchange IN THIS-PROCEDURE.
DDE SEND sheet SOURCE "Balance" ITEM "r1c2".
RUN LogExchange IN THIS-PROCEDURE.
DDE SEND sheet SOURCE "State" ITEM "r1c3".
RUN LogExchange IN THIS-PROCEDURE.
ASSIGN rowi = 2.
FOR EACH customer NO-LOCK WHERE balance < 5000 BY balance:
ASSIGN itemn = "R" + STRING(rowi) + "C1".
DDE SEND sheet SOURCE customer.name ITEM itemn.
RUN LogExchange IN THIS-PROCEDURE.
ASSIGN itemn = "R" + STRING(rowi) + "C2".
DDE SEND sheet SOURCE STRING(customer.balance) ITEM itemn.
RUN LogExchange IN THIS-PROCEDURE.
ASSIGN itemn = "R" + STRING(rowi) + "C3".
DDE SEND sheet SOURCE STRING(customer.state) ITEM itemn.
RUN LogExchange IN THIS-PROCEDURE.
ASSIGN rowi = rowi + 1.
END.
DDE EXECUTE sheet COMMAND "[select(~"C1:C2~")]".
RUN LogExchange IN THIS-PROCEDURE.
DDE EXECUTE sys COMMAND "[column.width(,,,3)]".
RUN LogExchange IN THIS-PROCEDURE.
DDE EXECUTE sys COMMAND "[format.number(~"$#,##0~")]".
RUN LogExchange IN THIS-PROCEDURE.
DDE EXECUTE sheet COMMAND "[select(~"C1:C2~")]".
RUN LogExchange IN THIS-PROCEDURE.
DDE EXECUTE sys COMMAND "[new(2,1,1)]".
RUN LogExchange IN THIS-PROCEDURE.
DDE EXECUTE sys COMMAND "[activate(~"chart1~")]".
RUN LogExchange IN THIS-PROCEDURE.
DDE EXECUTE sys COMMAND "[gallery.3d.pie(3)]".
RUN LogExchange IN THIS-PROCEDURE.
DDE EXECUTE sys COMMAND "[app.restore()]".
RUN LogExchange IN THIS-PROCEDURE.
DDE EXECUTE sys COMMAND "[arrange.all()]".
RUN LogExchange IN THIS-PROCEDURE.
DDE ADVISE sheet START ITEM "r4c2".
RUN LogExchange IN THIS-PROCEDURE.
END.
ON DDE-NOTIFY OF FRAME MainFrame DO:
DDE GET sheet TARGET sty ITEM "r4c2".
RUN LogExchange IN THIS-PROCEDURE.
ASSIGN sty = SUBSTR(sty, 1, 20) /* Drop the CR/LF */
ed:SCREEN-VALUE IN FRAME MainFrame = sty.
END.
WAIT-FOR CHOOSE OF bq IN FRAME MainFrame.
NOTE: This knowledgebase has been written and tested against Excel
with language by default english. If you are having problems to run
this example using another language on your Excel application, then
the problem is an error translating the text strings. Review your
code and check your Microsoft documentation.
Modified: Ebi (17-Dec-98)
Progress Software Technical Support Note # 17636