Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема при чтении Excel 
:(
    Опции темы
Jonnik
Дата 21.3.2011, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 9.2.2006

Репутация: нет
Всего: нет



Здравствуйте.
Вот мой исходник чтения с Excel
Код

 Excel:=CreateOleObject('Excel.Application');
      Excel.Visible:=false;
      Excel.WorkBooks.Open(Form1.OpenDialog1.FileName);
      sleep(500);
      k:=1;
      n:=1;
      ListBox1.Clear;
      while k<5 do
        begin
          s:=Excel.Cells[1,n];
          if s<>'' then
            begin
              ListBox1.Items.Add(s);
              sstolb[n]:=s;
              Inc(n);
            end
          else
            begin
              inc(k);
              Inc(n);
            end;
        end;
      Excel.Quit;

Все работает нормально, но есть один недостаток.
Если во время чтения из экселя я открою другой файл экселя в ручную, то программа начинает читать данный уже с открытого мною файла. Т.е. программа сама переключается между файлами эксель. 
Как я понимаю это все происходит из-за того, что чтение происходит из активного листа в данный момент времени. И когда я открываю другой файл, то естественно меняется текущий активный лист. Поэтому и программа начинает читать данные из другого файла.
Как решить эту проблему?

Это сообщение отредактировал(а) Jonnik - 21.3.2011, 12:57
PM MAIL   Вверх
Данкинг
Дата 21.3.2011, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 5
Всего: 130



Цитата(Jonnik @  21.3.2011,  12:05 Найти цитируемый пост)
Если во время чтения из экселя я открою другой файл экселя в ручную, 

Нельзя при создании Excel-объекта открывать параллельно Excel.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
cat512
Дата 22.3.2011, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 3
Всего: 15



Цитата(Данкинг @ 21.3.2011,  18:18)
Цитата(Jonnik @  21.3.2011,  12:05 Найти цитируемый пост)
Если во время чтения из экселя я открою другой файл экселя в ручную, 

Нельзя при создании Excel-объекта открывать параллельно Excel.

Данкинг,  а собсно кто запрещает?
PM MAIL   Вверх
Данкинг
Дата 22.3.2011, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 5
Всего: 130



Цитата(cat512 @  22.3.2011,  00:54 Найти цитируемый пост)
а собсно кто запрещает? 

Запрещает вероятность глюков, которые мы видим и в данном примере.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Jonnik
Дата 22.3.2011, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 9.2.2006

Репутация: нет
Всего: нет



Понятно. Значит вариантов нет. А жаль.
PM MAIL   Вверх
Fanatik
Дата 24.3.2011, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 28.8.2010

Репутация: нет
Всего: нет



Попробовать так

Код

var
    XLApp, wb, Sheet : OleVariant;

      Excel:=CreateOleObject('Excel.Application');
      Excel.Visible:=false;
      wb := Excel.WorkBooks.Open(Form1.OpenDialog1.FileName);
      Sheet := wb.WorkSheets[1];
      Sheet.Activate; --не обязательно
      sleep(500);
      k:=1;
      n:=1;
      ListBox1.Clear;
      while k<5 do
        begin
          s:=Sheet.Cells[1,n];
          if s<>'' then
            begin
              ListBox1.Items.Add(s);
              sstolb[n]:=s;
              Inc(n);
            end
          else
            begin
              inc(k);
              Inc(n);
            end;
        end;
      Excel.Quit;
excel := unassigned;


PM MAIL   Вверх
Albinos_x
Дата 7.5.2011, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



Я писал об этом в своей статье.
Старайтесь избегать обращений через объекты excel (типа обращений к активной книге или листу, это касается и ворда), старайтесь сразу создавать объект который привязывать к книге или если работаете только с листом, то к листу.
И работать уже через этот объект.



--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0660 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.