Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Технологии
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.11.2012, 22:28
одинадцатый одинадцатый вне форума
Новичок
 
Регистрация: 16.04.2009
Сообщения: 95
Репутация: 10
По умолчанию Несколько вопросов про Excel

Здравствуйте.
Надо: найти конкретный комментарий в открытой книге. Я думал это осуществить простым перебором ячеек используемого диапазона, но что то не пошло...
Пробовал вот так:
Код:
  
    exApp:=GetActiveOleObject('excel.application');
    ExBook := exApp.WorkBooks.Open(FileName:=StrFileName);
    ExSheet := ExBook.ActiveSheet;
    ExURng := ExSheet.UsedRange;
    R := ExURng;
    R := ExSheet.Range['A1', EmptyParam].SpecialCells(xlCellTypeLastCell, EmptyParam);
endRow:=r.row;
endCol:=r.col;
но так конечно not supported by automation object...

Есть вариант через
Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
а потом уже
x := XLApp.ActiveCell.Row;
y := XLApp.ActiveCell.Column;
но мне не нравится идея активации какой-то ячейки.

Вопрос №2:
Как определить выделенную область в Excel в OleContainer, а главное адреса первой и последней ячейки этой области? В формате A1

Вопрос№3:
При открытии файла так:
OleContainer1.CreateObjectFromFile(ExtractFilePath (Application.ExeName)+'ППР_6.xlt', false);
Основное меню Excel становится неактивным. Ладно там Создать, Открыть, но кнопка Сохранить тоже не работает(
Как быть?

Помогите пожалуйста хоть с чем-нибудь.
Ответить с цитированием
  #2  
Старый 17.11.2012, 22:41
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,238
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Кусок рабочего кода из одного проекта:
Код:
procedure TfMain.ImportExcel(filename: string);
var
  xla: OleVariant;
  x, y: integer;
  comm: string;
  // ...
begin
  try
    xla := CreateOleObject('Excel.Application');
    xla.Visible := false;
    xla.Workbooks.Open(filename);

    if xla.Cells.CurrentRegion.Columns.Count = 10 then begin
      for y:=1 to xla.Cells.CurrentRegion.Rows.Count do begin
        // ...
        comm := 'NULL';
        for x:=1 to 10 do
          if not VarIsClear(xla.Cells.Item[y, x].Comment) then
            comm := dbstring(xla.Cells.Item[y, x].Comment.Text);
        // ...
      end;
    end else begin
      MessageDlg('Неопознанный формат таблицы',mtError,[mbOk],0);
    end;
    xla.ActiveWorkbook.Close(false);
    xla.Quit;
    MessageDlg('Импорт успешно завершён',mtInformation,[mbOk],0);
  except
    on E: Exception do
      MessageDlg('Импорт из Microsoft Excel невозможен на вашем компьютере'#10#13+e.Message,mtError,[mbOk],0);
  end;
end;
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj

Последний раз редактировалось PhoeniX, 18.11.2012 в 16:51.
Ответить с цитированием
  #3  
Старый 17.11.2012, 23:18
одинадцатый одинадцатый вне форума
Новичок
 
Регистрация: 16.04.2009
Сообщения: 95
Репутация: 10
По умолчанию

А что если используемый диапазон начинается не с 1 ячейки? а с, к примеру, B23?
Ответить с цитированием
  #4  
Старый 17.11.2012, 23:47
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от одинадцатый
А что если используемый диапазон начинается не с 1 ячейки? а с, к примеру, B23?
Используемую область узнавай через UsedRange.
Ответить с цитированием
  #5  
Старый 18.11.2012, 00:30
одинадцатый одинадцатый вне форума
Новичок
 
Регистрация: 16.04.2009
Сообщения: 95
Репутация: 10
По умолчанию

А вы читали мой первый пост вообще? )))
Ответить с цитированием
  #6  
Старый 18.11.2012, 00:34
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от одинадцатый
А вы читали мой первый пост вообще? )))
Читал. Оттуда я и скопировал слово UsedRange
А в чём подвох? Я в работе использовал UsedRange и проблем с ним не замечал.
Ответить с цитированием
  #7  
Старый 18.11.2012, 16:27
одинадцатый одинадцатый вне форума
Новичок
 
Регистрация: 16.04.2009
Сообщения: 95
Репутация: 10
По умолчанию

Вот я и спрашиваю как именно мне узнать адреса начала и конца используемого диапазона?)
Ответить с цитированием
  #8  
Старый 18.11.2012, 22:33
одинадцатый одинадцатый вне форума
Новичок
 
Регистрация: 16.04.2009
Сообщения: 95
Репутация: 10
По умолчанию

Ладно, с поиском я вроде разобрался. Подскажите пожалуйста как быть с главным меню икселя?
Как вообще можно сохранить файл икселя?
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:46.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2019

ВКонтакте   Facebook   Twitter