|
выгрузка из форм в EXCEL
|
|||
---|---|---|---|
#18+
Всем доброго дня! Есть задача выгрузки в EXCEL всех полей из какого то блока , просто заголовки полей из раздела promt и сами поля. Может у кого есть готовая процедура выгрузки по блоку? На данный момент есть процедура на основе TEXT_IO, но файлы как то криво создаются, при открытии выводится сообщение "Формат файла не соответствует разрешению файла. Возможно, файл повреждён или небезопасен. Вы действительно хотите открыть файл?" открывается после чего нормально, но пользователи жалуются на такое сообщение. Хотелось бы переделать выгрузку под ole2... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 10:58 |
|
выгрузка из форм в EXCEL
|
|||
---|---|---|---|
#18+
KLAYD Хотелось бы переделать выгрузку под ole2... изначально глупая идея OLE2 очень медленно работает. С TEXT_IO даже сравнивать бессмысленно. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 14:38 |
|
выгрузка из форм в EXCEL
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, может и так, можете тогда подсказать такую штуку, сохраняю файл через webutil_file.file_save_dialog(null, USER||DBMS_RANDOM.STRING('U', 10), 'XLS Files (*.xls)|*.xls|'); сохраняется свиду как test.xls, но по факту определяется как текстовый весом 1 кб и если его пересохранить и выбрать при сохранении тип файла "Книга Excel 97-2003 (*.xls)" то он уже сохраняется в нормальный эксельный xls весом 27 кб. В чём может быть проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 20:42 |
|
выгрузка из форм в EXCEL
|
|||
---|---|---|---|
#18+
PACKAGE BODY excel IS TYPE item_rectype IS RECORD ( name VARCHAR2(30), prompt VARCHAR2(255), datatype VARCHAR2(255) ); TYPE item_tabtype IS TABLE OF item_rectype INDEX BY BINARY_INTEGER; item_tab item_tabtype; PROCEDURE show_progress (message_in IN VARCHAR2) IS BEGIN MESSAGE(message_in, NO_ACKNOWLEDGE); SYNCHRONIZE; END show_progress; FUNCTION setup_items (blk_in IN VARCHAR2) RETURN PLS_INTEGER IS cur_item_v VARCHAR2(30); last_item_v VARCHAR2(30); index_v PLS_INTEGER := 0; BEGIN cur_item_v := GET_BLOCK_PROPERTY (blk_in, FIRST_ITEM); last_item_v := GET_BLOCK_PROPERTY (blk_in, LAST_ITEM); item_tab.DELETE; LOOP IF GET_ITEM_PROPERTY (blk_in||'.'||cur_item_v, DISPLAYED) = 'TRUE' AND GET_ITEM_PROPERTY (blk_in||'.'||cur_item_v, VISIBLE) = 'TRUE' AND GET_ITEM_PROPERTY (blk_in||'.'||cur_item_v, ITEM_CANVAS) IS NOT NULL AND GET_ITEM_PROPERTY (blk_in||'.'||cur_item_v, ITEM_TYPE) IN ('TEXT ITEM', 'LIST', 'DISPLAY ITEM','CHECKBOX', 'RADIO GROUP') THEN index_v := index_v + 1; item_tab(index_v).name := GET_ITEM_PROPERTY(blk_in||'.'||cur_item_v, ITEM_NAME); IF GET_ITEM_PROPERTY (blk_in||'.'||cur_item_v, ITEM_TYPE) = 'CHECKBOX' THEN item_tab(index_v).prompt := GET_ITEM_PROPERTY(blk_in||'.'||cur_item_v, LABEL); ELSE item_tab(index_v).prompt := GET_ITEM_PROPERTY(blk_in||'.'||cur_item_v, PROMPT_TEXT); END IF; item_tab(index_v).datatype := GET_ITEM_PROPERTY(blk_in||'.'||cur_item_v, DATATYPE); END IF; EXIT WHEN cur_item_v = last_item_v; cur_item_v := GET_ITEM_PROPERTY (blk_in||'.'||cur_item_v, NEXTITEM); END LOOP; RETURN (index_v); END setup_items; FUNCTION format_value ( value_in IN VARCHAR2, datatype_in IN VARCHAR2 DEFAULT NULL ) RETURN VARCHAR2 IS retval VARCHAR2(32767) := value_in; BEGIN IF datatype_in = 'DATE' THEN retval := TO_CHAR(TO_DATE(retval), date_format_pc); ELSE retval := REPLACE (retval, CHR(9), chr9subst_pc); retval := REPLACE (retval, CHR(10), chr10subst_pc); IF SUBSTR(retval, 1, 1) IN ('-', '+', '=') THEN retval := ' ' || retval; END IF; END IF; RETURN (retval); END format_value; PROCEDURE export IS cur_block_c CONSTANT VARCHAR2(30) := NAME_IN ('SYSTEM.CURSOR_BLOCK'); cur_item_c CONSTANT VARCHAR2(61) := NAME_IN ('SYSTEM.CURSOR_ITEM'); cur_record_c CONSTANT VARCHAR2(30) := NAME_IN ('SYSTEM.CURSOR_RECORD'); outfilename_v VARCHAR2(255); outfile_v CLIENT_TEXT_IO.FILE_TYPE; num_items_v PLS_INTEGER; line_v VARCHAR2(32767); counter_v PLS_INTEGER := 0; uncommited_changes EXCEPTION; BEGIN IF NAME_IN('SYSTEM.FORM_STATUS') <> 'QUERY' THEN RAISE uncommited_changes; END IF; FIRST_RECORD; show_progress ('Ôîðìèðîâàíèå ñïèñêà ïîëåé äëÿ ýêñïîðòà...'); num_items_v := setup_items(cur_block_c); show_progress ('Îòêðûòèå âðåìåííîãî ôàéëà...'); outfilename_v := webutil_file.file_save_dialog(null, USER||DBMS_RANDOM.STRING('U', 10), 'XLS Files (*.xls)|*.xls|'); outfile_v := CLIENT_TEXT_IO.FOPEN(outfilename_v, 'w'); show_progress ('Ôîðìèðîâàíèå ñòðîêè çàãîëîâêîâ ñòîëáöîâ...'); line_v := NULL; FOR i IN 1 .. num_items_v LOOP line_v := line_v || format_value(item_tab(i).prompt); IF i < num_items_v THEN line_v := line_v || CHR(9); END IF; END LOOP; CLIENT_TEXT_IO.PUT_LINE(outfile_v, line_v); LOOP IF MOD (counter_v, 100) = 0 THEN show_progress ( 'Ôîðìàòèðîâàíèå çàïèñåé áëîêà ('|| TO_CHAR(counter_v,'99990') || ')...' ); END IF; counter_v := counter_v + 1; line_v := NULL; FOR i IN 1 .. num_items_v LOOP line_v := line_v || format_value ( NAME_IN (cur_block_c||'.'||item_tab(i).name), item_tab(i).datatype ); IF i < num_items_v THEN line_v := line_v || CHR(9); END IF; END LOOP; CLIENT_TEXT_IO.PUT_LINE(outfile_v, line_v); EXIT WHEN NAME_IN('SYSTEM.LAST_RECORD') = 'TRUE'; NEXT_RECORD; END LOOP; CLIENT_TEXT_IO.FCLOSE(outfile_v); item_tab.DELETE; GO_RECORD(TO_NUMBER(cur_record_c)); GO_ITEM (cur_item_c); show_progress ( 'Âñåãî ýêñïîðòèðîâàíî ' ||TO_CHAR(counter_v) || ' çàïèñåé' ); client_host('cmd /C start excel '||outfilename_v); EXCEPTION WHEN uncommited_changes THEN message('Ïåðåä âûïîëíåèåì ýêñïîðòà, ñîõðàíèòå ñäåëàííûå èçìåíåíèÿ!'); WHEN OTHERS THEN IF CLIENT_TEXT_IO.IS_OPEN(outfile_v) THEN CLIENT_TEXT_IO.FCLOSE(outfile_v); END IF; RAISE; END export; END excel; ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 20:57 |
|
выгрузка из форм в EXCEL
|
|||
---|---|---|---|
#18+
при такой процедуре файл сохраняется почему то как текстовый, а не нормальный xls может сможете подсказать, что не так( ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 20:58 |
|
выгрузка из форм в EXCEL
|
|||
---|---|---|---|
#18+
вообще всё стёр, оставил только минимум, файл открывается как текстовый, а не как нормальный excel, мистика какая то PACKAGE BODY excel_run IS PROCEDURE export IS outfilename_v VARCHAR2(255); outfile_v CLIENT_TEXT_IO.FILE_TYPE; BEGIN outfilename_v := webutil_file.file_save_dialog(null, 'file_name.xls', 'XLS Files (*.xls)|*.xls|'); outfile_v := CLIENT_TEXT_IO.FOPEN(outfilename_v, 'w'); CLIENT_TEXT_IO.FCLOSE(outfile_v); client_host('cmd /C start excel '||outfilename_v); END export; END excel_run; ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2021, 22:27 |
|
выгрузка из форм в EXCEL
|
|||
---|---|---|---|
#18+
KLAYD при такой процедуре файл сохраняется почему то как текстовый, а не нормальный xls может сможете подсказать, что не так( А что не так? Вы же формируете текстовый файл, почему он должен быть каким-то другим? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2021, 10:22 |
|
|
start [/forum/topic.php?fid=51&gotonew=1&tid=1877876]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
284ms |
get topic data: |
11ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 276ms |
total: | 661ms |
0 / 0 |