powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / выгрузка из форм в EXCEL
8 сообщений из 8, страница 1 из 1
выгрузка из форм в EXCEL
    #40074301
KLAYD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня! Есть задача выгрузки в EXCEL всех полей из какого то блока , просто заголовки полей из раздела promt и сами поля.

Может у кого есть готовая процедура выгрузки по блоку? На данный момент есть процедура на основе TEXT_IO, но файлы как то криво создаются, при открытии выводится сообщение "Формат файла не соответствует разрешению файла. Возможно, файл повреждён или небезопасен. Вы действительно хотите открыть файл?" открывается после чего нормально, но пользователи жалуются на такое сообщение. Хотелось бы переделать выгрузку под ole2...
...
Рейтинг: 0 / 0
выгрузка из форм в EXCEL
    #40074393
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KLAYD
Хотелось бы переделать выгрузку под ole2...

изначально глупая идея

OLE2 очень медленно работает. С TEXT_IO даже сравнивать бессмысленно.
...
Рейтинг: 0 / 0
выгрузка из форм в EXCEL
    #40074531
KLAYD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 кб. В чём может быть проблема?
...
Рейтинг: 0 / 0
выгрузка из форм в EXCEL
    #40074533
KLAYD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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;
...
Рейтинг: 0 / 0
выгрузка из форм в EXCEL
    #40074534
KLAYD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
при такой процедуре файл сохраняется почему то как текстовый, а не нормальный xls может сможете подсказать, что не так(
...
Рейтинг: 0 / 0
выгрузка из форм в EXCEL
    #40074546
KLAYD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вообще всё стёр, оставил только минимум, файл открывается как текстовый, а не как нормальный 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;
...
Рейтинг: 0 / 0
выгрузка из форм в EXCEL
    #40074615
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KLAYD
при такой процедуре файл сохраняется почему то как текстовый, а не нормальный xls может сможете подсказать, что не так(

А что не так?
Вы же формируете текстовый файл, почему он должен быть каким-то другим?
...
Рейтинг: 0 / 0
выгрузка из форм в EXCEL
    #40074753
KLAYD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

так хочу формировать екселевские xls или xlsx и при открытии файла указываю что он должен быть такого формата) а формируется всё равно как текстовый почему то
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / выгрузка из форм в EXCEL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]