![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Реальное кол-во строк и столбцов в файле Excel [D7, WinXP]
kyn66 © (2006-05-06 12:10:00)Уважаемые мастера, чтобы определить САБЖ, и делаю так:
procedure TForm1.Button1Click(Sender: TObject);
var
MyExcel: Variant;
Rows, Columns: Integer;
begin
MyExcel := CreateOleObject('Excel.Application');
MyExcel.WorkBooks.Open('c:\txt\Info.xls ');
Rows := MyExcel.ActiveSheet.UsedRange.Rows.Count;
Columns := MyExcel.ActiveSheet.UsedRange.Columns.Count;
ShowMessage('Строк -' + IntToStr(Rows) + #10#13 +
'Столбцов - ' + IntToStr(Columns));
MyExcel.Quit;
end;
Все вроде нормально, но я обнаружил, что кол-во строк может определиться неверно, если снизу есть пустые (может когда-то заполнявшиеся). А мне нужно знать именно реально заполненные. Может чего нужно дополнить в коде?
Jeer (2006-05-06 16:18:00) [1]OLEVariant nil
kyn66 (2006-05-06 15:54:00) [2]А как мне в этом цикле обратиться к ячейке с проверкой, если она имеет формат "Общий", т.е. туда можно записать как число так и текст. Делая так - if ExcelApp.Cells[i, 0].Value <> '' then- вылетает ошибка 8-(
Jeer (2006-05-06 15:28:00) [3]kyn66 © (06.05.06 15:21) [10]
WSH, JScript - пишешь скрипт, открываешь как xls записываешь как dbf
kyn66 (2006-05-06 15:21:00) [4]>> evvcom
Хм ... это я и делал с одним файлом. А если их более 250, что по каждому проходить? Вот и делаю своеобразную автоматизацию. По правде говоря, все это подготавливается для перегона в DBF.
evvcom (2006-05-06 14:39:00) [5]То, что ты получил, и есть реальное количество строк и столбцов. Даже если они пустые, они хранятся в файле! Если ты считаешь, что они не содержат полезной информации, открой документ, выдели строки (столбцы), но не ячейки! и удали их (опять же не кнопкой Del, а командой "Удалить строки/столбцы"); сохрани документ. Тогда и файл будет поменьше и получишь то, что желаешь, и на тормоза из-за никчемной проверки не нарвешься.
balepa (2006-05-06 14:38:00) [6]Заведи себе №п/п
Jeer (2006-05-06 14:16:00) [7]что значит сохранять ?
открываешь файл, по листу идешь по строкам и ищешь первые пустые n строк (ячеек по обязательной колонке)
kyn66 (2006-05-06 13:54:00) [8]Т.е. где-то нужно предварительно сохранять непустые?
Jeer (2006-05-06 13:35:00) [9]Когда-то такая задачка у меня возникла - решение было, возможно, не самым лучшим и верным, но оно работало.
Первые n пустых строк по обязательной колонке считаются концом актуального диапазона.
_RusLAN (2006-05-06 12:55:00) [10]kyn66 © (06.05.06 12:31) [2]
А по чем пробегаться-то? В некоторых столюцах значения могут отсутствовать. Хотя в первом - всегда будет значение... И что из себя будет представлять такая пробежка? К чему привязывать цикл?
может так?
цикл начиная с Rows := MyExcel.ActiveSheet.UsedRange.Rows.Count до 1
При нахождении первой непустой строки (там где в первом столбце есть значение) выходите из цикла. Количество пройденых строк отнимаете от MyExcel.ActiveSheet.UsedRange.Rows.Count
Shirson (2006-05-06 12:46:00) [11]While MyExcel.activeworkbook.activeSheet.cells[y,1]<>'' do
y:=y+1;
kyn66 (2006-05-06 12:31:00) [12]А по чем пробегаться-то? В некоторых столюцах значения могут отсутствовать. Хотя в первом - всегда будет значение... И что из себя будет представлять такая пробежка? К чему привязывать цикл?
Shirson (2006-05-06 12:22:00) [13]Можно пробежаться в цикле до первой пустой строки.
Есть подозрение, что UsedRange.Rows.Count выдаёт, с чистой совестью, пустые строки, которые форматировались или у которых стоят borders.