Ola!
Gostaria de saber se alguém pode me ajudar. Desejo ler um arquivo .xls dentro do forms sendo que é informado como parametros a linha e colunas que desejo. Ex: Desejo da linha 43 as colunas A, D, P e S.
Sei que é com o DDE mais ainda estou encontrando dificuldades somente com o Help do forms.
Agradeco previamente a todos!
Ler informacoes de um .xls
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
beleza brother?
Dá uma olhada neste link que acho q te ajuda.
http://www.orafaq.com/forum/t/31494/2/
Abraços,
Trevisolli.
Dá uma olhada neste link que acho q te ajuda.
http://www.orafaq.com/forum/t/31494/2/
Abraços,
Trevisolli.
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Aí vai a procedure, caso esse link desapareça algum dia:
PROCEDURE PROC_READ_EXCEL(p_file_name in varchar2,
p_sheet_name in varchar2,
p_range in varchar2,
p_from_row in number,
p_from_col in number,
p_to_row in number,
p_to_col in number,
p_value out varchar)
IS
-- Declare handles to OLE objects
application ole2.obj_type;
workbooks ole2.obj_type;
workbook ole2.obj_type;
worksheet ole2.obj_type;
cell ole2.obj_type;
cell1 ole2.obj_type;
-- Declare handles to OLE argument lists
args ole2.list_type;
Check_file text_io.file_type;
no_file exception;
PRAGMA exception_INIT(no_file, -302000);
cell_value varchar2(2000);
sor_start_row number;
sor_start_col number;
l_sor_start_row number; -- l_sor_start_row number; 12
l_eor_start_row number; -- l_eor_start_row number; 236
l_sor_start_col number; -- l_sor_start_col number; 3
l_eor_end_col number; -- l_eor_end_col number; 14
temp number := 0;
l_col_order varchar2(3000) := ' ';
l_ddl varchar2(3000) := ' ';
b_success_flg boolean;
BEGIN
-- Check the file can be found, if not exception no_file will be raised
Check_file := TEXT_IO.FOPEN(p_file_name, 'R');
TEXT_IO.FCLOSE(Check_file);
application := ole2.create_obj('Excel.Application');
workbooks := ole2.get_obj_property(application, 'Workbooks');
-- Open the required workbook
args := ole2.create_arglist;
ole2.add_arg(args, p_file_name); --ole2.add_arg(args, 'C:test.XLS');
workbook := ole2.invoke_obj(workbooks, 'Open', args);
ole2.destroy_arglist(args);
-- Open worksheet Sheet1 of that Workbook
args := ole2.create_arglist;
ole2.add_arg(args, p_sheet_name); --ole2.add_arg(args, 'Domestic-Canada-Mexico Layout');
worksheet := ole2.get_obj_property(workbook, 'Worksheets', args);
ole2.destroy_arglist(args);
-- Get value of cell A1 of worksheet Domestic Layout
args := ole2.create_arglist;
IF p_range <> 'Y' THEN
/*when exact cell specifications passed*/
ole2.add_arg(args, p_from_row);
ole2.add_arg(args, p_from_col);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.destroy_arglist(args);
args := ole2.create_arglist;
-- Added by Pal - To toggle between the char and num property cells w.r.t International sht.
if p_from_col = 3 or p_from_col = 7 then
cell_value := ole2.get_char_property(cell, 'Value');
else
cell_value := ole2.get_num_property(cell, 'Value');
end if;
p_value := (cell_value);
message(p_value);
ELSE
/* To find X-Y Co-ordinates of SOR */
for i in 1 .. 15 loop
for j in 1 .. 5 loop
ole2.add_arg(args, i);
ole2.add_arg(args, j);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.destroy_arglist(args);
args := ole2.create_arglist;
cell_value := ole2.get_char_property(cell, 'Value');
if rtrim(ltrim(upper(cell_value))) = 'SOR' then
sor_start_row := i;
sor_start_col := j;
l_sor_start_row := sor_start_row + 1;
l_sor_start_col := sor_start_col;
while temp = 0 loop
ole2.add_arg(args, sor_start_row);
ole2.add_arg(args, sor_start_col);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.destroy_arglist(args);
args := ole2.create_arglist;
cell_value := ole2.get_char_property(cell, 'Value');
if cell_value is NULL then
temp := -1;
l_eor_end_col := sor_start_col - 1;
end if;
sor_start_col := sor_start_col + 1;
end loop;
exit;
end if;
end loop;
end loop;
sor_start_col := sor_start_col - 2;
temp := 0;
/*To find X-Y Co-ordinates of EOR*/
while temp = 0 loop
ole2.add_arg(args, sor_start_row);
ole2.add_arg(args, sor_start_col);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.destroy_arglist(args);
args := ole2.create_arglist;
cell_value := ole2.get_char_property(cell, 'Value');
if rtrim(ltrim(upper(cell_value))) = 'EOR' then
temp := -1;
l_eor_start_row := sor_start_row - 1;
end if;
sor_start_row := sor_start_row + 1;
end loop;
message('From row' || l_sor_start_row || 'To Row' || l_eor_start_row ||
'From Col' || l_sor_start_col || 'To Col' || l_eor_end_col);
for j in l_sor_start_col .. l_eor_end_col loop
ole2.add_arg(args, l_sor_start_row - 2);
ole2.add_arg(args, j);
cell := ole2.get_obj_property(worksheet, 'Cells', args);
ole2.destroy_arglist(args);
args := ole2.create_arglist;
cell_value := ole2.get_char_property(cell, 'Value');
cell_value := replace(replace(replace(ltrim(rtrim(cell_value)),
'''',
''),
' ',
''),
'-',
'');
l_col_order := ltrim(l_col_order ||
replace(replace(cell_value, ' ', '_'), '__', '_') || ',');
end loop;
l_ddl := replace(substr(l_col_order, 1, length(l_col_order)),
',',
' varchar2(50),');
l_ddl := substr(l_ddl, 1, length(l_ddl) - 1);
message(substr(l_ddl, 1, 20));
message(substr(l_ddl, 21, 20));
message(substr(l_ddl, 41, 30));
message(substr(l_ddl, 71, 30));
message(substr(l_ddl, 101, 30));
message(substr(l_ddl, 131, 30));
message(substr(l_ddl, 161, 30));
message(substr(l_ddl, 191, 30));
message(substr(l_ddl, 221, 30));
message(substr(l_ddl, 251));
--proc_create_intl(l_ddl,b_success_flg);
IF b_success_flg THEN
message('TRUE');
else
message('False');
END IF;
/*for i in p_from_row..p_to_row
loop
for j in p_from_col..p_to_col
loop
ole2.add_arg(args, i);
ole2.add_arg(args, j);
cell:= ole2.get_obj_property(worksheet, 'Cells', args);
ole2.destroy_arglist(args);
args:= ole2.create_arglist;
cell_value :=ole2.get_char_property(cell,'Value');
message(cell_value);
end loop;
end loop;
*/
END IF;
args := ole2.create_arglist;
ole2.add_arg(args, 'C:Ora.prn');
ole2.add_arg(args, 'Formatted text(Space delimited)(*.prn)|*.prn|');
ole2.invoke(workbook, 'Save As', args);
ole2.destroy_arglist(args);
ole2.invoke(application, 'Quit');
-- Release the OLE2 object handles
ole2.release_obj(cell);
ole2.release_obj(worksheet);
ole2.release_obj(workbook);
ole2.release_obj(workbooks);
ole2.release_obj(application);
exception
WHEN no_file THEN
MESSAGE('file not found.');
/*WHEN OTHERS THEN
MESSAGE(sqlerrm);
PAUSE;
FOR i IN 1 .. tool_err.nerrors LOOP
MESSAGE(tool_err.message);
PAUSE;
tool_err.pop;
END LOOP;
*/
END;
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Vlw dr_gori.
Vou começar à proceder desta forma no fórum.
Abração,
Trevisolli.
Vou começar à proceder desta forma no fórum.
Abração,
Trevisolli.
-
- Rank: Estagiário Pleno
- Mensagens: 5
- Registrado em: Ter, 27 Fev 2007 2:23 pm
- Localização: Rio de janeiro
Daniel Pinna
Pessoal,
Tentei rodar o código acima no forms9i, porém retornou o erro:
305500 Non-oracle exception e um alert escrito por favor aceite.
Tentei debugar sem sucesso, o código para no seguinte código:
worksheet := ole2.get_obj_property(workbook, 'Worksheets', args);
Gostaria de saber se alguém sabe o significado dos seguintes parametros:
p_sheet_name, p_range, pois como não sei, talvez eu esteja passando os parametros errados e por isso o erro.
Um última dúvida, esse código retorna todos os dados de acordo com os parametros passados de linha e coluna, certo???
Desde já grato pela atenção.
Vlw pessoal
Tentei rodar o código acima no forms9i, porém retornou o erro:
305500 Non-oracle exception e um alert escrito por favor aceite.
Tentei debugar sem sucesso, o código para no seguinte código:
worksheet := ole2.get_obj_property(workbook, 'Worksheets', args);
Gostaria de saber se alguém sabe o significado dos seguintes parametros:
p_sheet_name, p_range, pois como não sei, talvez eu esteja passando os parametros errados e por isso o erro.
Um última dúvida, esse código retorna todos os dados de acordo com os parametros passados de linha e coluna, certo???
Desde já grato pela atenção.
Vlw pessoal
-
- Rank: Estagiário Pleno
- Mensagens: 4
- Registrado em: Sex, 09 Fev 2007 4:05 pm
- Localização: 24030058
Fala aí pessoal!!
Conseguir adaptar o codigo acima e esta rodando perfeitamente! O problema agora é: Preciso ler a coluna como letra ( Varchar2) e não como numero ( number ) por exemplo: em vez de informar que quero a coluna 3, preciso infomrar q é a coluna " C " . Ou seja o é preciso q seja identificado a colupa pela letra em q ela consta e não mais se ela é a 1ª, ou 2ª,...já quebrei a cabeca com isso mais ainda não consegui. Bom, qualquer ajuda é valida e bem vinda! rs
Obrigado!!
Conseguir adaptar o codigo acima e esta rodando perfeitamente! O problema agora é: Preciso ler a coluna como letra ( Varchar2) e não como numero ( number ) por exemplo: em vez de informar que quero a coluna 3, preciso infomrar q é a coluna " C " . Ou seja o é preciso q seja identificado a colupa pela letra em q ela consta e não mais se ela é a 1ª, ou 2ª,...já quebrei a cabeca com isso mais ainda não consegui. Bom, qualquer ajuda é valida e bem vinda! rs
Obrigado!!
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 13 visitantes