Главная страница
    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.013 c
2-1148639361
Туч
2006-05-26 14:29
2006.06.11
какой выбрать драйвер/сервер для базы данных


15-1147822853
Imbac
2006-05-17 03:40
2006.06.11
Сеть


15-1147965330
Cerberus
2006-05-18 19:15
2006.06.11
Компанент для работы с xls файлами.


15-1147774944
ilya39
2006-05-16 14:22
2006.06.11
R:Base


2-1148557809
tvv
2006-05-25 15:50
2006.06.11
Работа с DLL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский