Функция создания объекта для доступа к файлу Excel
id = excelcreateobject;
нет
excelcreateobject – функция создает объект в памяти, соответствующий файлу Excel.
Функция возвращает указатель на созданный пустой объект, соответствующий файлу Excel.
initialization id = excelcreateobject; afilename = expandfilename( "10KBA-MMF0004.xls" ); seterrorstr("Открываем файл "+afilename,0) excelopendocument(id, afilename); row_count = excelgetrowcount(id, 1); col_count = excelgetcolcount(id, 1); start_row = 8; if row_count > start_row then for(i=start_row,row_count) begin s = excelgettext(id, 1, i, 1); if s <> "" then begin seterrorstr(s,0) end else goto end_of_table; end; end_of_table: freeobject(id); end;
В результате выполнения примера, происходит открытие файла и получение значения из первой ячейки каждой строки с выводом его в окно сообщений.
function ReadExcelFileAndSyncControlPoints(aExcelFileName: string) id = excelcreateobject; seterrorstr("Открываем файл со списком датчиков "+aExcelFileName,0) excelopendocument(id, aExcelFileName); row_count = excelgetrowcount(id, 1); col_count = excelgetcolcount(id, 1); start_row = 8; cat_name = "Датчики"; //Строим список KKS кодов датчиков MetersList = createstringlist; OldMetersList = createstringlist; //Старый список групп settextstringlist(OldMetersList, dbgetgroupnames(cat_name)); if row_count > start_row then for(i=start_row,row_count) begin s = excelgettext(id, 1, i, 1); if s <> "" then begin addstringlist( MetersList, s, i); end else goto end_of_table; end; end_of_table: MListHash = createstringlisthash(MetersList,4095); //Проверяем наличие групп в базе for(i=0,countstringlist(MetersList) - 1) begin s_group_name = getstringlist(MetersList,i); row_table = gettagstringlist(MetersList,i); //Добавляем необходимые группы в заданную категорию базы сигналов if dbaddgroup(cat_name,s_group_name,1) then begin seterrorstr("Добавлена группа сигналов в категорию "+cat_name+": " + s_group_name,0); end; //Производим синхронизацию нужных полей таблицы с базой сигналов // столбец 2 - описание датчика dbsetsignaldata(cat_name,s_group_name,"Descript",excelgettext(id, 1, row_table, 2)); // столбец 28 - минимальный предел dbsetsignalevalstring(cat_name,s_group_name,"Xmin",""); //Формулу затираем dbsetsignaldata(cat_name,s_group_name,"Xmin", stringreplaceall( excelgettext(id, 1, row_table, 28), ",", ".") ); //Значение выставляем // столбец 29 - максимальный предел dbsetsignalevalstring(cat_name,s_group_name,"Xmax",""); dbsetsignaldata(cat_name,s_group_name,"Xmax", stringreplaceall( excelgettext(id, 1, row_table, 29) , ",", ".") ); end; //Удаляем лишние группы for(i=0,countstringlist(OldMetersList) - 1) begin s_group_name = getstringlist(OldMetersList,i); if getindexfromhash(MListHash, s_group_name) < 0 then begin if dbdelgroup(cat_name,s_group_name) then begin seterrorstr("Удалены группа сигналов в категории "+cat_name+": " + s_group_name,0); end; end; end; //Уничтожаем объекты freeobject(MListHash); freeobject(MetersList); freeobject(id); end; initialization //Чтение данных экселя и синхронизация с базой сигналов ReadExcelFileAndSyncControlPoints( expandfilename( "10KBA-MMF0004.xls" ) ); end;
Пример использования функций экселя, чтобы синхронизировать таблицу с базой сигналов