Avatar billede boox Nybegynder
19. april 2003 - 17:43 Der er 11 kommentarer og
1 løsning

Combobox og Excel

Hey jeg kunne godt lige bruge lidt hjælp her(:
jeg skal lave en combobox som skal indeholde nogle navne som hver navn har et skjult tal-værdi som kommer fra et bestemt felt inde i et Excel-dokument!
Det lyder for mig ret indviklet da jeg ikke endgang kan se hvordan jeg skal give navnene i comboboxen værdier..
hjælp plz tak(:
Avatar billede schubert1 Nybegynder
19. april 2003 - 18:02 #1
der er ikke nogen direkte indstilling hvor du kan give felterne navne og skjulte værdier.
En forholdsvis let løsning er at først oprette en array i 2 dimensioner og lægge navnene ind i den første kolonne og værdierne ind i den anden.
Derefter skriver du bare den første kolonne ud i en combobox og har så en referance i arrayet.
Avatar billede boox Nybegynder
19. april 2003 - 18:10 #2
hvordan kan jeg i en combobox for eksempel i T-strings skrive nogle navne som skal have en værdi ?? 
der står f.eks. et lands navn som man kan vælge i comboboxen.. men så skal det land jo have en bestemt skjult værdi ellers kan jeg ikke regne videre med den.
Avatar billede dkn Nybegynder
19. april 2003 - 22:26 #3
brug ComboBox1.Items.AddObject()
og lav dit eget object:

type
TComItem = Class(TObject)
  Hidden:string;
end;

...

var
Hitem : TComItem;
begin
Hitem : TComItem.Create;
Hitem.Hidden := 'Skjult værdi';
ComboBox1.Items.AddObject('lla', Hitem);
end;

...
var
Hitem : TComItem;
begin
Hitem := pointer(ComboBox1.Items.Object[ComboBox1.ItemIndex]);
showmessage(Hitem.Hidden);
showmessage(ComboBox1.Items.Strings[ComboBox1.ItemIndex]);
end;
Avatar billede boox Nybegynder
20. april 2003 - 13:50 #4
dkn >>>>
jeg tror det er der jeg skal hen men jeg er helt ny i Delphi så kunne du ik være så venlig og skære det mere ud i pap??.. hvor skal det skrives under og hvordan skal det skrives op, fordi det virker ik hvis jeg skriver det ind sådan som du har skrevet det..
tak
Avatar billede dkn Nybegynder
20. april 2003 - 14:12 #5
Ja det er skam den rigtige vej. Jeg har ikke testet koden, men du må lige tage højde for typos....


Altså den type skal stå i toppen, det andet kode kan du fx sætte på en knap.

hvad mere kan jeg snart sige? :)
Avatar billede boox Nybegynder
20. april 2003 - 14:48 #6
den siger fejl her:
Hitem := pointer(ComboBox1.Items.Object[ComboBox1.ItemIndex]);

Identifier expected but 'OBJECT' found    ??


et andet spørgsmål.. hva med i Properties for ComboBoxen der er en der hedder Tstrings.. skal jeg bruge den? det er vel der man indsætter hvad der skal stå i comboboxen eller hva?
Avatar billede dkn Nybegynder
20. april 2003 - 15:02 #7
sorry havde lavet lidt skriv fejl som sagt.
Sådan ser det ud og virker:



unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TComItem = class(TObject)
    Hidden: string;
  end;


var
  Form1            : TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  Hitem            : TComItem;
begin
  Hitem := TComItem.Create;
  Hitem.Hidden := 'Skjult værdi';
  ComboBox1.Items.AddObject('lla', Hitem);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Hitem            : TComItem;
begin
  Hitem := pointer(ComboBox1.Items.objects[ComboBox1.ItemIndex]);
  showmessage(Hitem.Hidden);
  showmessage(ComboBox1.Items.Strings[ComboBox1.ItemIndex]);
end;

end.
Avatar billede boox Nybegynder
20. april 2003 - 16:36 #8
ved ik om dette kan lade sig gøre.. altså at den laver flere forskellige? det er bare ligesom om den ik vil i samme combobox.. får i hvertfald fejl... (dkn- du skal nok få de points)



unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    Button1: TButton;
    Button2: TButton;
    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TComItem = class(TObject)
    Hidden: string;
  end;


var
  Form1            : TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
var
  Hitem : TComItem;
begin
  Hitem := TComItem.Create;
  Hitem.Hidden := '100';
  ComboBox1.Items.AddObject('Danske kroner', Hitem);
end;

var
  Hitem : TComItem;

begin
  Hitem := TComItem.Create;
  Hitem.Hidden := '685';
  ComboBox1.Items.AddObject('Amerikanske dollar', Hitem);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Hitem            : TComItem;
begin
  Hitem := pointer(ComboBox1.Items.objects[ComboBox1.ItemIndex]);
  showmessage(Hitem.Hidden);
  showmessage(ComboBox1.Items.Strings[ComboBox1.ItemIndex]);
end;

end.
Avatar billede dkn Nybegynder
20. april 2003 - 17:24 #9
procedure TForm1.FormActivate(Sender: TObject);
var
  Hitem : TComItem;
begin
  Hitem := TComItem.Create;
  Hitem.Hidden := '100';
  ComboBox1.Items.AddObject('Danske kroner', Hitem);

  Hitem := TComItem.Create;
  Hitem.Hidden := '685';
  ComboBox1.Items.AddObject('Amerikanske dollar', Hitem);
end;


husk at under aflæsning kan du lige køre:
if combobox1.itemindex = -1 then exit;

så slipper du for fejl hvis der ikke er valgt et item
Avatar billede boox Nybegynder
20. april 2003 - 17:43 #10
okey tak for hjælpen..

        Hitem.Hidden := '100';
i stedet for at så skrive 100 skal jeg så bare finde en måde på hvor den så går ind og finder det i et bestemt felt i et Excel-dokument men det er nok rimlig kompliceret.
Avatar billede dkn Nybegynder
20. april 2003 - 17:45 #11
nej tror jeg ikke, du skal nok bruge noget ole for at gøre det nemmest.
Skal lige se om jeg har noget der kan bruges....
Avatar billede dkn Nybegynder
20. april 2003 - 18:17 #12
okay den her funktion jeg lige har lavet skaffer bare data fra et cell. Jeg ved ikke lige hvor meget du har brug for.

// uses ComObj
Function SkafCellData(Fil:string; Raekke, Col:integer):string;
var
  Excel            : OleVariant;
begin
  Excel := CreateOleObject('Excel.Application');
  Excel.WorkBooks.open(Fil);
  result := Excel.Cells[Raekke,Col].Value;
  Excel.Quit;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := SkafCellData(ExtractFilePath(application.ExeName)+'Test.xls', 2, 1);
end;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester