Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2010, 17:21   #1
lastalert
Пользователь
 
Аватар для lastalert
 
Регистрация: 22.02.2010
Сообщений: 19
По умолчанию Excel + Delphi 7

Всем привет.
Совсем недавно начал разбираться с редактированием информации в таблице экселя с помощью прог сделанных в делфи... В общем, пишу программу, которая открывает уже существующую на диске экселевскую книгу и производит обмен данными (прога <=> эксель). В данный момент редактирование производится по одной ячейке, т.е. в эдите указываю адрес, а в мемо - значение. Столкнулся с такой проблемой: когда повторно открываю книгу, то выкидывает ошибку
Access violation at address 0045A54E in module 'Excelfi.exe'. Read of address 00000000.
Открываю так:
Код:
if openDialog1.Execute
    then
      begin
        path := OpenDialog1.FileName;
        Excel := CreateOleObject('Excel.Application');
        Excel.Workbooks.Open[path];
        openDialog1.Free;
      end
     else
        ShowMessage('Вы не выбрали документ для редактирования.');
Так же необходимо сделать подсчет суммы в столбце таблицы и поиск по определенному критерию. Как это сделать я пока не знаю :-(
Если кто-нибудь делал подобную программу или знает, как это организовать, напишите ответ пожалуйста.
Заранее благодарен.
С ув. lastalert
...think about your actions.
lastalert вне форума Ответить с цитированием
Старый 22.02.2010, 20:35   #2
DarkEvil
Форумчанин
 
Аватар для DarkEvil
 
Регистрация: 08.05.2009
Сообщений: 247
По умолчанию

а Вы уничтожаете указатели на созданый екземпляр Excel после закрытия книги? )
Мой сайт
Цитата:
Сообщение от Scream In Darkness
Кровь не даёт покоя! Кровь не знает сна!
Кровь бежит на волю – Вены рвёт сама!
DarkEvil вне форума Ответить с цитированием
Старый 22.02.2010, 21:06   #3
Necro
Пользователь
 
Аватар для Necro
 
Регистрация: 27.02.2007
Сообщений: 22
По умолчанию

почитай тут
Necro вне форума Ответить с цитированием
Старый 22.02.2010, 21:08   #4
lastalert
Пользователь
 
Аватар для lastalert
 
Регистрация: 22.02.2010
Сообщений: 19
По умолчанию

DarkEvil, книжку закрываю так:
Excel.ActiveWorkbook.Close;
Excel.Application.Quit;
Мне говорили что-то по поводу Excel.Free или Excel.Destroy, но оно не сработало. Я не знаю синтаксис этой команды.

Necro, спасибо за ссылку, действительно полезная инфо.
...think about your actions.

Последний раз редактировалось Stilet; 02.03.2010 в 08:05.
lastalert вне форума Ответить с цитированием
Старый 23.02.2010, 00:17   #5
DarkEvil
Форумчанин
 
Аватар для DarkEvil
 
Регистрация: 08.05.2009
Сообщений: 247
По умолчанию

собственно посмотрите вложения, как бы здесь все работает с вашими строчками ))))
может проблема заложена где-то в ином участке кода )
Вложения
Тип файла: rar test_excel.rar (187.3 Кб, 71 просмотров)
Мой сайт
Цитата:
Сообщение от Scream In Darkness
Кровь не даёт покоя! Кровь не знает сна!
Кровь бежит на волю – Вены рвёт сама!
DarkEvil вне форума Ответить с цитированием
Старый 27.02.2010, 22:11   #6
lastalert
Пользователь
 
Аватар для lastalert
 
Регистрация: 22.02.2010
Сообщений: 19
По умолчанию

не могу придумать алгоритм поиска по экселевской таблице. Т.е. в один Edit пишем что нужно найти, а в другом Edit"е - выдать результат поиска или сообщение о том, нет того что ищем. Думаю что нужно как-то считать все в массив, а потом искать по очереди... Других оригинальных идей пока нету.
Поделитесь пожалуйста идеями

Исправил ошибку с повторным открытием эксель документа...
Проблема была в этой строке: openDialog1.Free;
----------------------------------
Поиск пытался сделать так:
Код:
procedure TForm1.Button7Click(Sender: TObject);
var i, j   : integer;
    search : array[1..100, 1..100] of string;
    srch   : string;
begin
  srch := Edit4.Text;    // то, что нужно найти
  for i := 1 to Excel.ActiveCell.Row do
    for j := 1 to Excel.ActiveCell.Column do
      begin
        search[i, j] := Excel.Range[i, j];  // в массив все значения ячеек экселя
        if search[i, j] = srch              // поиск в массиве
          then
            Edit5.Text := 'Адрес: ' + IntToStr(i) + IntToStr(j)
          else
            Edit5.Text := 'Не найдено';
      end;
end;
Выкинуло "OLE Error"

Что не так в коде? Помогите... Уже не знаю как иначе переписать исходник.
...think about your actions.

Последний раз редактировалось Stilet; 02.03.2010 в 08:05.
lastalert вне форума Ответить с цитированием
Старый 19.03.2010, 10:26   #7
lastalert
Пользователь
 
Аватар для lastalert
 
Регистрация: 22.02.2010
Сообщений: 19
По умолчанию

И снова всем привет. Опять поднимаю тему с поиском по таблице...
Осталось сделать смену столбцов при поиске.
Код:
for j := 1 to Excel.ActiveCell.Row do
   begin
         if Excel.Range['A' + IntToStr(j), EmptyParam].Value2 = srchval
            then
              begin
                Flag := TRUE;
                Break;
              end
            else
              // здесь как-то сменить столбец. Т.е. в Excel.Range['B'  => 'C' =>...
   end;
Надеюсь получить в ответ оригинальный алгоритм смены столбцов. (Сейчас же в мыслях символьный массив от А..Z, элементы которого менять в цикле).
...think about your actions.
lastalert вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как при импорте из Excel в delphi узнать сколько заполненных строк в книге Excel?чтобы организовать цикл betirsolt БД в Delphi 1 17.01.2010 18:51
Delphi -- Excel koma Общие вопросы Delphi 4 24.09.2009 14:33
Delphi и Excel Tanya2008 Общие вопросы Delphi 3 08.05.2009 12:56
Delphi ->Excel->График по таблице->Delphi Avalonix БД в Delphi 2 30.10.2008 14:04
Delphi+Excel Suall БД в Delphi 0 30.04.2007 07:37