Вниз
Скачать: CL | DM;

Как узнать - сколько строк в документе Excel?   Найти похожие ветки 

← →
СержК   (2007-10-15 11:23) [0]

Мастера подскажите.

Мне нужно проанализировать некоторый декумент Excel. Открываю его и хотел бы узнать - сколько в нем строк.

открываю документ следующим образом:

Com_fExcel.Com_Xl:=CreateOleObject("Excel.Application");
Com_fExcel.Com_Xl.Visible:=false;
Com_fExcel.Com_Xl.DisplayAlerts:=false;
Com_fExcel.Com_Book:=Com_fExcel.Com_Xl.WorkBooks.Open(Main_current_dirrectory+"\Temp.xls");
Com_fExcel.Com_Sheet:=Com_fExcel.Com_Xl.Workbooks[1].Worksheets[1];


← →
DrPass ©   (2007-10-15 11:54) [1]

Строк - как и в любом другом документе Excel, ровно 65535. Чтобы узнать, какая строка заполнена последней, насколько я знаю, нужно пробежаться по всем ячейкам и проверить значение. Менее тупого метода я не встречал.


← →
СержК   (2007-10-15 11:58) [2]

Да мне действительно мне нужен номер последней заполненной строки. Но простой перебор мне не подходит - слишком долго.


← →
dmdel ©   (2007-10-15 12:02) [3]

Попробуй нажать Ctrl+End и посмотреть как он в макросе прописывается
Ну и соответственно перенести этот код в Delphi


← →
umbra ©   (2007-10-15 12:27) [4]

свойство Worksheet.UsedRange возвращает диапазон, охватывающий все строки и столбцы, в которые занесены значения.


← →
СержК   (2007-10-15 13:03) [5]

А как мне используя свойство Worksheet.UsedRange узнать номер нужной строки?


← →
umbra ©   (2007-10-15 13:16) [6]

а какая строка нужная? Поскольку Worksheet.UsedRange это диапазон, то у него есть св-во Rows, а у того - свойство Count. Если лист заполняется не с первой строки, то номер первой использованной на листе строки можно узнать, например, так -
worksheets[1].rows[ActiveSheet.usedrange.row].row


← →
СержК   (2007-10-15 13:24) [7]

Нужна последняя использованная на листе строка


← →
umbra ©   (2007-10-15 13:30) [8]

LastUsedRowIndex := worksheets[1].rows[worksheets[1].usedrange.row].row + worksheets[1].usedrange.rows.Count;


← →
СержК   (2007-10-15 13:32) [9]

Огромное спасибо - кажется это то, что мне нужно!!!
Сейчас буду пробовать.


← →
Skyle ©   (2007-10-15 13:33) [10]

Sheet.SpecialCells(xlLastCell).EntireRow


← →
stone ©   (2007-10-15 14:12) [11]


> Skyle ©   (15.10.07 13:33) [10]


> umbra ©   (15.10.07 13:30) [8]

Есть один ньюанс. Ячейка может не содержать текста, но при этом не являться пустой.


← →
Skyle ©   (2007-10-15 14:21) [12]


> stone ©   (15.10.07 14:12) [11]
> Есть один ньюанс. Ячейка может не содержать текста, но при
> этом не являться пустой.

Ну если ожидаются такие файлы, то это не ньюанс. Если ожидается только текст, то тоже неплохо.

Есть другой ньюанс в моём варианте (есть ли он в [8] я не знаю). И в случае пустого листа, И в случае, когда занята только первая строка, возвращается 1.


← →
umbra ©   (2007-10-15 14:55) [13]

и у меня нюанс :) В [8] надо

LastUsedRowIndex := worksheets[1].rows[worksheets[1].usedrange.row].row + worksheets[1].usedrange.rows.Count - 1;



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.012 c
2-1192367636
WooW
2007-10-14 17:13
2007.11.04
RemoveDir


2-1191920306
andreil
2007-10-09 12:58
2007.11.04
Delphi не может использовать переменные из моих модулей?


2-1192164282
Kolan
2007-10-12 08:44
2007.11.04
Как сделать так, чтобы в Edit вводились только латинские символы?


2-1192106025
Ega23
2007-10-11 16:33
2007.11.04
Поясните про TTreeNode.StateIndex


15-1191477876
PPop
2007-10-04 10:04
2007.11.04
Проверить, с какой стороны лежит точка.




   Наверх