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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать, закончились ли строки в excel файле? 
:(
    Опции темы
sgentstuff
Дата 10.7.2006, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



как организовать цикл до конца строк? 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Albinos_x
Дата 10.7.2006, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


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

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





--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
sgentstuff
Дата 10.7.2006, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



там про word есть но про excel я не нашел 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Albinos_x
Дата 10.7.2006, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


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

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



плохо смотрел... smile

Добавлено @ 12:41 
там аж 2 варианта:
Цитата(Albinos_x @  21.2.2006,  16:22 Найти цитируемый пост)
 Точно также как и с WordApplication, решил я разобраться с компанентой ExcelApplication... Ну что ж приступим:

Немного теории
...


Цитата(Albinos_x @  21.2.2006,  16:46 Найти цитируемый пост)
...Количество строк и столбцов

Тут тоже существует несколько вариантов:

1.
код Pascal/Delphi    
...    
ExcelWorksheet1.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;    
// количество строк и столбцов    
Caption:='Строк: '+inttostr(ExcelApplication1.ActiveCell.Row)+' Столбцов: '+ inttostr(ExcelApplication1.ActiveCell.Column);    
...    

2. 
код Pascal/Delphi    
...    
// Количество столбцов    
caption:=inttostr(ExcelWorksheet1.UsedRange[0].Columns.Count );    
...    

Со строками по аналогии
...


Добавлено @ 12:42 
и пример ещё к тому же есть... 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Akella
Дата 11.7.2006, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Код

Var
 WorkSheet : _WorkSheet; //  определяем WorkSheet
 iLastRow:integer;
...

        WorkSheet.Cells.SpecialCells(xlCellTypeLastCell,EmptyParam).Activate;
        // Получаем значение последней строки
        iLastRow:=(ex1.ActiveCell.Row)-1;



поищи по форуму, я выкладывал примеры работы с Excel`ем 
PM MAIL   Вверх
sgentstuff
Дата 11.7.2006, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



мне нужно для нужной книги для нужного листа узнать кол-во строк
например вот так:

Код

max_rows:=Excel.WorkBooks[p+1].WorkSheets[1].UsedRange[1].Columns.Count;


но так не работает!
 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Albinos_x
Дата 11.7.2006, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


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

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



В чём это выражается? 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
sgentstuff
Дата 11.7.2006, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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




Я не испоьзую компоненту, а просто через ОЛЕ, как правильно записать получение количества строк?

Код

var
Excel:Variant;
max_rows:integer;
begin
max_rows:=Excel.WorkBooks[p+1].WorkSheets[1].UsedRange[1].Columns.Count;
end;

на эту запись он выдает такую ошибку:
EOleSysError with message 'Ivalid number of parameters' 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Albinos_x
Дата 12.7.2006, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


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

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



попробуй вот так:
Код

var    
Excel:Variant;    
max_rows:integer;    
begin    
max_rows:=Excel.WorkBooks[p+1].WorkSheets[1].UsedRange[0].Columns.Count;    
end;


Что за 
[p+1]



--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
sgentstuff
Дата 12.7.2006, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



с 
Код

UsedRange[0]

тоже самое
p+1  - это просто номер книги, в других местах с  p+1 все нормально, можешь у себя проверить как этот код работает, но только без компоненты ExcelAplication

 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Albinos_x
Дата 12.7.2006, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


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

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



попробуй так:
Код
...
WorkSheet:=Excel.WorkBooks[p+1].WorkSheets[1];
max_rows:=WorkSheet.Cells.CurrentRegion.Rows.Count;
...


если не прокатит,то делай стандартным способом:
Код
...
    WorkSheet:=Excel.WorkBooks[p+1].WorkSheets[1];
    WorkSheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;    
    max_rows := XLApp.ActiveCell.Row;
...


WorkSheet : OleVariant;

у последнего только один недостаток: если на странице стоит защита, то будет вылетать ошибка...

 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
sgentstuff
Дата 13.7.2006, 05:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ура, это сработало, но к сожалению работает только если строки идут подподряд и между ними нету пропуска
Код

WorkSheet:=Excel.WorkBooks[p+1].WorkSheets[1];    
max_rows:=WorkSheet.Cells.CurrentRegion.Rows.Count;


а если вот так
ф1 ф2 ф3 ф4 ф5 ф6
ф1 ф2 ф3 ф4 ф5 ф6
ф1 ф2 ф3 ф4 ф5 ф6

ф1 ф2 ф3 ф4 ф5 ф6
ф1 ф2 ф3 ф4 ф5 ф6

то ответ будет 3 строки а не 6(вкл и пустую), как подсчитать количество, если есть пропуски? 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
sgentstuff
Дата 13.7.2006, 06:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



у меня много Excel файлов, в каждом не менее 30000 строк, перед обработкой каждогго файла мне нужно узнать количество строк чтобы знать до куда запускать цикл, но попадаются и пустые строки, даже не знаю что делать, может это как-то по другому можно сделать? нужна помощь! 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Albinos_x
Дата 13.7.2006, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


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

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



сделай вторым способом... 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
sgentstuff
Дата 13.7.2006, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



вторым способом попробывал пишет

метод Activate из класса Range завершен не верно
в чем загвоздка? 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
sgentstuff
Дата 13.7.2006, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



у меня excel 2000 может из-за этого? 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Albinos_x
Дата 13.7.2006, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


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

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



нет не из-за этого... если посмотреть, то второй код применяется довольно давно и успешно... и если будешь искать примеры по инету, то почти везде найдёшь именно второй способ...

а ошибка возможно в строчках позже... 

на какой строчке ошибка вылезает? 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
sgentstuff
Дата 14.7.2006, 05:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ошибка именно на этой строке:
WorkSheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate; 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Albinos_x
Дата 14.7.2006, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


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

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



код в студию... 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
sgentstuff
Дата 14.7.2006, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



var
Код

i:integer;
begin
Excel := CreateOleObject('Excel.Application');
Excel.Workbooks.Open('D:\excel\hi');
Excel.Workbooks.Open('D:\excel\hi2');
Excel.Visible := true;

for i:=1 to 4 do
begin
WorkSheet:=Excel.WorkBooks[1].WorkSheets[1];
WorkSheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
{$O-}
 max_rows := Excel.ActiveCell.Row;
{$O+}
end;


эта ошибка вылетает если открыты две книги как ы этом примере, если же открыть только одну книгу то все нормально, считает как надо, у меня в программе открыто несколько книг, что делать?



 

Это сообщение отредактировал(а) Girder - 26.3.2007, 10:04
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
sgentstuff
Дата 14.7.2006, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ура получилось. просто нужно активировать книгу
Excel.WorkBooks[1].Activate;
тогда все работает нормально
Albinos_x - спасибо, выручил! 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Albinos_x
Дата 14.7.2006, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


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

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



честно говоря по твоему коду ничего не понятно....

к примеру:
Код
...
Excel := CreateOleObject('Excel.Application');
Excel.Workbooks.Open('D:\excel\hi');
Excel.Workbooks.Open('D:\excel\hi2');
Excel.Visible := true;
...

зачем открывать две книги... связь-то у тебя только со второй... ну да ладно... может код не весь...
Код
...
WorkSheet:=Excel.WorkBooks[1].WorkSheets[1];
...

зато здесь мы возвращаемся к первой книге... тогда зачем вторая (?)...

и далее не понятно зачем в цикле четыре раза вычеслять количество строк на одном и том же листе?... 


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Albinos_x
Дата 14.7.2006, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


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

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



отсюда кстати и ошибка вылезала...

работал со второй книгой...

а число строк на листе пытался получить из первой книги...  

Это сообщение отредактировал(а) Albinos_x - 14.7.2006, 14:06


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
sgentstuff
Дата 14.7.2006, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



отсюда кстати и ошибка вылезала...
работал со второй книгой...
а число строк на листе пытался получить из первой книги...  


ЭТО ТОЧНО, теперь все понятно! 
--------------------
Тот, кто ищет миллионы, весьма редко их находит, но тот, кто их не ищет, не находит никогда.  
PM ICQ   Вверх
Albinos_x
Дата 14.7.2006, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


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

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



Удачи! smile  


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
oleg153
Дата 2.3.2007, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Господа!
Подскажите пожалуйста, все что можно прочитать я перечитал и рад что у всех работает.
Но я потратил сутки но не смог добится номера последней заполненной строки на листе Excel.

Перепробовал все, но и в delphi7 и delphi 2006 (studio) одна и таже проблемма :
компилятор наотрез не понимает xlCellTypeLastCell.
И там и там ошибка Undeclired Identifire 'xlCellTypeLastCell'. И все. Процесс умирает.

Я не понимаю в чем дело, ЧТО я не так пишу ???
Вот мой код , в таком виде он не работает:

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    OpenDialog1: TOpenDialog;
    Button3: TButton;
    Memo1: TMemo;
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
uses
 ComObj;
var
 Excel,Workbook : Variant;
 WorkSheet: OleVariant;

{$R *.dfm}

{Активация сервера}
procedure TForm1.Button1Click(Sender: TObject);
var BookName1: string;
var j: integer;
begin
 // Выбираем файл базы.
 if OpenDialog1.Execute then
  begin
   BookName1:= OpenDialog1.FileName; // имя книги с полным путем
   //Запускаем Excel
   try
    //Ищем запущеный экземпляр Excel, если он не найден, вызывается исключение
    Excel := GetActiveOleObject('Excel.Application');
    //Проверяем что открыта нужная книга
    for j:=1 to Excel.Workbooks.Count do
     begin
      if Excel.Workbooks.Item[j].FullName=BookName1 then break;
     end;
    // Выбираем WorkBook
    WorkBook := Excel.WorkBooks.Item[j];
   except
    //Запускаем Excel
    Excel := CreateOleObject('Excel.Application');
    //Открываем нужную книгу
    WorkBook := Excel.WorkBooks.Open(BookName1);
   end;
  Excel.Visible:=True;
  end
  else
   begin
    SysUtils.Beep;
    ShowMessage('Не могу открыть Excel!');
    Exit;
   end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 if not VarIsEmpty(Excel) then
  begin
   Excel.Quit;
   Excel := Unassigned;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var X,Y:integer;
begin
  WorkSheet:=WorkBook.WorkSheets[1];
  WorkSheet.Activate;
  WorkSheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
  X := Excel.ActiveCell.Row;
  Y := Excel.ActiveCell.Column;
  Memo1.Lines.Add('Строк: '+ inttostr(x));
  Memo1.Lines.Add('Столбцов : '+inttostr(y));
end;

end.



Случайно наткнулся по яндексу на пример где отдельно обьявлялся этот параметр
таким образом
Код

implementation
uses
 ComObj;
var
 Excel,Workbook : Variant;
 WorkSheet: OleVariant;

const 
  xlCellTypeLastCell = $0000000B;  // ВОТ ТАКИМ ОБРАЗОМ.

{$R *.dfm}


{Активация сервера}
procedure TForm1.Button1Click(Sender: TObject); ..................


Тогда ошибка пропала и все заработало.
Получается что если не используем компоненту ExcelApp то это нужно ОБЯЗАТЕЛЬНО делать ?
тогда почему об этом никто не упоминает ???
PM MAIL   Вверх
Albinos_x
Дата 2.3.2007, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


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

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



1. Следовало бы создать отдельную тему.
2. константа - xlCellTypeLastCell объявлена в модуле OfficeXP (/2000/97)
3. Объявлять константу не обязательно, можно и напрямую писать:
Код
...
WorkSheet.Cells.SpecialCells($B, EmptyParam).Activate; // или WorkSheet.Cells.SpecialCells(11, EmptyParam).Activate;
...

4. Excel у всех под рукой (или почти у всех, но у них и такие приложения работать не будут...), в справке по VB можно посмотреть значение любой из этих констант...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
RosemaN
Дата 7.11.2007, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Albinos_x @ 2.3.2007,  23:43)
1. Следовало бы создать отдельную тему.
2. константа - xlCellTypeLastCell объявлена в модуле OfficeXP (/2000/97)
3. Объявлять константу не обязательно, можно и напрямую писать:
Код
...
WorkSheet.Cells.SpecialCells($B, EmptyParam).Activate; // или WorkSheet.Cells.SpecialCells(11, EmptyParam).Activate;
...

4. Excel у всех под рукой (или почти у всех, но у них и такие приложения работать не будут...), в справке по VB можно посмотреть значение любой из этих констант...

1. в таком варианте пишет "could not convert variant of type OleStr into type Double".
Код

 Excel.WorkBooks[1].Activate; // активация рабочей книги 1
  WorkSheet:=Excel.WorkBooks[1].WorkSheets[1]; //активация листа 1 рабочей книги 1
  WorkSheet.Cells.SpecialCells(11, EmptyParam).Activate; // эту строчку я не совсем понял. Что она активирует?
  max_rows := Excel.ActiveCell.Row; // записывает в переменную номер ячейки (последней непустой?) 

2. думал что переменная max_rows должна быть типа int, ошибка, описанная выше...  smile 
3. где можно взять справочник по этим всем функциям и свойствам?
PM MAIL   Вверх
Albinos_x
Дата 7.11.2007, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


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

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



код в студию


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
kuzduk
Дата 10.4.2020, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

XL := CreateOleObject('Excel.Application');
XL.Workbooks.Open(ExcelFilePath);

//Первый вариант:
UsedRowCount := iSheet.UsedRange.Rows.Count;  //Если у тебя заняты первые десять строк то вернёт 10. Однако если идут первые две строки пустые, а потом 10 занятых, то один хрен вернёт 10, ибо возвращает количество занятых строк.
UsedColCount := iSheet.UsedRange.Columns.Count;
FirstUsedRow := iSheet.UsedRange.Row; //Номер первой строки в которой прописана ячейка
FirstUsedCol := iSheet.UsedRange.Column; //Номер первой колонки в которой прописана ячейка
LastUsedRow  := FirstUsedRow + UsedRowCount - 1;
LastUsedCol  := FirstUsedCol + UsedColCount - 1;
     

//Второй вариант: через активацию последней непустой ячейки
//const xlCellTypeLastCell = $0000000B;
iSheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate; //Если лист пуст(ни одна ячейка не прописана), то строка вызывает ошибку
LastUsedRow := XL.ActiveCell.Row;
LastUsedCol := XL.ActiveCell.Column;

PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.2792 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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