// obtain parameters from create_params
NParams = coa_GetElementCount(cnx, create_params);
for(pos = 0; pos<NParams; pos+=2)
{
if (!strcmp(coa_GetElement(cnx, create_params, pos),"name")) name = ap_pstrdup(p, coa_GetElement(cnx,create_params, pos+1));
if (!strcmp(coa_GetElement(cnx, create_params, pos),"columns")) str_cols = ap_pstrdup(p, coa_GetElement(cnx,create_params, pos+1));
if (!strcmp(coa_GetElement(cnx, create_params, pos),"rows")) str_rows = ap_pstrdup(p, coa_GetElement(cnx,create_params, pos+1));
}

cols = strtol(str_cols, NULL, 10);
rows = strtol(str_rows, NULL, 10);

if(cols < 1) cols = 1;
if(rows < 1) rows = 1;

if(rows > 200)
{
rows = 200;
cou_sendMessageX(cnx, "Maksymalnie możesz podać 200 dla ilości wierszy", CO_MSG_FORCE);
}

if(cols > 200)
{
cols = 200;
cou_sendMessageX(cnx, "Maksymalnie możesz podać 200 dla ilości kolumn", CO_MSG_FORCE);
}

// create spreadsheet

@co_call(par_area,'"generic_acl"',"create",par_area=>par_area,par_class=>'"spreadsheet"',par_id=>-1,dont_set_acl=>dont_set_acl);

__GET_RETURNED_INTEGER(new_id)

check_security = cnx->check_security;
cnx->check_security = 0;
@co_call(par_area,par_class,"update",par_area=>par_area,par_class=>'"spreadsheet"',version=>0,par_id=>new_id,par_prop=>'"name"',new_value=>name);
cnx->check_security = check_security;

// create rows
for (i=0;i<rows;i++)
{
__CREATE_QUERY("INSERT INTO co_%s_spreadsheet_row(row_number,spreadsheet_id) VALUES(%d,%d)",par_area,i+1,new_id)
__SQL_EXEC
}

// create columns
for (i=0;i<cols;i++)
{
__CREATE_QUERY("INSERT INTO co_%s_spreadsheet_column(column_number,spreadsheet_id) VALUES(%d,%d)",par_area,i+1,new_id)
__SQL_EXEC
}

__RETURN_INTEGER( new_id)