Fórum ler um arquivo do excel com várias colunas e gerar filtros.. #327591

17/08/2006

0

Pessoal,

um olá a todos...

Estou num dilema. Preciso ler um arquivo do excel com várias colunas e gerar filtros/combobox de acordo com cada coluna para que possam ser usadas como parâmetros para gerar relatórios com base nos dados desse arquivo excel.

Ao ler a 1a coluna, gera/popula uma combobox ou dblookupcombobox com os valores dessa 1a coluna para criar um filtro para seleção e assim por diante, mas tem que ser automático pois como é um arquivo exportado de outro sistema poder vir com 10, 15 colunas, pode variar a quantidade de colunas.


Preciso de ajuda, dicas ou qualquer coisa que me ajude numa solução, o mais rápido possível, pois tenho até dia 30 para apresentar um sistema que envolve esta opção. :cry:

Desde já, um grande obrigado a todos.


Alexandre.
alexandregois@yahoo.com.br


Alexandregois

Alexandregois

Responder

Posts

17/08/2006

Jáder Medeiros

Não entendi ao certo o que quer fazer. Mas veja um tópico que respondi e ajudou um amigo. Talvez ajude você a entender e se não atender, explique melhor sua dúvida.
[url]http://forum.devmedia.com.br/viewtopic.php?p=263277&sid=802eb5eed557d76f694f277590abacb0#263277[/url]


Responder

Gostei + 0

17/08/2006

Alexandregois

Após muita luta, já consigo ler a quantidade de colunas do arquivo excel, jogo o arquivo pro adodataset e depois pro grid aí conto as colunas do grid... foi a forma mais fácil que encontrei :)

Mas agora preciso fazer um count dessas colunas e passando os FieldName do grid para os DBLookupComboBox sequencialmente, tipo:

TDBLookupComboBox(Components[0]).ListField:= dbgrid1.Columns[0].FieldName;
TDBLookupComboBox(Components[0]).KeyField:= dbgrid1.Columns[0].FieldName;
...
TDBLookupComboBox(Components[24]).ListField:= dbgrid1.Columns[24].FieldName;
TDBLookupComboBox(Components[24]).KeyField:= dbgrid1.Columns[24].FieldName;

Estou testando um código abaixo, mas só manda para um DBLookupComboBox, os outros ficam
invisíveis e sem o listfield e o keyfield.

Tive que colocar vários DBLookupComboBox na tela, mas gostaria de criá-los em tempo de execução conforme a quantidade de colunas do excel e ir passando os valores. Essas DBLookupComboBox serão filtros para critério de busca no dataset com os dados do excel.


procedure TForm1.Button3Click(Sender: TObject);
var
i, p : Integer;
begin

for i := 0 To 24 Do
begin
for p := 0 to ComponentCount -1 do
if Components[p] is TDBLookupComboBox then
begin
TDBLookupComboBox(Components[p]).Visible:=True;
TDBLookupComboBox(Components[p]).ListField:= dbgrid1.Columns[i].FieldName;
TDBLookupComboBox(Components[p]).KeyField:= dbgrid1.Columns[i].FieldName;
end;

end;
end;


Aguardo ajuda.


Alexandre.


Responder

Gostei + 0

18/08/2006

Jáder Medeiros

Nossa Senhora! Você está percorrendo todos os componentes 24 vezes? Faz isso não Alexandre. Percorre todos os componentes e para cada iteração executa a operação que quer 24 vezes. Mas vamos esquecer esse código. Você quer mesmo é criar os componentes em tempo de código. Beleza...

var
i: Integer;
const
LeftCombos = 2;
TopCombos = 130;
begin
for i := 0 to DBGrid1.Columns.Count-1 do
if not Assigned(FindComponent(´lkp´+DBGrid1.Columns[i].FieldName)) then
with TDBLookupComboBox.Create(Self) do begin
Parent     := Self;
Name       := ´lkp´+DBGrid1.Columns[i].FieldName;
Top        := Round(TopCombos+Height*(1+i));
Left       := LeftCombos;
ListSource := DBGrid1.DataSource;
ListField  := DBGrid1.Columns[i].FieldName;
KeyField   := DBGrid1.Columns[i].FieldName
end
end;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar