Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2012, 17:31   #1
Delphi_developer
Пользователь
 
Регистрация: 19.09.2012
Сообщений: 21
По умолчанию Конвертация Excel в txt

Коллеги, подскажите! Есть файл Excel. Нужно выбрать из него часть сведений и перенести в конечный текстовый файл. Алгоритм следующий:
1. с 13-й строки начать перебор строк в файле. Прочитать 12 строк, т.е. строки с 13-й по 25-ю.
2. после пропустить 41 строку, т.е. до 66-й строки
3.снова прочитать 12 строк, пропустить 41 строку и т.д. до конца файла.

Мой код

Код:
var
Excel:Variant;
 j, k: integer;
s:string;
const xlCellTypeLast=$000000B;
begin
Excel:=CreateoleObject('Excel.Application');
Open1.Filter:=' Файлы MS Excel|*.xls;*.xlsx|';
if Open1.Execute then
try
Excel.Workbooks.Open(Open1.FileName, false);
j:=excel.ActiveCell.SpecialCells(xlCellTypeLast).Row;// последняя не пустая строка в документе
k :=13;
  while k<>j do
  begin
s:=excel.cells[k,11].value;
Memo1.Lines.Add(s);
  k :=k+1;
 end;
 except;
 end;
  Excel.Workbooks.Close;
  excel.quit;
 excel :=unassigned;
 // курсор на начало в Memo
 Memo1.SelStart:=0;
 Memo1.SelLength := 0;

end;
Не достиг нужного результата. Пробовал по-разному.
Мой конечный файл прилагаю.
Мне информация именно по человеку нужна, а документацию исключить. Именно эти строки и надо пропускать. Знаю, что цикл надо корректировать.. Подскажите конечный вариант.
Пример:

Зухайраев
Увайс
Хасейнович
М
"01" июля 2012 года
"01" июля 2012 года
---
АРГУН

ЧЕЧЕНСКАЯ РЕСПУБЛИКА

113
03 июля 2012 года

Последний раз редактировалось Delphi_developer; 19.09.2012 в 23:13.
Delphi_developer вне форума Ответить с цитированием
Старый 19.09.2012, 22:06   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
while k<>j do begin
  For i:=1 to 12 do begin
    s:=excel.cells[k+i,11].value;
    Memo1.Lines.Add(s);
  end;
  k :=k+53; //k:=k+12(с данными)+41(пропустить)
end;
Вот как-то так, наверное? Только переменную i не забудьте объявить

P.S. Если Вы тут текстовый файлик выложили с реальными данными, то почитайте о законе 152-ФЗ - за такое нынче хорошо штрафуют
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 19.09.2012, 23:05   #3
Delphi_developer
Пользователь
 
Регистрация: 19.09.2012
Сообщений: 21
По умолчанию

Спасибо. Попробую Ваш вариант. На счет ФЗ Вы правы. Файл изменен. Я выложил его только для примера!
Delphi_developer вне форума Ответить с цитированием
Старый 20.09.2012, 09:54   #4
Delphi_developer
Пользователь
 
Регистрация: 19.09.2012
Сообщений: 21
По умолчанию Конвертация Excel в txt

Не проходит

Последний раз редактировалось Delphi_developer; 20.09.2012 в 11:01.
Delphi_developer вне форума Ответить с цитированием
Старый 20.09.2012, 10:57   #5
Delphi_developer
Пользователь
 
Регистрация: 19.09.2012
Сообщений: 21
По умолчанию

Разобрался. Просто голова не соображала вчера уже. Sciv, спасибо еще раз.
Delphi_developer вне форума Ответить с цитированием
Старый 20.09.2012, 11:28   #6
Delphi_developer
Пользователь
 
Регистрация: 19.09.2012
Сообщений: 21
По умолчанию

Возник иной вопрос. Если в Memo строки идут так

Иванов
Иван
Иванович

Петров
Петр
Петрович

........
...... и т.д.,
то мне нужно вывести в одну строку, т.е

Иванов Иван Иванович,
Петров Петр Петрович,
..................
..................

Вывести все строки в одну можно так:

Код:
s2 := StringReplace(Memo1.Lines.Text, #10#13, ' ', [rfReplaceAll]);
   Memo1.Lines.Text :=s2;
, а мне нужно вывести отдельно ФИО каждого
Delphi_developer вне форума Ответить с цитированием
Старый 20.09.2012, 11:58   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так?
Код:
k:=0;
for i:=0 to Memo1.Lines.Count div 3 do begin
  sFio := Memo.Lines[k] +' ' +  Memo.Lines[k+1] + Memo.Lines[k+2];
  // для отладки покажем sFIO
  ShowMessage('ФИО = '+sFio);
  inc(k,3);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.09.2012, 12:55   #8
Delphi_developer
Пользователь
 
Регистрация: 19.09.2012
Сообщений: 21
По умолчанию

Не совсем. Если использовать мой вариант, то получается в результате

Иванов Иван Иванович Петров Петр Петрович....

Мне нужно чтобы ФИО следующего человека начиналось с новой строки:

Иванов Иван Иванович
Петров Петр Петрович
..................

У Вас он отбирает ФИО в отдельности. Думаю строка смутила
Цитата:
мне нужно вывести отдельно ФИО каждого
Поправлюсь: вывод ФИО следующего человека на новой строке, но чтобы ФИО было прописано в строку, а не в столбик

P.S. Извините за простой вопрос
Delphi_developer вне форума Ответить с цитированием
Старый 20.09.2012, 13:11   #9
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

А вот это не забыли?

Код:
 k:=0;
for i:=0 to Memo1.Lines.Count div 3 do begin
  sFio := Memo.Lines[k] +' ' +  Memo.Lines[k+1] + Memo.Lines[k+2];
Memo.Lines[i]:=sFio;
  inc(k,3);
end;
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 20.09.2012, 14:24   #10
Delphi_developer
Пользователь
 
Регистрация: 19.09.2012
Сообщений: 21
По умолчанию

Не забыл. Вторая запись повторяется При таком содержимом Memo

Иванов
Иван
Иванович

Петров
Петр
Петрович

Получается

Иванов ИванИванович
ПетровПетр
Петрович

Петров
Петр
Петрович

Нужно

Иванов Иван Иванович
Петров Петр Петрович
................................... .
...................................
...................................
Delphi_developer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт из Excel в txt KARUSHEV Microsoft Office Excel 6 20.06.2011 13:42
импорт данных из excel в txt и из txt в excel ESV Microsoft Office Excel 3 19.11.2010 10:29
Сохранить excel в txt kain151 Microsoft Office Excel 2 26.03.2010 22:08
Конвертация бд(paradox,dbase) в Excel DuM4uK БД в Delphi 3 07.10.2009 11:09
Конвертация Excel в PDF Enmash Софт 4 15.09.2008 14:34