доброго дня имеются две колонки в Excel. Необходимо вывести куда нибудь на форму две таблицы. Значение ячейки "111" в первой таблице нужно оформить в виде выпадающего списка, значения для которого берутся из первой колонки в Excel. Аналогично для "222", только значения берутся из второй колонки. Все остальные ячейки вычисляются по формулам, в зависимости от значений ячеек "111" и "222". Вопрос: какой тут компонент использовать, чтобы можно было так выводить на форму?
хм, видимо что то делаю не так. Не добавляются строки в ComboBox
var Form1: TForm1; E,Sheet:variant; iRow, iClm: integer;
implementation
{$R *.dfm}
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); var R : TRect; begin if ((ACol = 1) AND (ARow <> 0)) then begin {Размер и расположение combobox подгоняем под ячейку} {combobox должен быть в первой строке во втором столбце} R := StringGrid1.CellRect(ACol, ARow); R.Left := R.Left + StringGrid1.Left; R.Right := R.Right + StringGrid1.Left; R.Top := R.Top + StringGrid1.Top; R.Bottom := R.Bottom + StringGrid1.Top; ComboBox1.Left := R.Left + 1; ComboBox1.Top := R.Top + 1; ComboBox1.Width := (R.Right + 1) - R.Left; ComboBox1.Height := (R.Bottom + 1) - R.Top; {Показываем combobox} ComboBox1.Visible := True; ComboBox1.SetFocus; end; CanSelect := True; end;
procedure TForm1.FormCreate(Sender: TObject); var i : integer; begin {Высоту у combobox не получится установить, поэтому мы будем} {подгонять размер у грида под размер combobox!} StringGrid1.DefaultRowHeight := ComboBox1.Height; {Скрываем combobox} ComboBox1.Visible := False; StringGrid1.ColWidths[0]:=40; StringGrid1.ColWidths[1]:=300; StringGrid1.ColWidths[2]:=110; StringGrid1.ColWidths[3]:=110; StringGrid1.ColWidths[4]:=110; E:=CreateOleObject('Excel.Application'); E.WorkBooks.Open('C:\\123.xlsx'); E.WorkBooks.item [1].Activate; Sheet:=E.WorkBooks.item [1].Sheets.item[1]; iRow := Sheet.UsedRange.Row + Sheet.UsedRange.Rows.Count - 1; //последняя заполненая строка iClm := Sheet.UsedRange.Column + Sheet.UsedRange.Columns.Count - 1; //последний заполненый столбец for i:=1 to iRow do ComboBox1.Items.Add(Sheet.Cells[i,1].Text); ... end;
procedure TForm1.ComboBox1Change(Sender: TObject); begin {Получаем выбранный элемент из ComboBox и помещаем его в грид} StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row] := ComboBox1.Items[ComboBox1.ItemIndex]; ComboBox1.Visible := False; StringGrid1.SetFocus; end;
procedure TForm1.ComboBox1Exit(Sender: TObject); begin {Получаем выбранный элемент из ComboBox и помещаем его в грид} StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row] := ComboBox1.Items[ComboBox1.ItemIndex]; ComboBox1.Visible := False; StringGrid1.SetFocus; end;