Ler informacoes de um .xls

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
suciu
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Sex, 09 Fev 2007 4:05 pm
Localização: 24030058

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! :-o
Trevisolli
Moderador
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.
Avatar do usuário
dr_gori
Moderador
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

Aí vai a procedure, caso esse link desapareça algum dia:

Selecionar tudo

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)&#124*.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;
suciu
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Sex, 09 Fev 2007 4:05 pm
Localização: 24030058

Vlw trevisolli e dr_gori pela forca!
Vou testar aqui!!
Abrigado!
suciu
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Sex, 09 Fev 2007 4:05 pm
Localização: 24030058

Desculpe!!
"Obrigado"
rs
Trevisolli
Moderador
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.
daniel.pinna
Rank: Estagiário Pleno
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
:-o
suciu
Rank: Estagiário Pleno
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!!
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 11 visitantes