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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2012, 22:27   #11
123456789igor
Пользователь
 
Регистрация: 19.04.2011
Сообщений: 62
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
И, кстати, тот код, который у Вас приведен сейчас, объединяет ячейки попарно - так и надо?
Нет лучше конечно чтобы сразу объединялись все ячейки до след заполненной, но я не знаю как это сделать и делал по парно, так как кол-во объединяемых ячеек заранее не известно
123456789igor вне форума Ответить с цитированием
Старый 19.09.2012, 22:37   #12
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Попробуйте так:

Код:
z:=Excel.WorkBooks[1].WorkSheets[1].UsedRange.Rows.Count-1;
NRow:= <№ первой пустой ячейки>; //Сюда запомним первую пустую ячейку из массива строк
NRow1:=NRow; //А с этой будем работать
NCol:= 1;
repeat
  dir:= Excel.WorkBooks[1].WorkSheets[1].Cells[NRow1,NCol];
  If dir='' then NRow1:=NRow1+1 //Проверяем: если ячейка пустая, значит объединять еще не пора
  else break;//иначе прерываем нафиг весь цикл
until NRow1>=z;
Excel.WorkBooks[1].WorkSheets[1].Range[Excel.WorkBooks[1].WorkSheets[1].cells[NRow,NCol],Excel.WorkBooks[1].WorkSheets[1].cells[NRow1,NCol]].merge; //И собственно объединяем весь найденный кусок пустых строк в столбце №1 с ячейки NRow по ячейку NRow1
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 19.09.2012 в 22:43.
Sciv вне форума Ответить с цитированием
Старый 21.09.2012, 20:07   #13
123456789igor
Пользователь
 
Регистрация: 19.04.2011
Сообщений: 62
По умолчанию

Код:
a_:=9;
      z:=Excel.WorkBooks[1].WorkSheets[1].UsedRange.Rows.Count-2;
      while a_ < z do
      begin
      repeat
      Excel.Range[Excel.cells[a_-1,1],Excel.cells[a_,1]].merge;
      inc(a_);
      until VarToStr(Excel.cells[a_,1]) <> '';
      break;
      end;
Сделал так, но объединяет только с 9 по 23 строку, 24 не пустая, а дальше опять идут пустые. Как изменить код, что бы объединяло дальше с 24?
123456789igor вне форума Ответить с цитированием
Старый 21.09.2012, 20:11   #14
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Загоняете в цикл:

Код:
 While i<> <последняя непустая строка> do 
  if Excel.WorkBooks[1].WorkSheets[1].Cells[i,NCol]='' then begin
    a_:=i;
    {и дальше Ваш код}
    i:=a_; 
  end
  else inc(i);
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 21.09.2012 в 20:14.
Sciv вне форума Ответить с цитированием
Старый 21.09.2012, 20:39   #15
123456789igor
Пользователь
 
Регистрация: 19.04.2011
Сообщений: 62
По умолчанию

Project Project2.exe raised exception class EOleSysError
with message 'Ошибка'. Process stopped. Use Step or to continue.

вот с таким кодом:
Код:
a_:=9;
      z:=Excel.WorkBooks[1].WorkSheets[1].UsedRange.Rows.Count-2;
      While i<> z do
  if VarToStr(Excel.WorkBooks[1].WorkSheets[1].Cells[i,1])='' then begin
    a_:=i;
      while a_ < z do
      begin
      repeat
      Excel.Range[Excel.cells[a_-1,1],Excel.cells[a_,1]].merge;
      inc(a_);
      until VarToStr(Excel.cells[a_,1]) <> '';
      break;
      end;
    i:=a_;
  end
  else inc(i);
123456789igor вне форума Ответить с цитированием
Старый 21.09.2012, 21:03   #16
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
VarToStr(...)
Думаю, из-за этого. Попробуйте прямым текстом, без преобразования


Код:
if Excel.WorkBooks[1].WorkSheets[1].Cells[i,1]='' then
А a_:=9 в начале вообще уберите, на кой она теперь?

Далее: Ваш код отличается от того, который я писал, поэтому Вам надо a_
присваивать не i, а i+1:

Код:
a_:=i+1;
И еще вот тут: если у Вас первая строка пустая, то строки [a_-1] в природе не существует. Поэтому добавляем проверку:

Код:
If i>1 then Excel.Range[Excel.cells[a_-1,1],Excel.cells[a_,1]].merge;
Или If i>0 then - я просто сейчас не помню, с какой цифры ячейки нумеруются. Но вроде все-же с единицы...
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 21.09.2012 в 21:09.
Sciv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл в цикле EkleP PHP 1 12.02.2012 01:29
Цикл в цикле Зод Помощь студентам 1 19.11.2011 04:40
цикл в цикле (Си++) ConChita Помощь студентам 2 11.03.2010 09:13
Цикл в цикле... Davlet M Помощь студентам 6 25.01.2010 01:42