0 / 0 / 0
Регистрация: 21.12.2015
Сообщений: 7
|
|
1 | |
Как передать значения grid.cells в описание кнопки?09.04.2016, 17:24. Показов 1512. Ответов 7
Метки нет (Все метки)
Как передать значение grid.cells (данные получил с екселя) и передать данные grid.cells в процедуру нажатия кнопки?
0
|
09.04.2016, 17:24 | |
Ответы с готовыми решениями:
7
CBuilder 6. Как передать StringGrid->Cells в функцию? Как достать и передать в другой метод значения нескольких текстовых полей по нажатию кнопки? Grid Click. Подключить данные, которые находятся в cells в выбраном ряду? NoWrap для ASP.NET - e.Row.Cells[grid.SortColumn].Wrap = false; |
500 / 356 / 231
Регистрация: 29.03.2015
Сообщений: 675
|
||||||
09.04.2016, 18:59 | 2 | |||||
В событие нажатия на кнопку, например procedure TForm1.Button1Click(Sender: TObject); уже переданы значения Grid.Cells[i,j], где i для редактируемых ячеек изменяется от числа фиксированных столбцов Grid.FixedCols до (Grid.ColCount-1), а j для редактируемых ячеек изменяется от числа фиксированных строк Grid.FixedRows до (Grid.RowCount-1). Первый столбец и строка имеют номер 0.
Я видел Вашу тему Работа в ексель с делфи. Допустим у Вас в пятом столбце Grid вещественные числа и количество фиксированных строк равно 0, тогда найти количество повторяющихся элементов массива, вывести элементы и количество в столбцы шестой и седьмой можно так:
0
|
0 / 0 / 0
Регистрация: 21.12.2015
Сообщений: 7
|
|
09.04.2016, 19:25 [ТС] | 3 |
Спасибо большое за ответ, но у меня всеравно выдает ошибку при нажатии кнопки((
0
|
500 / 356 / 231
Регистрация: 29.03.2015
Сообщений: 675
|
|
09.04.2016, 19:46 | 4 |
На картинке не виден мой код в procedure TForm1.Button1Click(Sender: TObject);. Замените моим кодом procedure TForm1.Button1Click(Sender: TObject);.
При такой ошибке закройте Delphi. Через несколько секунд запустите Delphi опять, откройте проект и запустите заново.
0
|
0 / 0 / 0
Регистрация: 21.12.2015
Сообщений: 7
|
|
09.04.2016, 20:05 [ТС] | 5 |
Все сделал как вы сказали, но всеравно ошибка
0
|
0 / 0 / 0
Регистрация: 21.12.2015
Сообщений: 7
|
|
09.04.2016, 20:28 [ТС] | 6 |
Вот весь код с поправкой на ваш, у меня мозг взрывается уже не понимаю в чем дело
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Grids, Vcl.Menus,ComObj; type TForm1 = class(TForm) OpenDialog1: TOpenDialog; MainMenu1: TMainMenu; N1: TMenuItem; N3: TMenuItem; N2: TMenuItem; N4: TMenuItem; N5: TMenuItem; SaveDialog1: TSaveDialog; StringGrid1: TStringGrid; Button1: TButton; procedure N3Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Grid:TStringGrid; implementation {$R *.dfm} procedure Xls_Open(XLSFile:string; Grid:TStringGrid); const xlCellTypeLastCell = $0000000B; var ExlApp : OLEVariant; Sheet : OLEVariant; i, j,c,r: integer; begin //создаем объект Excel ExlApp := CreateOleObject('Excel.Application'); //делаем окно Excel невидимым ExlApp.Visible := false; //открываем файл XLSFile ExlApp.Workbooks.Open(XLSFile); //создаем объект Sheet(страница) и указываем номер листа (1) //в книге, с которого будем осуществлять чтение Sheet := ExlApp.Workbooks[ExtractFileName(XLSFile)].WorkSheets[1]; //активируем последнюю ячейку на листе Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate; // Возвращает номер последней строки r := ExlApp.ActiveCell.Row; // Возвращает номер последнего столбца c := ExlApp.ActiveCell.Column; //устанавливаем кол-во столбцов и строк в StringGrid Grid.RowCount:=r; Grid.ColCount:=c; //считываем значение из каждой ячейки и копируем в нашу таблицу for j:= 1 to r do for i:= 1 to c do Grid.Cells[i-1,j-1]:= sheet.cells[j,i].text ; //закрываем приложение Excel ExlApp.Quit; ExlApp := Unassigned; Sheet := Unassigned; end; procedure TForm1.Button1Click(Sender: TObject); var i,j,k,l,n,c:integer; a:array of extended; b:array of record e:extended; c:integer; end; begin l:=grid.RowCount; setlength(a,l); for i:=1 to l-1 do begin try a[i]:=strtofloat(grid.Cells[3,i]); except showmessage('Значение в строке '+inttostr(i+1)+' должно быть числом!'); exit; end; end; setlength(b,0); i:=0; while i<length(a) do begin c:=1; j:=i+1; l:=0; while j<length(a) do begin if a[j]=a[i] then begin c:=c+1; if c=2 then begin l:=length(b); setlength(b,l+1); b[l].e:=a[i]; end; n:=length(a)-1; for k:=j+1 to n do a[k-1]:=a[k]; setlength(a,n); end else j:=j+1; end; if c>1 then b[l].c:=c; i:=i+1; end; with grid do begin if colcount<7 then colcount:=7; cols[5].Clear; cols[6].Clear; for i:=0 to length(b)-1 do begin cells[5,i]:=floattostr(b[i].e); cells[6,i]:=floattostr(b[i].c); end; end; end; procedure TForm1.N3Click(Sender: TObject); begin If OpenDialog1.Execute then Xls_Open (OpenDialog1.FileName, StringGrid1); end; end.
0
|
500 / 356 / 231
Регистрация: 29.03.2015
Сообщений: 675
|
||||||
09.04.2016, 21:00 | 7 | |||||
В Вашей программе данные загружаются не в Grid, а в StringGrid1. Потом Вы не правильно заменили мой код "for i:=0 to l-1 do" на "for i:=1 to l-1 do". Также у меня "a[i]:=strtofloat(grid.Cells[4,i]);", а у Вас "a[i]:=strtofloat(grid.Cells[3,i]);". Но в этом месте пишите как хотите, столбцы нумеруются начиная с 0.
Замените Ваш procedure TForm1.Button1Click(Sender: TObject); на этот код:
Прикрепляю архив к этому сообщению с проектом с работой этой кнопки. Если у Вас не получится заменить свой код моим, то прикрепите к Вашему сообщению архив с Вашим проектом и таблицей Excel, чтобы я его сам отредактировал.
1
|
0 / 0 / 0
Регистрация: 21.12.2015
Сообщений: 7
|
|
09.04.2016, 21:33 [ТС] | 8 |
Спасибо большое, действительно все записывалось в StringGrid1, все заработало)))
0
|
09.04.2016, 21:33 | |
09.04.2016, 21:33 | |
Помогаю со студенческими работами здесь
8
AngularJs и KendoUI Grid, Как передать параметр и обновить таблицу? With Worksheets('Лист1') TestVvod Obl:=.Range(.Cells(x,y),.Cells(x+5,y+10)) end with Как случайно изменить расположение кнопки в зависимости от размеров Grid ThisWorkbook.Worksheets('Table').Range(Cells(i, 9), Cells(i, 12)).Select Selection.Delete Shift:=xlUp Ошибка 1004 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |