|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] перекинуть данные из Excel в прогу на Delphi |
|
Delphi - [решено] перекинуть данные из Excel в прогу на Delphi
|
Пользователь Сообщения: 121 |
Профиль | Отправить PM | Цитировать
Привет всем.
Помогите решить задачку. Есть файл эксель, содержит в себе данные в трёх столбцах (пример приложен) и примерно 25 строчках, на одном листе. Надо из него подгрузить эти данные в программу на Delphi в модуль StringGrid. На скрине зафиксировал то чего уже удалось добиться в графическом виде, с кодом пока значительно сложнее, посему и прошу вашей помощи. Хотелось бы чтобы поподробнее объяснили, что к чему, зачем и почему. Спасибо. PS: хотелось бы сразу добавить небольшое усложнение задачи, сделать так чтобы программа в зависимости от времени суток выводила только нужные строки. То есть, в первом столбце таблицы Excel у нас будет время (в формате HH:MM), вот надо чтобы прога выводила например строки с временем с 9:00 до 15:00 именно в это время суток, следующую часть строк (с 15:00 до 21:00) она уже выводила именно с 15 до 21 часа. |
|
Отправлено: 16:56, 18-04-2011 |
В Поисках Истины Сообщения: 802
|
Профиль | Отправить PM | Цитировать anatoly_neo, Здравствуйте! Вытащить данные из Excel можно следующим образом :
excel : Variant; // Объявляем переменную ............... excel := CreateOleObject('Excel.Application'); excel.Workbooks.Open("excelfile.xls"); //Открываем файл excel RowsCount := excel.ActiveSheet.UsedRange.Rows.Count; //Получаем количество использованных строк* for i := 0 to RowsCount begin // выполняем операции со строками** end excel.ActiveWorkbook.Close;//закрываем файл excel excel.Application.Quit;//"закрываем" excel приложение ** - Обращаться к ячейкам так : где i - строка, j - столбец Цитата anatoly_neo:
P.S. не забыть добавить |
|
------- Отправлено: 07:49, 19-04-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 121
|
Профиль | Отправить PM | Цитировать как открыть файлик вроде разобрался, но вот как прочитать оттуда ячейки и закинуть их в StringGrid так и не могу пока понять, подмогните плиз
|
Отправлено: 10:16, 20-04-2011 | #3 |
В Поисках Истины Сообщения: 802
|
Профиль | Отправить PM | Цитировать Цитата anatoly_neo:
Например по представленному вами файлу Excel : for i := 2 to 4 do begin sg.cells[i - 1, 0] := excel.cells[i, 1].Value; // время sg.cells[i - 1, 1] := excel.cells[i, 2].Value; // фио sg.cells[i - 1, 2] := excel.cells[i, 3].Value; // номер если количество строк неизвестно заранее то |
|
------- Отправлено: 10:37, 20-04-2011 | #4 |
Пользователь Сообщения: 121
|
Профиль | Отправить PM | Цитировать что-то не хочет работать такая вот комбинация:
procedure TForm1.Button1Click(Sender: TObject); var excel : variant; i, j, n: integer; begin n := OpenFile(); //Caption := ExtractFileName(Form1.OpenDialog1.FileName); for i := 1 to 3 do begin sg1.cells[i - 1, 0] := excel.cells[i, 1].Value; // время sg1.cells[i - 1, 1] := excel.cells[i, 2].Value; // фио sg1.cells[i - 1, 2] := excel.cells[i, 3].Value; // номер end; end; жалуется на "Undeclarated identifier 'Value' ".... |
|
Отправлено: 11:32, 21-04-2011 | #5 |
В Поисках Истины Сообщения: 802
|
Профиль | Отправить PM | Цитировать В коде у меня тоже подчеркивается красным, и та же ситуация Undeclarated identifier 'Value', но при этом все компилируется и работает отлично! Что делает строка
? И где инициирование переменной excel? Тут было все довольно конкретно описано! |
Последний раз редактировалось LilLoco, 21-04-2011 в 13:03. Отправлено: 12:58, 21-04-2011 | #6 |
Пользователь Сообщения: 105
|
Профиль | Отправить PM | Цитировать LilLoco,
вопрос в догонку так сказать для собственного просвещения. Цитата LilLoco:
и если создает то внутри кого VBA или Delphi (в применительно к условиям anatoly neo ) |
|
------- Отправлено: 14:07, 21-04-2011 | #7 |
Пользователь Сообщения: 121
|
Профиль | Отправить PM | Цитировать n := OpenFile(); - это у меня была функция сделана для открытия файла...
переделал как вы писали выше, вроде и правда заработало. получилось как то вот так: procedure TForm1.Button1Click(Sender: TObject); var excel : variant; i, j, RowsCount: integer; begin Form1.OpenDialog1.Execute(); excel := CreateOleObject('excel.application'); excel.workbooks.open[Form1.OpenDialog1.FileName]; RowsCount := excel.ActiveSheet.UsedRange.Rows.Count; excel.Cells.SpecialCells(xlCellTypeLastCell,EmptyParam).Activate; for i := 1 to RowsCount do begin sg1.cells[i - 1, 0] := excel.cells[2, i].Value; // время sg1.cells[i - 1, 1] := excel.cells[3, i].Value; // фио sg1.cells[i - 1, 2] := excel.cells[4, i].Value; // номер end; excel.activeworkbook.close; excel.application.quit; end; будем думать и химичить, если не дойдёт как наверно ещё обращусь PS: только одного не понял, вроде бы в sg1.cells[i , j] , i - это столбец, а j - это строка... но по вашему примеру он мне строки в столбцы выводил, а так как написано у меня, он выводит строки в строчку, как мне и хотелось... в чём же загадка? |
Последний раз редактировалось anatoly_neo, 21-04-2011 в 14:15. Отправлено: 14:09, 21-04-2011 | #8 |
В Поисках Истины Сообщения: 802
|
Профиль | Отправить PM | Цитировать Цитата anatoly_neo:
Цитата Хоф:
ИМХО, создается просто ссылка на объект, так как сам excel во время работы запускается в фоновом режиме, это можно отследить в процессах, а по окончании работы с документом из программы Delphi, он выгружается из памяти! Не думаю, что в программе под эту переменную выделяется много памяти! |
||
------- Отправлено: 14:35, 21-04-2011 | #9 |
Пользователь Сообщения: 121
|
Профиль | Отправить PM | Цитировать |
Отправлено: 14:37, 21-04-2011 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
как перекинуть все данные с одного компа на другой | Pavelasd | Хочу все знать | 9 | 27-06-2011 06:32 | |
CMD/BAT - [решено] Как внести данные в реестр из батника без подтверждения запроса и запустить прогу? | Nun-Nun | Скриптовые языки администрирования Windows | 3 | 11-05-2011 11:41 | |
Как из сим карты перекинуть данные старые в новый телефон? | micro8 | Мобильные ОС, смартфоны и планшеты | 4 | 27-09-2010 18:48 | |
2007 - Excel | Не отображаются данные | devilless | Microsoft Office (Word, Excel, Outlook и т.д.) | 0 | 08-07-2010 09:49 | |
Delphi - Delphi: как закрыть чужую прогу | pvr30 | Программирование и базы данных | 13 | 06-08-2003 19:15 |
|