IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Объединение ячеек в экселе, Объединить одинаковые значения
Atreides
сообщение 25.10.2011 21:44
Сообщение #1


Ветеран Броуновского Движения
***

Группа: Пользователи
Сообщений: 281
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Уважаемые, подскажите, как выполнить проход по столбцу (столбец всего один) в эксельном файлике и при нахождении подряд одинаковых значений объединить их в одну ячейку? И как можно определить номер последней строки с записью. Или при нахождение значения "ИТОГО" закрасить сроку от итого до последнего столбца. Все данные на одном первом листе.

Сообщение отредактировано: Atreides - 25.10.2011 22:23


Прикрепленные файлы
Прикрепленный файл  ______1.xls ( 27 килобайт ) Кол-во скачиваний: 368


--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
IUnknown
сообщение 26.10.2011 0:23
Сообщение #2


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Как-то вот так:
procedure TForm1.Button1Click(Sender: TObject);
var
iFirstRow, iCurrentRow, CurrValue : Integer;
iLastCell : Integer;
s : string;
begin
XLApp := CreateOleObject('Excel.Application');
XLApp.Visible := True; // Это для тестов

// Чтоб при объединении ячеек Excel не вякал:
// "The selection contains multiple data values. Merging into
// one cell will keep the upper-left most data only."
// отключаем вообще все уведомления...

XLApp.DisplayAlerts := False;

XLApp.WorkBooks.Open(xlFileName);

// Для начала найдем последнюю ячейку в столбце "B"
iLastCell := XLApp.Sheets[1].Range['B65536'].End[xlUp].Rows.Row;
// Это - тоже проще сделать вручную, я думаю, шапка одинакова везде
iFirstRow := 6;

// Вот он, главный цикл
repeat
CurrValue := XLApp.Sheets[1].Cells.Item[iFirstRow, 2].Value;
iCurrentRow := iFirstRow + 1;
while (iCurrentRow <= iLastCell) and
(XLApp.Sheets[1].Cells.Item[iCurrentRow, 2].Value = CurrValue) do
begin
Inc(iCurrentRow);
end;
XLApp.Sheets[1].Range[ Format('B%d:B%d', [iFirstRow, iCurrentRow - 1]) ].MergeCells := True;
iFirstRow := iCurrentRow;
until (iFirstRow > iLastCell);

XLApp.Workbooks[1].SaveAs(xlFileName); // Записываем измененный файл под тем же именем
XLApp.Quit;
XLApp := Unassigned;
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 22.06.2025 1:29
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"