Sniper
 Аватар для dimafe6
96 / 64 / 4
Регистрация: 28.01.2010
Сообщений: 326

Запись и чтение Excel

07.07.2010, 17:36. Показов 8365. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте. Подскажите как реализировать возможность записывать информацию с полей в лист Excel. После записи, при выборе соответствующего пункта меню, производить чтение информации из Excel, с выводом результата в те же поля TEdit.Перемещение по листу Excel осуществлять с помощью SpinEdit. Например у меня на форме находится 12 полей TEdit,3 ComboBox,1 RichEdit.
Перед записью проверять заполненость столбца 1 в Excel, и устанавливать счётчик SpinEdit в положение первой незанятой ячейки столбца 1.
При выборе пункта меню:"Добавить запись" нужно записать информацию со всех полей в лист Excel, и прибавить счётчику SpinEdit единицу, чтобы можно было записать информацию в следующую строчку.
При выборе пункта меню:"Прочитать" нужно выводить информацию по строчкам во все поля. Индексом строчки служит SpinEdit.
Я сделал так:
Вот функция проверки на занятость ячеек столбца 1:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
Function NoUsedCells(FindIN:TExcelApplication):integer;
var i,n:integer;
Begin
i:=0;n:=0;
Repeat
i:=i+1;
begin
if FindIN.Cells.Item[i,1].Value<>'' then n:=n+1;
end;
until FindIN.Cells.Item[i,1].Value='';
n:=n-1;
Result:=n;
end;
Вот сама запись:

Delphi
1
2
3
4
5
6
7
8
"Добавить запись":
...
IndexCur:=NoUsedCells(ExcelApplication1); //присваиваю начальную позицию для записи
ExcelApplication1.Cells.Item[IndexCur,1].Value:=Edit1.Text; //записываю значение полей
...//записываю значение полей
ExcelApplication1.Cells.Item[IndexCur,1].Value:=Edit12.Text; //записываю значение полей
SpinEdit1.Value:=SpinEdit1.Value+1;
ExcelApplication1.ActiveWorkbook.Close(True,FExcel,False,0); //закрываю и сохраняю книгу
Вот чтение:

Delphi
1
2
3
4
5
"Прочитать":
Edit1.Text:=ExcelApplication1.Cells.Item[SpinEdit1.Value,1].Value;//читаю
... //читаю
Edit12.Text:=ExcelApplication1.Cells.Item[SpinEdit1.Value,1].Value; //читаю
ExcelApplication1.ActiveWorkbook.Close(True,FExcel,False,0); //закрываю и сохраняю книгу
Правильно ли я всё ето делаю? Может есть лучший алгоритм?Или проще использовать Access?. Пишу для себя, поетому нужно все сделать как можно проще. Заранее благодарен.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.07.2010, 17:36
Ответы с готовыми решениями:

Запись и чтение, TMemoryStream
Доброе всем утро, я пытаюсь записать значения в TMemoryStream и проверить их, т.е., получить их обратно: Запись в поток: procedure...

Чтение и запись данных
Здравствуйте, я записываю данные в файл (длинный код): vsevolod-s10.hut4.ru\открытия.txt И читаю я их таким образом:...

Чтение/запись файла
Работаю над &quot;патчером&quot; для файлов одной игры, которая заменяет определённые значения в файле. Фактически это происходит так: считываю...

3
Фрилансер
 Аватар для Mad_Dog
452 / 433 / 117
Регистрация: 01.06.2010
Сообщений: 1,314
07.07.2010, 18:08
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
var
  BaseBook:Variant;
  XLSColumnMaxBase,XLSRowMaxBase:word;
 
//далее в программе...
        ExcelApp.Workbooks.Item[ExcelApp.Workbooks.Count].Activate;
        BaseBook:=ExcelApp.Workbooks.Item[ExcelApp.Workbooks.Count];
        BaseBook.Sheets.Item[SheetNameBaseXLS].Select;
         //выделяю область данных листа...
        ExcelApp.ActiveWorkbook.ActiveSheet.UsedRange.Select;
        XLSColumnMaxBase:=BaseBook.ActiveSheet.UsedRange.Columns.Count;
        XLSRowMaxBase:=BaseBook.ActiveSheet.UsedRange.Rows.Count;
XLSRowMaxBase содержит последнюю строку на листе, которая содержит данные (увеличь значение на 1 - это и будет первая свободная строка)
XLSColumnMaxBase - соответственно, последняя занятая колонка на листе...

Если на листе много данных, то чтение данных с листа в цикле весьма длительная и муторная процедура, поэтому рекомендую использовать вариантную матрицу...
1
Sniper
 Аватар для dimafe6
96 / 64 / 4
Регистрация: 28.01.2010
Сообщений: 326
08.07.2010, 00:33  [ТС]
Спасибо. А есть какие-то предположения или советы по перемещению по таблице ексель?

Добавлено через 2 часа 54 минуты
Цитата Сообщение от Mad_Dog Посмотреть сообщение
Если на листе много данных, то чтение данных с листа в цикле весьма длительная и муторная процедура, поэтому рекомендую использовать вариантную матрицу...
Да, только-что я в етом удостоверился. Создал файл с 50000 строк, и попробывал прочитать...
Так програма минут 5 тупила...
Огромная просьба: как решить ету ситуацию?

Добавлено через 35 минут
У меня следующая проблема возникла:
Delphi
1
2
3
4
5
6
7
8
ExcelApplication1.Workbooks.Item[ExcelApplication1.Workbooks.Count].Activate;  //Здесь пишет ошибку:Not enough actual parameters
BaseBook:=ExcelApplication1.Workbooks.Item[ExcelApplication1.Workbooks.Count];
BaseBook.Sheets.Item[SheetNameBaseXLS].Select;  //Undeclared identifier: 'SheetNameBaseXLS'
ExcelApplication1.ActiveWorkbook.ActiveSheet.UsedRange.Select;// Undeclared identifier: 'UsedRange'
XLSColumnMaxBase:=BaseBook.ActiveSheet.UsedRange.Columns.Count; //Undeclared identifier: 'XLSColumnMaxBase'
XLSRowMaxBase:=BaseBook.ActiveSheet.UsedRange.Rows.Count;
RangeMatrixBase:=ExcelApp.Range['A1',
ExcelApp.Cells.Item[XLSRowMaxBase,XLSColumnMaxBase]].Value;
Что делать в таком случае, если можно поподробней, так как я самоучка и всех нюансов незнаю
0
КотЪ
 Аватар для Zabiyak
219 / 219 / 60
Регистрация: 26.05.2009
Сообщений: 688
08.07.2010, 10:59
Попробуй так:
Delphi
1
ExcelApplication1.Workbooks.Item[ExcelApplication1.Workbooks.Count].Activate(LOCALE_USER_DEFAULT);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.07.2010, 10:59
Помогаю со студенческими работами здесь

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

Запись и чтение информации
&quot;Создать программное обеспечение ввода-вывода информации пользователя&quot; Люди добрые, помогите с кодом. ничерта не понимаю в...

Запись, чтение ресурса
Помогите разобраться. В программе зашит файл ресурса &quot;*.txt&quot;, в этот файл должен считываться и записываться массив строк. Как считать...

Запись/Чтение из Файла
Есть такие типы: type s = ^spis; spis = record Num, Fam, wei, Point: string; {Таблица} next: s; ...

Запись и чтение реестра
Помогите, нужно сделать программу, которая при первом запуске просит ввести ключ активации, (ключи пропишу в коде) если ключ верный то...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru