function xls_read($sequence = -1)
 {
     global $_CAMILA;
     if ($this->interactive) {
         $filename = $_REQUEST['configurator_filename'];
         $sheetnum = $_REQUEST['configurator_sheet'] - 1;
         $name = $_REQUEST['configurator_wtname'];
         $desc = $_REQUEST['configurator_wtdesc'];
         $this->db = $_CAMILA['db'];
     } else {
         $filename = $this->filename;
         $sheetnum = $this->sheetnum;
         $name = 'name';
         $desc = 'desc';
     }
     $success = true;
     $result = $this->db->Execute('select max(id) as id from ' . CAMILA_TABLE_WORKT);
     if ($result === false) {
         camila_error_page(camila_get_translation('camila.sqlerror') . ' ' . $this->db->ErrorMsg());
     }
     $id = intval($result->fields['id']) + 1;
     $record['id'] = $id;
     $record['status'] = 'd';
     $record['active'] = 'n';
     $record['filename'] = basename($filename);
     $record['sheetnum'] = $sheetnum;
     $record['scriptname'] = 'cf_worktable' . $id . '.php';
     $record['short_title'] = $name;
     $record['full_title'] = $desc;
     $record['tablename'] = CAMILA_TABLE_WORKP . $id;
     $record['sequence'] = $sequence > 0 ? $sequence : $id;
     $insertSQL = $this->db->AutoExecute(CAMILA_TABLE_WORKT, $record, 'INSERT');
     if (!$insertSQL) {
         camila_information_text(camila_get_translation('camila.worktable.db.error'));
         $success = false;
     }
     if ($filename != '') {
         require_once CAMILA_LIB_DIR . 'php-excel-reader/excel_reader2.php';
         if ($this->interactive) {
             $data = new Spreadsheet_Excel_Reader(CAMILA_TMP_DIR . '/' . $filename);
         } else {
             $data = new Spreadsheet_Excel_Reader($filename);
         }
         $fmt = str_replace(array('d', 'm', 'y'), array('dd', 'mm', 'yyyy'), strtolower($_CAMILA['date_format']));
         $datefmt = preg_replace('/[^a-z0-9]/', '', $fmt);
         $i = 1;
         while ($data->val(1, $i, $sheetnum) != '') {
             $cols[$i - 1] = $data->val(1, $i, $sheetnum);
             //print_r($data->sheets[$sheetnum]['cellsInfo']);
             for ($j = 1; $j <= $data->rowcount($sheetnum); $j++) {
                 $curr = $data->type($j, $i, $sheetnum);
                 if ($data->sheets[$sheetnum]['cellsInfo'][$j][$i]['hyperlink']['link'] != '') {
                     $curr = 'hyperlink';
                 }
                 if ($curr != '') {
                     $safefmt = strtolower(preg_replace('/[^a-z0-9]/', '', $data->read16bitstring($data->sheets[$sheetnum]['cellsInfo'][$j][$i]['format'], 0)));
                     //echo $data->read16bitstring($data->sheets[$sheetnum]['cellsInfo'][$j][$i]['format'],0);
                     if ($curr == 'unknown' && $safefmt == $datefmt) {
                         $curr = 'date';
                     }
                     $types[$i - 1] = $curr;
                     continue;
                 }
             }
             $i++;
         }
         if (!$this->interactive || $sheetnum + 2 <= count($data->sheets) && $this->is_configuration_sheet($data, $sheetnum + 1)) {
             $colNum = count($cols);
             $fieldArr = array();
             for ($i = 0; $i < $colNum; $i++) {
                 //echo $data->val(2, 2 + $i, $sheetnum + 1);
                 $name = $data->val(1, 2 + $i, $sheetnum + 1);
                 $sequence = $data->val(2, 2 + $i, $sheetnum + 1);
                 $nameAbbrev = $data->val(3, 2 + $i, $sheetnum + 1);
                 $type = $data->val(4, 2 + $i, $sheetnum + 1);
                 $listboxOptions = $data->val(5, 2 + $i, $sheetnum + 1);
                 $maxLength = $data->val(6, 2 + $i, $sheetnum + 1);
                 $required = $data->val(7, 2 + $i, $sheetnum + 1);
                 $defaultValue = $data->val(8, 2 + $i, $sheetnum + 1);
                 $readonly = $data->val(9, 2 + $i, $sheetnum + 1);
                 $visible = $data->val(10, 2 + $i, $sheetnum + 1);
                 $forceCase = $data->val(11, 2 + $i, $sheetnum + 1);
                 $mustBeUnique = $data->val(12, 2 + $i, $sheetnum + 1);
                 $fieldOptions = $data->val(13, 2 + $i, $sheetnum + 1);
                 $autosuggestWorktableName = $data->val(14, 2 + $i, $sheetnum + 1);
                 $autosuggestWorktableColName = $data->val(15, 2 + $i, $sheetnum + 1);
                 $name = isUTF8($name) ? $name : utf8_encode($name);
                 $sequence = isUTF8($sequence) ? $sequence : utf8_encode($sequence);
                 $nameAbbrev = isUTF8($nameAbbrev) ? $nameAbbrev : utf8_encode($nameAbbrev);
                 $type = isUTF8($type) ? $type : utf8_encode($type);
                 $listboxOptions = isUTF8($listboxOptions) ? $listboxOptions : utf8_encode($listboxOptions);
                 $maxLength = isUTF8($maxLength) ? $maxLength : utf8_encode($maxLength);
                 $required = isUTF8($required) ? $required : utf8_encode($required);
                 $defaultValue = isUTF8($defaultValue) ? $defaultValue : utf8_encode($defaultValue);
                 $readonly = isUTF8($readonly) ? $readonly : utf8_encode($readonly);
                 $visible = isUTF8($visible) ? $visible : utf8_encode($visible);
                 $forceCase = isUTF8($forceCase) ? $forceCase : utf8_encode($forceCase);
                 $mustBeUnique = isUTF8($mustBeUnique) ? $mustBeUnique : utf8_encode($mustBeUnique);
                 $fieldOptions = isUTF8($fieldOptions) ? $fieldOptions : utf8_encode($fieldOptions);
                 $autosuggestWorktableName = isUTF8($autosuggestWorktableName) ? $autosuggestWorktableName : utf8_encode($autosuggestWorktableName);
                 $autosuggestWorktableColName = isUTF8($autosuggestWorktableColName) ? $autosuggestWorktableColName : utf8_encode($autosuggestWorktableColName);
                 if ($this->interactive) {
                     $yesNoArr = camila_get_translation_array('camila.worktable.options.noyes');
                     $fieldTypeArr = camila_get_translation_array('camila.worktable.options.fieldtype');
                     $forceArr = camila_get_translation_array('camila.worktable.options.force');
                     $orderDirArr = camila_get_translation_array('camila.worktable.options.order.dir');
                 } else {
                     $yesNoArr = $this->get_translation_array('camila.worktable.options.noyes');
                     $fieldTypeArr = $this->get_translation_array('camila.worktable.options.fieldtype');
                     $forceArr = $this->get_translation_array('camila.worktable.options.force');
                     $orderDirArr = $this->get_translation_array('camila.worktable.options.order.dir');
                 }
                 $record = array();
                 $record['wt_id'] = $id;
                 $record['applied_to_database'] = 'n';
                 $record['is_deleted'] = 'n';
                 //$record['orig_name'] = preg_replace("/[\n\r]/", "", $value);
                 //$record['orig_type'] = $types[$key];
                 $record['type'] = array_search($type, $fieldTypeArr);
                 $record['listbox_options'] = $listboxOptions;
                 $record['name'] = preg_replace("/[\n\r]/", ' ', $name);
                 $record['col_name'] = $this->get_field_name($name);
                 $record['name_abbrev'] = $nameAbbrev;
                 $record['readonly'] = array_search($readonly, $yesNoArr);
                 $record['must_be_unique'] = array_search($mustBeUnique, $yesNoArr);
                 $record['visible'] = array_search($visible, $yesNoArr);
                 $record['required'] = array_search($required, $yesNoArr);
                 $record['sequence'] = $sequence;
                 $record['maxlength'] = $maxLength;
                 $record['size'] = $this->default_size[$record['type']];
                 $record['force_case'] = array_search($forceCase, $forceArr);
                 $record['default_value'] = $defaultValue;
                 $record['field_options'] = $fieldOptions;
                 $record['autosuggest_wt_name'] = $autosuggestWorktableName;
                 $record['autosuggest_wt_colname'] = $autosuggestWorktableColName;
                 $insertSQL = $this->db->AutoExecute(CAMILA_TABLE_WORKC, $record, 'INSERT');
                 if (!$insertSQL) {
                     camila_information_text(camila_get_translation('camila.worktable.db.error'));
                     $success = false;
                 }
                 $fieldArr[$record['col_name']] = $record['name'];
             }
             $shortTitle = $data->val(18, 2, $sheetnum + 1);
             $fullTitle = $data->val(19, 2, $sheetnum + 1);
             $orderField = $data->val(20, 2, $sheetnum + 1);
             $orderDir = $data->val(21, 2, $sheetnum + 1);
             $canUpdate = $data->val(22, 2, $sheetnum + 1);
             $canInsert = $data->val(23, 2, $sheetnum + 1);
             $canDelete = $data->val(24, 2, $sheetnum + 1);
             $category = $data->val(25, 2, $sheetnum + 1);
             $shortTitle = isUTF8($shortTitle) ? $shortTitle : utf8_encode($shortTitle);
             $fullTitle = isUTF8($fullTitle) ? $fullTitle : utf8_encode($fullTitle);
             $orderField = isUTF8($orderField) ? $orderField : utf8_encode($orderField);
             $orderDir = isUTF8($orderDir) ? $orderDir : utf8_encode($orderDir);
             $canUpdate = isUTF8($canUpdate) ? $canUpdate : utf8_encode($canUpdate);
             $canInsert = isUTF8($canInsert) ? $canInsert : utf8_encode($canInsert);
             $canDelete = isUTF8($canDelete) ? $canDelete : utf8_encode($canDelete);
             $category = isUTF8($category) ? $category : utf8_encode($category);
             $record = array();
             $record['id'] = $id;
             $record['short_title'] = $shortTitle;
             $record['full_title'] = $fullTitle;
             $record['order_field'] = array_search($orderField, $fieldArr);
             $record['order_dir'] = array_search($orderDir, $orderDirArr);
             $record['canupdate'] = array_search($canUpdate, $yesNoArr);
             $record['caninsert'] = array_search($canInsert, $yesNoArr);
             $record['candelete'] = array_search($canDelete, $yesNoArr);
             $record['category'] = $category;
             $updateSQL = $this->db->AutoExecute(CAMILA_TABLE_WORKT, $record, 'UPDATE', 'id=' . $this->db->qstr($id));
             if (!$updateSQL) {
                 camila_information_text(camila_get_translation('camila.worktable.db.error'));
                 $success = false;
             }
             $j = 0;
             while ($data->val(18 + $j, 3, $sheetnum + 1) != '') {
                 $title = $data->val(18 + $j, 3, $sheetnum + 1);
                 $title = isUTF8($title) ? $title : utf8_encode($title);
                 $url = $data->val(18 + $j, 4, $sheetnum + 1);
                 $url = isUTF8($url) ? $url : utf8_encode($url);
                 $record['id'] = $this->db->GenID(CAMILA_APPLICATION_PREFIX . 'bookmarkseq', 10000);
                 $record['title'] = $title;
                 $record['base_url'] = 'cf_worktable' . $id . '.php';
                 $record['url'] = $record['base_url'];
                 if ($url != '') {
                     $record['url'] .= '?filter=' . urlencode($url);
                 }
                 $record['lang'] = $_REQUEST['lang'];
                 $record['sequence'] = $j + 1;
                 $insertSQL = $this->db->AutoExecute(CAMILA_APPLICATION_PREFIX . 'camila_bookmarks', $record, 'INSERT');
                 if (!$insertSQL) {
                     camila_information_text(camila_get_translation('camila.worktable.db.error'));
                     $success = false;
                 }
                 $j++;
             }
         } else {
             $count = 1;
             foreach ($cols as $key => $value) {
                 $record = array();
                 $record['wt_id'] = $id;
                 $record['applied_to_database'] = 'n';
                 $record['is_deleted'] = 'n';
                 $record['orig_name'] = preg_replace("/[\n\r]/", "", $value);
                 $record['orig_type'] = $types[$key];
                 if ($types[$key] == 'number') {
                     $record['type'] = 'integer';
                 } elseif ($types[$key] == 'date') {
                     $record['type'] = 'date';
                 } elseif ($types[$key] == 'hyperlink') {
                     $record['type'] = 'hyperlink';
                 } else {
                     $record['type'] = 'string';
                 }
                 $record['col_name'] = $this->get_field_name($value);
                 $name = preg_replace("/[\n\r]/", ' ', $value);
                 $record['name'] = !isUTF8($name) ? utf8_encode($name) : $name;
                 $record['name_abbrev'] = $record['name'];
                 $record['readonly'] = 'n';
                 $record['must_be_unique'] = 'n';
                 $record['visible'] = 'y';
                 $record['required'] = 'n';
                 $record['sequence'] = $count;
                 $record['maxlength'] = $this->default_maxlength[$record['type']];
                 $record['size'] = $this->default_size[$record['type']];
                 $insertSQL = $this->db->AutoExecute(CAMILA_TABLE_WORKC, $record, 'INSERT');
                 if (!$insertSQL) {
                     camila_information_text(camila_get_translation('camila.worktable.db.error'));
                     $success = false;
                 }
                 $count++;
             }
         }
         if ($success && $this->interactive) {
             camila_information_text(camila_get_translation('camila.worktable.xls.successful'));
         }
     } else {
         if ($interactive) {
             $myText = new CHAW_text(camila_get_translation('camila.wizard.filecardcreated'));
             $myText->set_br(2);
             $_CAMILA['page']->add_text($myText);
         }
     }
     if ($this->interactive) {
         $form3 = new phpform('camila', 'cf_worktable_wizard_step2.php', HAW_METHOD_GET);
         $form3->submitbutton = camila_get_translation('camila.wizard.next');
         $form3->drawrules = false;
         new form_hidden($form3, 'custom', $id);
         $form3->process();
         $form3->draw();
     }
     return $id;
 }