Главная страница
    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-1146844311
Teddy24
2006-05-05 19:51
2006.06.11
Подключение к сетевому ресурсу БД из Delphi


2-1148676758
ZV
2006-05-27 00:52
2006.06.11
SpinEdit


15-1147769851
Ytrnj
2006-05-16 12:57
2006.06.11
Оракл бесплатный только для разработчиков


2-1148658284
cardexc
2006-05-26 19:44
2006.06.11
bpl файл компонента


15-1147763288
Kolan
2006-05-16 11:08
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский