Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.81/64: Рейтинг темы: голосов - 64, средняя оценка - 4.81
 Аватар для RedBull
3 / 3 / 0
Регистрация: 01.07.2010
Сообщений: 53

Отображение данных из Excel в TStringGrid.

05.11.2010, 08:22. Показов 14019. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
подскажите пожалуйста как отобразить таблицу Excel-я в DBGrid!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.11.2010, 08:22
Ответы с готовыми решениями:

корректное отображение импортированных данных в формулах excel
здравствуйте. хочу испросить совета у знающих и авторитетных людей. проблема состоит в следующем: не могу понять почему содержимое...

Импорт из MS Excel в TStringGrid
Здравствуйте. Не получается импортировать данные из Excel. На Builder 6 работает нормально, но не получется с использованием компилятора...

C++ XE7 -Чтение файла с FTP устройством на Android и отображение его в TStringGrid
Добрый день! На FTP лежит файл report.txt. Его надо считать и отобразить в TStringGrid. Компилятор - Embarcadero C++ XE7 Платформа...

40
 Аватар для RedBull
3 / 3 / 0
Регистрация: 01.07.2010
Сообщений: 53
28.12.2010, 08:23  [ТС]
Студворк — интернет-сервис помощи студентам
нет,мне нужно загружать также таблице только на других ормах!И не в один StringGrid!Нужно что бы это всё можно было делать на нескольких формах!на каждой форме и кнопка загрузки и сама таблица(сразу скажу что таблицы разные),и таких копий оч много,нужно чтоб на каждую форму по таблице загрузить!а там уже я сам,прогсто вылазеет ошибка:
ExApp := CreateOleObject('Excel.Application');- на этой строке
ошибка такая: Undeclared identifier:'CreateOleObject'
что делать не знаю=()а прогу на сегодня нужно доделать=(((
0
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
28.12.2010, 11:07
Цитата Сообщение от RedBull Посмотреть сообщение
ExApp := CreateOleObject('Excel.Application');- на этой строке
ошибка такая: Undeclared identifier:'CreateOleObject'
Потому что функция CreateOleObject() объявлена в модуле ComObj, а этот модуль видимо не подключен.
Т. е., в том модуле, который вызвает CreateOleObject() должно быть написано:
Delphi
1
2
uses
  ComObj;
Цитата Сообщение от RedBull Посмотреть сообщение
мне нужно загружать также таблице только на других ормах!И не в один StringGrid!Нужно что бы это всё можно было делать на нескольких формах!на каждой форме и кнопка загрузки и сама таблица(сразу скажу что таблицы разные),и таких копий оч много,нужно чтоб на каждую форму по таблице загрузить!
Так я же говорил на этот счёт - тот код, который загружает данные из Excel в таблицу надо офомить в виде отдельной процедуры. Заголовок этой процедуры должен быть таким:
Delphi
1
2
3
4
5
6
7
8
9
10
11
uses
  ComObj;
 
procedure LoadFromExcel(const aExFileName : String; aSg : TStringGrid);
var
  ExApp : Variant;
...
begin
  ExApp := CreateOleObject('Excel.Application');
...
end;
Т. е. эта процедура должна открывать в Excel файл с именем aExFileName. Затем эта процедура грузит данные с листа Excel в таблицу aSg.
Эту процедуру можно использовать на всех формах для различных таблиц типа TStringGrid.
Предположим, что процедура описана в модуле Unit1. Пример вызова:
Delphi
1
2
3
4
5
6
7
8
9
10
uses
  Unit1; //В этом модуле определена процедура LoadFromExcel().
 
//Вызов из внешнего по отношению к TForm3 кода:
LoadFromExcel('D:\Книга1.xls', Form3.StringGrid1);
...
//Вызов из какого-нибудь метода TForm3:
LoadFromExcel('D:\Книга1.xls', StringGrid1);
//или:
//LoadFromExcel('D:\Книга1.xls', Self.StringGrid1);
Только надо не забывать прописывать подключение модуля ComObj в том модуле, где лежит реализация функции LoadFromExcel(). А также не забывать подключать модуль с реализацией LoadFromExcel() к тем модулям проекта, где эта функция вызывается.
1
 Аватар для RedBull
3 / 3 / 0
Регистрация: 01.07.2010
Сообщений: 53
14.01.2011, 11:57  [ТС]
здравствуйте ещё раз!дайте совет пожалуйста по более сложному вопросу=\
я вообще не знаю как это вообще возможно сделать!
При нажатии на кнопку открывается opengialog в котором выбираем не один файл а сразу много,ну например!20 или 30!не важно сколько!!для моей программы нужно 300 таблиц загружать одновременно,т,е раньше я делал по нажатию кнопки на каждой форме загружать свою таблицу,но когда я стал загружать 10 и более таблиц,я задумался=\для каждой формы загружать свою таблицу это оч мучительно,а мремени раймёт минимум минут 40!
вобщем мне нужно загружать много таблиц одновременно на разные формы,и ещё,!!!будут таблицы с названием 1,2,3,4....итд!то есть таблица под названием 1 для первой формы,файл под названием
2 для второй формы таблицы
т.е какая цифра на ту форму в StringGrid и загружать!если возьмём две таблицы 1 и 5-значит загружаться должно в первую и пятую!
как это вообще сделать возможно???и возможно ли?=\
подскажие если не сложно хотябы чуть чуть!
0
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
14.01.2011, 23:18
А может не нужна для каждой загрузки отдельная форма? Действия, наверное, однотипные? Возможно, для обработки даже таблица не нужна. Вернее - саму обработку можно делать на массиве.
Предлагаю рассмотреть такую архитектуру:
Написать базовую процедуру, которая должна работать так:
- Загрузка данных из таблицы Excel в массив.
- Обработка массива.
- Выгрузка выходных данных.
Далее, пишется вызывающий код, на вход которого поступает массив Excel-файлов. Этот код с помощью базовой процедуры последовательно обрабатывает все файлы из входного массива.
Можно вести обработку файлов в многопоточном режиме. Выделить, на это, скажем, 3-5 потоков (с учётом того, что загрузка идёт через OLE-механизм).
---
RedBull, на сколько такой вариант приемлем?
0
 Аватар для RedBull
3 / 3 / 0
Регистрация: 01.07.2010
Сообщений: 53
16.01.2011, 14:03  [ТС]
ммм,я вообще нифига не монял что ты написал=)))
но мне кажется это всё равно лучше=)
но я вообще не представляю как это=\
не,для меня легче будет сделать так=)
разные формы и загрузка таблиц на все формы одним кликом=)тольк я не знаю как это сделать=\
с учётом какая цифра в имени на такую форму и загружать!
с чего лучше всего начать?:cofee2:
0
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
17.01.2011, 12:27
RedBull, предлагаю сделать в виде MDI приложения. Проект приложен к этому сообщению.
Работает так:
- Для открытия можно выбирать отдельный файл, группы файлов или целые папки.
- Ведётся список открытых файлов.
- Для загрузки создаётся только один экземпляр Excel.
- Загрузка выполняется в основном потоке. В дальнейшем загрузку можно реализовать в отдельном потоке.
Миниатюры
Отображение данных из Excel в TStringGrid.  
Вложения
Тип файла: rar ReadFromExcel.rar (217.2 Кб, 68 просмотров)
1
 Аватар для RedBull
3 / 3 / 0
Регистрация: 01.07.2010
Сообщений: 53
02.02.2011, 14:36  [ТС]
большое спасибо за такую программу!очень удобная!с такими ни разу в жизни не работал
теперь возник вопрос: как задать в поиск строки во втором столбце всех таблиц!причём каждая таблица за свой Shape на другой форме!имеется интервал который вводит пользователь!
К примеру: пользователь вводит интервал I)-0,15 II)1,3!вводит ещё №строки в edit!идёт поиск этой строки во всех таблицах во 2 столбце!когда находит,смотрит если это число в этой строке больше интервала то Shape красный,если это число в строке между интервалом значит желтый,и если меньше тогда зелёный!причём каждая таблица имеет свой Shape!и только в нем она должна менять цвет!ещё оч круто было бы если:название таблицы(число) соответствовало своему Shape!т.е если таблица под названием 16 то она и будет менять цвет только в Shape16!и так далее!
вот есть готовый код из старой программы но для этой нужно делать что то новое,с такими программами я ещё не сталкивался!так что я лол
________________________________________ ________
var i:Integer; k:real;
begin
i := strtoint(form2.edit1.text); берёт значение из интервала
form4.label3.Caption:=form1.stringgrid1. cells[0,i]; //показывает число от первой строки

bitbtn1.Caption:=form1.stringgrid1.cells[1,i];
k:=strtofloat(bitbtn1.Caption);
form4.label4.Caption:=floattostr(k); //показывает число от второй строки
if (k<=1) then begin form3.shape1.brush.color:=clLime end ; // определяет число больше или меньше,присваивается свой цвет Shape
if (k>1) and (k<=2)then begin form3.shape1.brush.color:=clYellow end;
if (k>2) then begin form3.shape1.brush.color:=clred end;
0
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
02.02.2011, 21:25
RedBull, я в субботу этой темой займусь.
0
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
10.03.2011, 16:29
Выкладываю вариант решения.
Миниатюры
Отображение данных из Excel в TStringGrid.  
Вложения
Тип файла: rar ReadFromExcel.rar (223.9 Кб, 68 просмотров)
1
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
10.03.2011, 16:52
Ради тривиального импорта данных из XLS(X)-контейнера нет никакой нужды городить огород с Excel. Вполне достаточно воспользоваться компонентом Axolot XLSReadWriteII 4 - он прекрасно работает с контейнером напрямую, исключительно удобен в программном его использовании и не требует присутствия в системе установленного Excel.
0
Фрилансер
 Аватар для Mad_Dog
452 / 433 / 117
Регистрация: 01.06.2010
Сообщений: 1,314
10.03.2011, 17:12
mss, и сколько же зелени нужно заплатить за сей шедевр??? В Гугл можешь не посылать, уже был там... Ты для всех цены озвучь, плиз!!!
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
10.03.2011, 17:22
> сколько же зелени нужно заплатить за сей шедевр?

А что, Офис дешевле ?)
Или в нашем царстве-государстве всякий юзер исправно пользует искл-но лицензионный Офис ?)
Или что-то мешает пользовать НЕлицензионный TXLSReadWrite ?)

Вот то-то и оно)
0
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
10.03.2011, 17:31
Цитата Сообщение от mss Посмотреть сообщение
Вполне достаточно воспользоваться компонентом Axolot XLSReadWriteII 4
Здесь, как я понял, по заданию требуется работать через OLE-связывание. А так, для практических задач - да, может быть, надёжнее какой-нибудь компонент использовать.
Цитата Сообщение от Mad_Dog Посмотреть сообщение
mss, и сколько же зелени нужно заплатить за сей шедевр??? В Гугл можешь не посылать, уже был там... Ты для всех цены озвучь, плиз!!!
А, он дорогой, значит?
Цитата Сообщение от mss Посмотреть сообщение
А что, Офис дешевле ?)
Ну Офис, по крайней мере - им и так рабочие места комплектуют, стандартный набор - MS Word, Excel. А вот компонент покупать - это уже дополнительные траты.
0
Фрилансер
 Аватар для Mad_Dog
