Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.06.11;
Скачать: [xml.tar.bz2];

Вниз

Реальное кол-во строк и столбцов в файле Excel   Найти похожие ветки 

 
kyn66 ©   (2006-05-06 12:10) [0]

Уважаемые мастера, чтобы определить САБЖ, и делаю так:

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;


Все вроде нормально, но я обнаружил, что кол-во строк может определиться неверно, если снизу есть пустые (может когда-то заполнявшиеся). А мне нужно знать именно реально заполненные. Может чего нужно дополнить в коде?


 
Shirson ©   (2006-05-06 12:22) [1]

Можно пробежаться в цикле до первой пустой строки.
Есть подозрение, что UsedRange.Rows.Count выдаёт, с чистой совестью, пустые строки, которые форматировались или у которых стоят borders.


 
kyn66 ©   (2006-05-06 12:31) [2]

А по чем пробегаться-то? В некоторых столюцах значения могут отсутствовать. Хотя в первом - всегда будет значение... И что из себя будет представлять такая пробежка? К чему привязывать цикл?


 
Shirson ©   (2006-05-06 12:46) [3]

While MyExcel.activeworkbook.activeSheet.cells[y,1]<>"" do
y:=y+1;


 
_RusLAN ©   (2006-05-06 12:55) [4]

kyn66 ©   (06.05.06 12:31) [2]
А по чем пробегаться-то? В некоторых столюцах значения могут отсутствовать. Хотя в первом - всегда будет значение... И что из себя будет представлять такая пробежка? К чему привязывать цикл?


может так?

цикл начиная с Rows := MyExcel.ActiveSheet.UsedRange.Rows.Count до 1
При нахождении первой непустой строки (там где в первом столбце есть значение) выходите из цикла. Количество пройденых строк отнимаете от MyExcel.ActiveSheet.UsedRange.Rows.Count


 
Jeer ©   (2006-05-06 13:35) [5]

Когда-то такая задачка у меня возникла - решение было, возможно, не самым лучшим и верным, но оно работало.

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


 
kyn66 ©   (2006-05-06 13:54) [6]

Т.е. где-то нужно предварительно сохранять непустые?


 
Jeer ©   (2006-05-06 14:16) [7]

что значит сохранять ?

открываешь файл, по листу идешь по строкам и ищешь первые пустые n строк (ячеек по обязательной колонке)


 
balepa ©   (2006-05-06 14:38) [8]

Заведи себе №п/п


 
evvcom ©   (2006-05-06 14:39) [9]

То, что ты получил, и есть реальное количество строк и столбцов. Даже если они пустые, они хранятся в файле! Если ты считаешь, что они не содержат полезной информации, открой документ, выдели строки (столбцы), но не ячейки! и удали их (опять же не кнопкой Del, а командой "Удалить строки/столбцы"); сохрани документ. Тогда и файл будет поменьше и получишь то, что желаешь, и на тормоза из-за никчемной проверки не нарвешься.


 
kyn66 ©   (2006-05-06 15:21) [10]

>> evvcom
Хм ... это я и делал с одним файлом. А если их более 250, что по каждому проходить? Вот и делаю своеобразную автоматизацию. По правде говоря, все это подготавливается для перегона в DBF.


 
Jeer ©   (2006-05-06 15:28) [11]

kyn66 ©   (06.05.06 15:21) [10]

WSH, JScript - пишешь скрипт, открываешь как xls записываешь как dbf


 
kyn66 ©   (2006-05-06 15:54) [12]

А как мне в этом цикле обратиться к ячейке с проверкой, если она имеет формат "Общий", т.е. туда можно записать как число так и текст. Делая так - if ExcelApp.Cells[i, 0].Value <> "" then - вылетает ошибка 8-(


 
Jeer ©   (2006-05-06 16:18) [13]

OLEVariant nil



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

Форум: "Основная";
Текущий архив: 2006.06.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.012 c
1-1146734024
DelphiLexx
2006-05-04 13:13
2006.06.11
Проблема с TSpeedButton ом


15-1147971720
срочно
2006-05-18 21:02
2006.06.11
Базы данных


15-1147715052
Некто_
2006-05-15 21:44
2006.06.11
Нифига себе цена! =)


2-1148235400
Тимофеич
2006-05-21 22:16
2006.06.11
terminate


6-1139248031
justy
2006-02-06 20:47
2006.06.11
передать голос по сети





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский