|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
подскажите код который делал бы объединение ячеек экселя с помощью цикла, нужно к примеру объединить пять ячеек по вертикали в первом столбце потом взять следующие пять ячеек и опять их объединить и так к примеру двести строк. у меня получается только последнее пять ячеек объединить, все ячейки перед ними просто пролистываются. вот мой код
Код:
unit merge; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Comobj; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var ExcelApp, ExcelSheet, ExcelCol, ExcelRow, Excel: Variant; Size: real; i, j, N, M: Word; a_, b_:integer; begin // Запускаю приложение Excel ExcelApp:=CreateOleObject('Excel.Application'); ExcelApp.Visible:=True; // Создаю рабочую книгу ExcelApp.Workbooks.Add(-4167); ExcelApp.Workbooks[1].WorkSheets[1].Name:='Отчёт'; ExcelCol:=ExcelApp.Workbooks[1].WorkSheets['Отчёт'].Columns; // Ширина ячейки StringGrid1.DefaultRowHeight ExcelApp.Columns.Columns[1].ColumnWidth:=5; ExcelApp.Columns.Columns[2].ColumnWidth:=18; ExcelApp.Columns.Columns[3].ColumnWidth:=9; ExcelApp.Columns.Columns[4].ColumnWidth:=12; ExcelApp.Columns.Columns[5].ColumnWidth:=11; ExcelApp.Columns.Columns[6].ColumnWidth:=13; ExcelApp.Columns.Columns[7].ColumnWidth:=13; ExcelApp.Columns.Columns[8].ColumnWidth:=13; ExcelRow:=ExcelApp.Workbooks[1].WorkSheets['Отчёт'].Rows; ExcelRow.Rows[1].Font.Bold:=True; // Заголовки столбцов - жирные ExcelSheet:=ExcelApp.Workbooks[1].WorkSheets['Отчёт']; begin for a_:=17 to 226 do ExcelApp.Range[ExcelSheet.cells[a_,1],ExcelSheet.cells[a_+5,1]].Select; ExcelApp.Selection.merge; a_:=a_+5; end; end; end. подскажите, плз. Последний раз редактировалось M.A.D.M.A.N., 25.06.2013 в 21:45. |
#2
|
||||
|
||||
Ячейки объединяются через установку в true свойства MergeCells объекта Range. Вот функция специально для этого
Код:
function SetMergeCells (Sheet: variant; Range: string; MergeCells: boolean): boolean; begin Result:= true; try ExcelApp.ActiveWorkbook.Sheets.Item[Sheet].Range[Range {напр. 'A1:C2'}].MergeCells:= MergeCells; except Result:= false; end; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
||||
|
||||
И что, у вас компилятор не ругался на эту строчку?
Код:
a_:=a_+5; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#4
|
|||
|
|||
а других вариантов разве нет? в моем варианте работает, только чуточку некорректно.
|
#5
|
||||
|
||||
Заметил ещё такое, не там где надо стоит оператор, поменяйте цикл на это, возможно заработает
Код:
for a_:=17 to 226 do begin ExcelApp.Range[ExcelSheet.cells[a_,1],ExcelSheet.cells[a_+5,1]].Select; ExcelApp.Selection.merge; a_:=a_+5; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#6
|
||||
|
||||
Настоятельно рекомендую никогда не трогать счетчик цикла внутри самого цикла. Возможно в Delphi7 это и не вызывает ошибку компиляции, но в следующих версиях этот код уже не прокатит и это правильно. Вот такой вариант попробуйте:
Код:
a_:=17; while a_ < 226 do begin ExcelApp.Range[ExcelSheet.cells[a_,1],ExcelSheet.cells[a_+5,1]].Select; ExcelApp.Selection.merge; a_:=a_+5; end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 26.06.2013 в 09:32. |
#7
|
|||
|
|||
Страдалец, в вашем варианте произошло объединение всех ячеек в диапазоне с 17 по 227 в одну ячейку.
|
#8
|
|||
|
|||
Цитата:
в вашем варианте выдает ошибку в строке Код:
a_:=a_+5; |
#9
|
||||
|
||||
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#10
|
||||
|
||||
Ну я просто несколько изменил ваш цикл, чтобы ошибки не было. А вот содержимое особо и не изучал. А объединилось все видимо потому-что вы в диапозон не 5, а 6 ячеек впихиваете.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
Scorpuha (26.06.2013)
|
#11
|
|||
|
|||
Цитата:
сразу видно ГУРУ. исправил, все заработало. Спасибо. |