452 / 433 / 117
Регистрация: 01.06.2010
Сообщений: 1,314
10.03.2011, 17:34
mss!
Что-то я сомневаюсь, что ты для своих нужд платил за этот опус свои кровные... В лучшем случае платила фирма где ты работаешь... Или я не прав???
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
10.03.2011, 17:46
Зачем платить-то ?)
Продукт шароварный)
Не нравится демо-ограничения ? Ковырнул пару байт - вот тебе и полнофункциональный.
Ответственность наступит только в случае коммерч.применения, о котором в задании, равно как и об именно олей-доступе, нет ни слова.
0
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
03.04.2011, 00:20
RedBull, по результатам переписки в ЛС выкладываю проект с формой индикаторов. Набор индикаторов реализован на основе TStringGrid. Особенностью является то, что на самом деле, эта таблица не содержит данных. Её ячейки используются только для индикации - их содержимое, цвет, текст, прорисовываются на основе внешних данных, взятых из FormMain.ListBox1. FormMain.ListBox1 - это основной элемент, связывающий данные. Размер таблицы индикаторов подбирается автоматически, в зависимости от количества прочитанных файлов. В инспекторе объектов можно менять количество столбцов таблицы. Количество строк подбирается автоматически во время работы программы.
Форма индикаторов запускается в модальном режиме. Можно сделать её не модальной - если это удобнее.
Миниатюры
Отображение данных из Excel в TStringGrid.  
Вложения
Тип файла: rar Project03.rar (227.6 Кб, 30 просмотров)
0
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
10.04.2011, 17:04
И ещё проект с сортировкой списка файлов. Определены 4 процедуры сортировки - по убыванию и возрастанию, по целочисленным значениям, записанных в строках и по строковым значениям:
SortListNumAsc(), SortListNumDesc(), SortListStrAsc(), SortListStrDesc().
Вложения
Тип файла: rar Project03.rar (226.6 Кб, 38 просмотров)
1
0 / 0 / 0
Регистрация: 03.01.2012
Сообщений: 57
03.01.2012, 16:09
Mawrat
А как прикрутить поиск одновременно со всех открытых файлов(форм) по тексту введенному в Edit на главной форме, и все найденные результаты поместить в отдельный грид?
0
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
04.01.2012, 02:16
Поиск текста на листе книги MS Excel можно выполнить так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
uses
  ComObj;
 
procedure TForm1.Button1Click(Sender: TObject);
const
  //Группа констант XlFindLookIn.
  //Искать только в комментариях, прикреплённых к ячейкам.
  xlComments = -4144;
  //Искать только в тексте формул.
  xlFormulas = -4123;
  //Искать только в значениях ячеек.
  xlValues = -4163;
 
  //Группа констант XlLookAt.
  //Искомый текст может быть частью строки или всей строкой.
  xlPart = 2;
  //Искомый текст может быть только всей строкой.
  xlWhole = 1;
var
  exApp, exBook, exSheet, exRng, exCell : Variant;
  sTemplate, sAddress : String;
  i : Integer;
  Od : TOpenDialog;
