// gcc cbasic_excel.c -IC:\sbgcc\source libscriba.dll -lpthread -o cbasic_excel
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <getopt.h>
#include "scriba.h"
#include "cbasic.h"
MAIN
BEGIN_FUNCTION
DIM pSbProgram AS pProgram;
DIM pSbData AS arg;
DIM pSbData AS argr;
DIM int AS sb_call = 1;
DIM int AS sb_get = 2;
DIM int AS sb_let = 4;
DIM int AS sb_set = 8;
DIM int AS i, j;
DIM char AS src[] = "IMPORT sbembed.sbi\n";
scriba_LoadConfiguration(pProgram, "C:\\Windows\\SCRIBA.INI");
scriba_SetFileName(pProgram, "none");
scriba_LoadProgramString
(pProgram
, src
, strlen(src
)); scriba_Run(pProgram, "");
argr = scriba_NewSbArgs(pProgram,"u");
DIM int AS fn1 = scriba_LookupFunctionByName(pProgram, "main::sb_create");
DIM int AS fn2 = scriba_LookupFunctionByName(pProgram, "main::sb_cbn");
DIM int AS fn3 = scriba_LookupFunctionByName(pProgram, "main::sb_release");
arg = scriba_NewSbArgs(pProgram, "s", "Excel.Application");
scriba_CallArgEx(pProgram, fn1, argr, 1, arg);
DIM unsigned long AS oexcel = argr[0].v.l;
arg = scriba_NewSbArgs(pProgram, "i s i", oexcel, "Workbooks", sb_get);
scriba_CallArgEx(pProgram, fn2, argr, 3, arg);
DIM unsigned long AS oWorkBook = argr[0].v.l;
arg = scriba_NewSbArgs(pProgram, "i s i", oWorkBook, "Add", sb_call);
scriba_CallArgEx(pProgram, fn2, argr, 3, arg);
DIM unsigned long AS oExcelWorkbook = argr[0].v.l;
arg = scriba_NewSbArgs(pProgram, "i s i i", oExcelWorkbook, "Worksheets", sb_get, 1);
scriba_CallArgEx(pProgram, fn2, argr, 4, arg);
DIM unsigned long AS oExcelSheet = argr[0].v.l;
DIM unsigned long AS oCell;
DIM char AS cell_text[16];
DEF_FOR (i = 1 TO i <= 10 STEP INCR i)
BEGIN_FOR
DEF_FOR (j = 1 TO j <= 10 STEP INCR j)
BEGIN_FOR
arg = scriba_NewSbArgs(pProgram, "i s i i i", oExcelSheet, "Cells", sb_get, i, j);
scriba_CallArgEx(pProgram, fn2, argr, 5, arg);
oCell = argr[0].v.l;
sprintf(cell_text
, "test-%i-%i", i
, j
); arg = scriba_NewSbArgs(pProgram, "i s i s", oCell, "Value", sb_let, cell_text);
scriba_CallArgEx(pProgram, fn2, argr, 4, arg);
>> Release oCell before next assignment
arg = scriba_NewSbArgs(pProgram, "i", oCell);
scriba_CallArgEx(pProgram, fn3, argr, 1, arg);
NEXT
NEXT
arg = scriba_NewSbArgs(pProgram, "i s i s", oExcelWorkbook, "SaveAs", sb_call, "C:\\ScriptBASIC\\cbasic\\CBASIC_Excel.xls");
scriba_CallArgEx(pProgram, fn2, argr, 4, arg);
arg = scriba_NewSbArgs(pProgram, "i s i", oExcelWorkbook, "Close", sb_call);
scriba_CallArgEx(pProgram, fn2, argr, 3, arg);
arg = scriba_NewSbArgs(pProgram, "i s i", oexcel, "Quit", sb_call);
scriba_CallArgEx(pProgram, fn2, argr, 3, arg);
PRINT("Spreadsheet Created\n");
arg = scriba_NewSbArgs(pProgram, "i", oExcelSheet);
scriba_CallArgEx(pProgram, fn3, argr, 1, arg);
arg = scriba_NewSbArgs(pProgram, "i", oExcelWorkbook);
scriba_CallArgEx(pProgram, fn3, argr, 1, arg);
arg = scriba_NewSbArgs(pProgram, "i", oWorkBook);
scriba_CallArgEx(pProgram, fn3, argr, 1, arg);
arg = scriba_NewSbArgs(pProgram, "i", oexcel);
scriba_CallArgEx(pProgram, fn3, argr, 1, arg);
scriba_DestroySbArgs(pProgram, arg, 5);
scriba_DestroySbArgs(pProgram, argr, 1);
scriba_destroy(pProgram);
RETURN_FUNCTION(0);
END_FUNCTION