begin
  Od := OpenDialog1;
  if Od.InitialDir = '' then
    Od.InitialDir := ExtractFilePath( Application.exeName )
  ;
  if not Od.Execute then Exit;
  if not FileExists(Od.FileName) then begin
    MessageBox(
      0
      ,PChar('Файл с указанным именем не найден. Действие отменено.')
      ,PChar('Предупреждение')
      ,MB_OK + MB_ICONWARNING + MB_APPLMODAL
    );
    Exit;
  end;
 
  sTemplate := Edit1.Text;
  if STemplate = '' then begin
    ShowMessage('Не задан искомый текст. Действие отменено.');
    Exit;
  end;
  Memo1.lines.Add('Искомый текст: "' + sTemplate + '".');
 
  exApp := CreateOleObject('Excel.Application');
  exApp.Visible := True;
  exBook := exApp.WorkBooks.Open(FileName:=Od.FileName);
  //Первый лист в рабочей книге.
  exSheet := exBook.WorkSheets[1];
  //Используемый на листе диапазон.
  exRng := exSheet.UsedRange;
 
  //Поиск ячееек.
  i := 0;
  exCell := Unassigned;
  //LookIn:=xlValues - ищем только в значениях ячеек.
  //LookAt:=xlPart - искомый тект может быть частью строки или всей строкой.
  //MatchCase:=False - поиск не зависит от регистра букв.
  exCell := exRng.Find(What:=STemplate, LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False);
  if TVarData(exCell).VDispatch <> nil then begin
    sAddress := exCell.Address;
    repeat
      inc(i);
      Memo1.lines.Add(
        'Соответствие найдено: Cell[' + IntToStr(exCell.Row) + ';' + IntToStr(exCell.Column)
        + '].Text = "' + exCell.Text + '".'
      );
      exCell := exRng.FindNext(After:=exCell);
    until exCell.Address = sAddress;
  end;
 
  if i = 0 then
    Memo1.lines.Add('Ни одного соответствия не найдено.')
  else
    Memo1.lines.Add('Найдено соответствий: ' + IntToStr(i))
  ;
  Memo1.lines.Add('--------------------------------------------------');
 
  //Если требуется, закрываем рабочую книгу.
  //exBook.Close;
 
  //...
 
  //Выход из Excel.
  //exApp.Quit;
end;
Здесь на форму надо положить компоненты: TOpenDialog, TButton, TEdit, TMemo. Для кнопки Button1 создать обработчик события OnClick.
Программа работает так: в Edit1 надо ввести искомый текст, затем нажать кнопку - запустится диалог выбора файла. Выбрать файл *.xls или *.xlsx. Программа запустит Excel, откроет в Excel выбранную рабочую книгу и выполнит поиск заданного текста на первом листе книги. Сведения обо всех обнаруженных совпадениях будут распечатаны в Мемо1.
---
Для того, чтобы запрограммировать поиск в нескольких книгах достаточно взять этот код в качестве основы и добавить перебор книг. Каждую книгу открывать и обрабатывать так, как показано в коде. Если надо добавить обработку всех листов рабочей книги, для этого следует добавить цикл перебора листов:
Delphi
1
2
3
4
5
6
7
8
9
10
var
  j, ... : Integer;
...
begin
...
  for j := 1 to exBook.WorkSheets.Count do begin
    //Очередной лист в рабочей книге.
    exSheet := exBook.WorkSheets[j];
    ...
  end;
1
0 / 0 / 0
Регистрация: 03.01.2012
Сообщений: 57
04.01.2012, 12:19
Mawrat
Спасибо, но хотелось бы искать не из книги Exel, а уже из загруженных книг из Exel в StringGrid. Все, как у вас выше в программе + одновременный поиск во всех открытых гридах и занесения всех строк(в которых поле соответсвует условию поиска) в отдельный грид.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.01.2012, 12:19

Неправильное отображение даты при импорте данных из Excel в DataGridView
Привет Импортирую данные из Excel в DataGridView: private void button1_Click(object sender, EventArgs e) { ...

Ввод данных в TStringGrid
Подскажите как осуществлять ввод данных в ячейки TStringGrid , чтобы потом переносить, после ввода в каждую ячейку, эти данные в другой...

Расчет данных в Tstringgrid по формуле
Здравствуйте! Тема такая, пишу программу для расчета данных по формуле, введенной в компонент Tedit, суть в том, что допустим в эдит...

Импорт данных из Tstringgrid в Word
Ребят, прошу вашей помощи, я физически не успеваю этого сделать, так как на мне висит еще две процедуры, суть в том, чтоб подстроить этот...

Загрузка данных из файла .txt в TStringGrid
Доброго времени суток, уважаемые форумчане! Подскажите пожалуйста, как загрузить данные из txt файла в stringgrid? Гуглил, гуглил, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru