Delphi высота ячейки excel

 
cad2206
 
(2004-09-08 15:44)
[0]

Подскажите, как?
Строка типа ExcelWorksheet.Rows.Height:=67 вызывает ошибку:
cannot assign to a resd-only property


 
Антоныч
 
(2004-09-08 15:56)
[1]

Высота и ширина ячейки

Чтобы формировать вид документа в процессе его создания, недостаточно только функций записи информации в ячейки, необходимо также изменять ее визуальные параметры. Самое простое, с чего можно начать, — изменение ширины столбцов и высоты строк. Доступ к ширине столбцов можно получить, используя коллекцию Columns. Используя номер колонки в буквенном или числовом формате и свойство коллекции ColumnWidth, можно изменить ширину столбца или назначить ее. Определенная ниже функция, реализованная на Delphi, устанавливает ширину столбца.

Function SetColumnWidth (sheet:variant;
 column:variant;width:real):boolean;
begin
SetColumnWidth:=true;
try
 ExcelApplication.ActiveWorkbook.Sheets.Item[sheet].Columns
  [column].ColumnWidth:=width;
except
 SetColumnWidth:=false;
end;
End;
Для определения ширины столбца используйте следующий оператор: width:=ExcelApplication.ActiveWorkbook .Sheets.Item[sheet].Columns[column].ColumnWidth;

Доступ к высоте строк можно получить, используя коллекцию Rows. Назначая номер строки и свойство коллекции RowHeight, можно изменить высоту строки или назначить ее. Определенная ниже функция, реализованная на Delphi, устанавливает высоту строки.

Function SetRowHeight (sheet:variant;row:variant;
 height:real):boolean;
begin
SetRowHeight:=true;
try
 ExcelApplication.ActiveWorkbook.Sheets.Item[sheet].Rows[row].RowHeight:=height;
except
 SetRowHeight:=false;
end;
End;
Для определения высоты строки используйте следующий оператор: height:=ExcelApplication.ActiveWorkbook.Sheets.Item[sheet].Rows[row].RowHeight;

Есть подробная документация по взаимодействию Delphi с Word и Excel. Могу выслать на мыло.


 
cad2206
 
(2004-09-08 16:34)
[2]

Антоныч, эта функция устанавливает размер для всех ячеек на странице, мне нужно отдельно для каждой ячейки…?


 
BillyJeans
 
(2004-09-08 17:34)
[3]

а может отдельно для каждой строки???


 
YurikGL ©
 
(2004-09-08 21:11)
[4]

http://www.delphimaster.ru/cgi-bin/anketa.pl?id=1084962208

интересное о себе…


 
DarkMan
 
(2004-09-09 09:53)
[5]

WorkSeet.Columns[«B:B»].RowHeight := xx;

либо
WS.Range[WS.Cells[xx,yy],ExcWS.Cells[xx,yy]].Select;
ExcApp.Selection.RowHeight = xx;


 
pavel_guzhanov
 
(2004-09-09 13:01)
[6]

var m_XLApp, Sheet, Colum, Row:Variant;
begin  
 m_XLApp:=CreateOleObject(«Excel.Application»); //Запуск Excel
 m_XLApp.Visible:=true;   //видимый
 m_XLApp.Workbooks.Add(-4167);  // добавили книгу
 m_XLApp.Workbooks[1].Worksheets[1].Name:=»Список сотрудников»;
 Sheet:=m_XLApp.Workbooks[1].Worksheets[«Список сотрудников»];
 Sheet.PageSetup.Orientation:=xlLandscape;
 Colum:=m_XLApp.Workbooks[1].Worksheets[«Список сотрудников»].Columns; //столбцы
 Row:=m_XLApp.Workbooks[1].Worksheets[«Список сотрудников»].Rows; //строки
 //ширина столбцов
 Colum.Columns[1].ColumnWidth:=5;
 Colum.Columns[2].ColumnWidth:=16;
 Colum.Columns[3].ColumnWidth:=16;
 Colum.Columns[4].ColumnWidth:=33;
 Colum.Columns[5].ColumnWidth:=23;
 Colum.Columns[6].ColumnWidth:=30;
end;


уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Продолжаем копаться в листах Excel и изучать особенности работы с ними. Сегодня мы рассмотри свойства объекта WorkSheet.

Основными свойствами, которые Вы с большой вероятностью будете использовать в своей работе с Excel в Delphi являются:

  1. Cells — ячейки
  2. Columns — столбцы
  3. Name — название листа
  4. Range — диапазон ячеек
  5. Rows — сроки
  6. StandartHeight — высота строк «по умолчанию»
  7. StandartWidth — ширина столбцов «по умолчанию»
  8. UsedRange — задействованный диапазон ячеек
  9. Comments — комментарии

Всего у листа рабочей книги Excel насчитывается 54 различных свойств, но, как показвает практика, для использования Excel в Dephi достаточно 9-15 различных свойств листа, чтобы получить необходимый результат, обеспечивающий удобство и наглядность представляемых данных.

Рассмотрим применение указанных выше свойств листа Worksheet при работе с Excel в Delphi.

1. Свойство Cells

Возвращает объект диапазона, который представляет собой все ячейки на листе (а не только клетки, которые используются в настоящее время)

Пример вызова:

MyExcel.ActiveWorkBook.ActiveSheet.Cells

Однако использование свойства Cells возможно (и более практично) в другом виде. Вы можете указать сразу за словом Cells номера столбца и строки и, таким образом, получить доступ к конкретной ячейке листа. Например, забегая немного вперед, посмотрим, как можно удалить формулы из ячейки:

MyExcel.ActiveWorkBook.ActiveSheet.Cells[5,3].ClearContents

Выполнив такую операцию Вы удалите из ячейки С5 формулу (или любое другое содержимое). Как можно заметить, в отличие от работы с таблицами StringGrid Delphi, здесь вначале указывается номер строки, а затем номер столбца (у String Grid напротив — сначала указывается номер столбца, а затем номер строки).

Аналогичным образом Вы можете записать в ячейку данные:

MyExcel.ActiveWorkBook.ActiveSheet.Cells[5,3]:='Пример текста'

Ну, а чтобы показать использование этого свойства на примере, давайте напишем простенькую процедуру копирования таблицы StringGrid в любую область листа Worksheet Excel.

procedure WriteTable(FirstCol, FirstRow:integer; Grid: TStringGrid);
var col,row:integer;
begin
  try
    for col := 0 to Grid.ColCount - 1 do
      for row := 0 to Grid.RowCount - 1 do
        MyExcel.ActiveWorkBook.ActiveSheet.Cells[FirstRow+row+1, FirstCol+col+1]:=Grid.Cells[col, row];
  except
    raise Exception.Create('Запись таблицы завершилась ошибкой')
  end;
end;

Здесь в качестве параметров процедуры необходимо задать: номера первого столбца (FirstCol) и первой строки (FirstRow) на листе Excel, начиная с которых необходимо копировать данные из таблицы StringGrid (Grid). Заметьте, что вызов свойств Cells у StringGrid и WorkSheet происходит по-разному (см. индексы ячейки).

Естественно, что представленная процедура может с легкостью применяться при копировании небольших таблиц. Однако при импорте больших объемов данных в Excel эта процедура будет очень сильно тормозить работы основной программы. Более скоростной способ импорта данных из Excel в Delphi и наоборот мы рассмотрим позже, при рассмотрении объекта Range.

2. Свойство Columns

Возвращает объект диапазона, который представляет собой все столбцы на активном листе. Если активный документ не является листом (а, например, диаграммой), то вызов свойства Columns приводит к исключительной ситуации.

Пример вызова:

MyExcel.ActiveWorkBook.ActiveSheet.Columns

Это свойство удобно использовать при редактировании столбцов данных. Например вот так:

MyExcel.ActiveWorkBook.ActiveSheet.Columns[1].Font.Bold

Вы сможете изменить шрифт в столбце А на полужирный. Также Вы можете изменять внешний вид столбцов, перерисовывать границы ячеек и т.д.

3. Свойство Name

С этим свойством мы уже сталкивались. Свойство Name возвращает имя рабочего листа книги.

Пример вызова:

MyExcel.ActiveWorkBook.ActiveSheet.Name:='Новое название листа'

Так мы изменили имя текущего активного листа Excel. Кроме этого, свойство Name удобо использовать при поиске необходимого листа.

4. Свойство Range

Возвращает объект, представляющий собой одну ячейку или диапазон ячеек.

Пример вызова:

MyExcel.ActiveWorkBook.ActiveSheet.Range['A1']:='Hello World'

Так, мы получили доступ к ячейке А1 и записали в неё текст. А следующий фрагмент кода демонстрирует быстрый способ экспорта данных из листа Excel в Delphi:

var Numbers : Variant;
    data: string;
    i: integer;
begin
...
  Numbers:=MyExcel.ActiveSheet.Range[Num+IntToStr(FirstRows), Num+IntToStr(Rows)].Value;
  for i:=1 to MyExcel.ActiveSheet.UsedRange.Rows.Count do
    data:=Numbers[i,1]
...
end;

Так, мы за одно обращение к листу считали столбец данных и в дальнейшем, не используя напрямую объект WorkSheet, обработали все данные в вариантном массиве Numbers. Этот способ чтения данных с листа Excel является наиболее скоростным из всех известных мне в настоящее время. Если знаете способ более скоростной — буду очень рад, если поделитесь им.

5. Свойство Rows

Это свойство аналогично свойству Columns, но в отличие от него, возвращает объект, представляющий собой строку листа. С помощью этого свойства Вы также можете изменять внешний вид ячеек листа, изменять шрифт и т.д.

6. Свойства StandartHeight и StandartWidth

Эти свойства позволяют получить значения высоты и ширины ячеек листа «по умолчанию». Свойство доступно только для чтения, т.е. вызов:

MyExcel.ActiveWorkBook.ActiveSheet.StandartHeight:=14

Приведет к исключительной ситуации. Вы можете использовать это свойство, например, когда необходимо гарантировано установить значения высоты и ширины строк в значения «по умолчанию»

7. Свойство UsedRange

Возвращает диапазон занятых ячеек листа. Свойство очень удобно использовать, когда необходимо узнать количество занятых строк и столбцов на листе:

Rows:=MyExcel.ActiveSheet.UsedRange.Rows.Count;

Columns:=MyExcel.ActiveSheet.UsedRange.Columns.Count;

и далее, используя эти данные быстро прочитать весь занятый диапазон в вариантный массив для дальнейшей обработки.

Это свойство возвращает коллекцию комментариев на листе.

Например:

MyExcel.ActiveSheet.Comments[2].Delete

удалит второй комментарий из коллекции, а:

MyExcel.ActiveSheet.Range("e5").AddComment('Текст комментария')

добавит в ячейку е5 новый комментарий.

Итак, резюмируем. Сегодня мы узнали: как записать данные в ячейку листа Excel, как прочитать данные из диапазона ячеек, как скопировать таблицу из Delphi в Excel, как быстро экспортировать данные из Excel в Delphi.

В следующий раз займемся работой с ячейками листа, а именно научимся копировать таблицы из Delphi в Excel один-к-одному с сохранением всех цветов, границ ячеек и т.д., а также, попробуем строить диаграммы, которые опять же очень часто требуются при разработке бизнес-приложений.

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Falk0ner, вс, 06/07/2008 — 15:35.

  • Доступ к ячейкам Excel

Высота и ширина ячейки Excel
Высота и ширина ячейки
Чтобы формировать вид документа в процессе его создания, недостаточно только функций записи информации в ячейки, необходимо также изменять ее визуальные параметры. Самое простое, с чего можно начать, — изменение ширины столбцов и высоты строк. Доступ к ширине столбцов можно получить, используя коллекцию Columns. Используя номер колонки в буквенном или числовом формате и свойство коллекции ColumnWidth, можно изменить ширину столбца или назначить ее. Определенная ниже функция, реализованная на Delphi, устанавливает ширину столбца.

Function SetColumnWidth (sheet:variant;
 column:variant;width:real):boolean;
begin
 SetColumnWidth:=true;
 try
 E.ActiveWorkbook.Sheets.Item[sheet].Columns
  [column].ColumnWidth:=width;
 except
 SetColumnWidth:=false;
 end;
End;

Для определения ширины столбца используйте следующий оператор: width:=E.ActiveWorkbook .Sheets.Item[sheet].Columns[column].ColumnWidth;
Доступ к высоте строк можно получить, используя коллекцию Rows. Назначая номер строки и свойство коллекции RowHeight, можно изменить высоту строки или назначить ее. Определенная ниже функция, реализованная на Delphi, устанавливает высоту строки.

Function SetRowHeight (sheet:variant;row:variant;
 height:real):boolean;
begin
 SetRowHeight:=true;
 try
 E.ActiveWorkbook.Sheets.Item[sheet].Rows[row].RowHeight:=height;
 except
 SetRowHeight:=false;
 end;
End;

Для определения высоты строки используйте следующий оператор: height:=E.ActiveWorkbook.Sheets.Item[sheet].Rows[row].RowHeight;

Содержание

  1. Высота ячеек delphi excel
  2. Высота ячеек delphi excel
  3. Excel в Delphi. Свойства объекта WorkSheet.
  4. 1. Свойство Cells
  5. 2. Свойство Columns
  6. 3. Свойство Name
  7. 4. Свойство Range
  8. 5. Свойство Rows
  9. 6. Свойства StandartHeight и StandartWidth
  10. 7. Свойство UsedRange
  11. 8. Свойство Comments
  12. delphi excel высота строки
  13. 1. Свойство Cells
  14. 2. Свойство Columns
  15. 3. Свойство Name
  16. 4. Свойство Range
  17. 5. Свойство Rows
  18. 6. Свойства StandartHeight и StandartWidth
  19. 7. Свойство UsedRange
  20. 8. Свойство Comments

Высота ячеек delphi excel

Подскажите, как?
Строка типа ExcelWorksheet.Rows.Height:=67 вызывает ошибку:
cannot assign to a resd-only property


Антоныч ( 2004-09-08 15:56 ) [1]

Высота и ширина ячейки

Чтобы формировать вид документа в процессе его создания, недостаточно только функций записи информации в ячейки, необходимо также изменять ее визуальные параметры. Самое простое, с чего можно начать, — изменение ширины столбцов и высоты строк. Доступ к ширине столбцов можно получить, используя коллекцию Columns. Используя номер колонки в буквенном или числовом формате и свойство коллекции ColumnWidth, можно изменить ширину столбца или назначить ее. Определенная ниже функция, реализованная на Delphi, устанавливает ширину столбца.

Function SetColumnWidth (sheet:variant;
column:variant;width:real):boolean;
begin
SetColumnWidth:=true;
try
ExcelApplication.ActiveWorkbook.Sheets.Item[sheet].Columns
[column].ColumnWidth:=width;
except
SetColumnWidth:=false;
end;
End;
Для определения ширины столбца используйте следующий оператор: width:=ExcelApplication.ActiveWorkbook .Sheets.Item[sheet].Columns[column].ColumnWidth;

Доступ к высоте строк можно получить, используя коллекцию Rows. Назначая номер строки и свойство коллекции RowHeight, можно изменить высоту строки или назначить ее. Определенная ниже функция, реализованная на Delphi, устанавливает высоту строки.

Function SetRowHeight (sheet:variant;row:variant;
height:real):boolean;
begin
SetRowHeight:=true;
try
ExcelApplication.ActiveWorkbook.Sheets.Item[sheet].Rows[row].RowHeight:=height;
except
SetRowHeight:=false;
end;
End;
Для определения высоты строки используйте следующий оператор: height:=ExcelApplication.ActiveWorkbook.Sheets.Item[sheet].Rows[row].RowHeight;

Есть подробная документация по взаимодействию Delphi с Word и Excel. Могу выслать на мыло.


cad2206 ( 2004-09-08 16:34 ) [2]

Антоныч, эта функция устанавливает размер для всех ячеек на странице, мне нужно отдельно для каждой ячейки.


BillyJeans ( 2004-09-08 17:34 ) [3]

а может отдельно для каждой строки.


YurikGL © ( 2004-09-08 21:11 ) [4]

интересное о себе.


pavel_guzhanov ( 2004-09-09 13:01 ) [6]

Источник

Высота ячеек delphi excel

Подскажите, как?
Строка типа ExcelWorksheet.Rows.Height:=67 вызывает ошибку:
cannot assign to a resd-only property


Антоныч ( 2004-09-08 15:56 ) [1]

Высота и ширина ячейки

Чтобы формировать вид документа в процессе его создания, недостаточно только функций записи информации в ячейки, необходимо также изменять ее визуальные параметры. Самое простое, с чего можно начать, — изменение ширины столбцов и высоты строк. Доступ к ширине столбцов можно получить, используя коллекцию Columns. Используя номер колонки в буквенном или числовом формате и свойство коллекции ColumnWidth, можно изменить ширину столбца или назначить ее. Определенная ниже функция, реализованная на Delphi, устанавливает ширину столбца.

Function SetColumnWidth (sheet:variant;
column:variant;width:real):boolean;
begin
SetColumnWidth:=true;
try
ExcelApplication.ActiveWorkbook.Sheets.Item[sheet].Columns
[column].ColumnWidth:=width;
except
SetColumnWidth:=false;
end;
End;
Для определения ширины столбца используйте следующий оператор: width:=ExcelApplication.ActiveWorkbook .Sheets.Item[sheet].Columns[column].ColumnWidth;

Доступ к высоте строк можно получить, используя коллекцию Rows. Назначая номер строки и свойство коллекции RowHeight, можно изменить высоту строки или назначить ее. Определенная ниже функция, реализованная на Delphi, устанавливает высоту строки.

Function SetRowHeight (sheet:variant;row:variant;
height:real):boolean;
begin
SetRowHeight:=true;
try
ExcelApplication.ActiveWorkbook.Sheets.Item[sheet].Rows[row].RowHeight:=height;
except
SetRowHeight:=false;
end;
End;
Для определения высоты строки используйте следующий оператор: height:=ExcelApplication.ActiveWorkbook.Sheets.Item[sheet].Rows[row].RowHeight;

Есть подробная документация по взаимодействию Delphi с Word и Excel. Могу выслать на мыло.


cad2206 ( 2004-09-08 16:34 ) [2]

Антоныч, эта функция устанавливает размер для всех ячеек на странице, мне нужно отдельно для каждой ячейки.


BillyJeans ( 2004-09-08 17:34 ) [3]

а может отдельно для каждой строки.


YurikGL © ( 2004-09-08 21:11 ) [4]

интересное о себе.


pavel_guzhanov ( 2004-09-09 13:01 ) [6]

Источник

Excel в Delphi. Свойства объекта WorkSheet.

Продолжаем копаться в листах Excel и изучать особенности работы с ними. Сегодня мы рассмотри свойства объекта WorkSheet.

Основными свойствами, которые Вы с большой вероятностью будете использовать в своей работе с Excel в Delphi являются:

  1. Cells — ячейки
  2. Columns — столбцы
  3. Name — название листа
  4. Range — диапазон ячеек
  5. Rows — сроки
  6. StandartHeight — высота строк «по умолчанию»
  7. StandartWidth — ширина столбцов «по умолчанию»
  8. UsedRange — задействованный диапазон ячеек
  9. Comments — комментарии

Всего у листа рабочей книги Excel насчитывается 54 различных свойств, но, как показвает практика, для использования Excel в Dephi достаточно 9-15 различных свойств листа, чтобы получить необходимый результат, обеспечивающий удобство и наглядность представляемых данных.

Рассмотрим применение указанных выше свойств листа Worksheet при работе с Excel в Delphi.

1. Свойство Cells

Возвращает объект диапазона, который представляет собой все ячейки на листе (а не только клетки, которые используются в настоящее время)

Однако использование свойства Cells возможно (и более практично) в другом виде. Вы можете указать сразу за словом Cells номера столбца и строки и, таким образом, получить доступ к конкретной ячейке листа. Например, забегая немного вперед, посмотрим, как можно удалить формулы из ячейки:

Выполнив такую операцию Вы удалите из ячейки С5 формулу (или любое другое содержимое). Как можно заметить, в отличие от работы с таблицами StringGrid Delphi, здесь вначале указывается номер строки, а затем номер столбца (у String Grid напротив — сначала указывается номер столбца, а затем номер строки).

Аналогичным образом Вы можете записать в ячейку данные:

Ну, а чтобы показать использование этого свойства на примере, давайте напишем простенькую процедуру копирования таблицы StringGrid в любую область листа Worksheet Excel.

Здесь в качестве параметров процедуры необходимо задать: номера первого столбца (FirstCol) и первой строки (FirstRow) на листе Excel, начиная с которых необходимо копировать данные из таблицы StringGrid (Grid). Заметьте, что вызов свойств Cells у StringGrid и WorkSheet происходит по-разному (см. индексы ячейки).

Естественно, что представленная процедура может с легкостью применяться при копировании небольших таблиц. Однако при импорте больших объемов данных в Excel эта процедура будет очень сильно тормозить работы основной программы. Более скоростной способ импорта данных из Excel в Delphi и наоборот мы рассмотрим позже, при рассмотрении объекта Range.

2. Свойство Columns

Возвращает объект диапазона, который представляет собой все столбцы на активном листе. Если активный документ не является листом (а, например, диаграммой), то вызов свойства Columns приводит к исключительной ситуации.

Это свойство удобно использовать при редактировании столбцов данных. Например вот так:

Вы сможете изменить шрифт в столбце А на полужирный. Также Вы можете изменять внешний вид столбцов, перерисовывать границы ячеек и т.д.

3. Свойство Name

С этим свойством мы уже сталкивались. Свойство Name возвращает имя рабочего листа книги.

Так мы изменили имя текущего активного листа Excel. Кроме этого, свойство Name удобо использовать при поиске необходимого листа.

4. Свойство Range

Возвращает объект, представляющий собой одну ячейку или диапазон ячеек.

Так, мы получили доступ к ячейке А1 и записали в неё текст. А следующий фрагмент кода демонстрирует быстрый способ экспорта данных из листа Excel в Delphi:

Так, мы за одно обращение к листу считали столбец данных и в дальнейшем, не используя напрямую объект WorkSheet, обработали все данные в вариантном массиве Numbers. Этот способ чтения данных с листа Excel является наиболее скоростным из всех известных мне в настоящее время. Если знаете способ более скоростной — буду очень рад, если поделитесь им.

5. Свойство Rows

Это свойство аналогично свойству Columns, но в отличие от него, возвращает объект, представляющий собой строку листа. С помощью этого свойства Вы также можете изменять внешний вид ячеек листа, изменять шрифт и т.д.

6. Свойства StandartHeight и StandartWidth

Эти свойства позволяют получить значения высоты и ширины ячеек листа «по умолчанию». Свойство доступно только для чтения, т.е. вызов:

Приведет к исключительной ситуации. Вы можете использовать это свойство, например, когда необходимо гарантировано установить значения высоты и ширины строк в значения «по умолчанию»

7. Свойство UsedRange

Возвращает диапазон занятых ячеек листа. Свойство очень удобно использовать, когда необходимо узнать количество занятых строк и столбцов на листе:

и далее, используя эти данные быстро прочитать весь занятый диапазон в вариантный массив для дальнейшей обработки.

Это свойство возвращает коллекцию комментариев на листе.

удалит второй комментарий из коллекции, а:

добавит в ячейку е5 новый комментарий.

Итак, резюмируем. Сегодня мы узнали: как записать данные в ячейку листа Excel, как прочитать данные из диапазона ячеек, как скопировать таблицу из Delphi в Excel, как быстро экспортировать данные из Excel в Delphi.

В следующий раз займемся работой с ячейками листа, а именно научимся копировать таблицы из Delphi в Excel один-к-одному с сохранением всех цветов, границ ячеек и т.д., а также, попробуем строить диаграммы, которые опять же очень часто требуются при разработке бизнес-приложений.

Источник

delphi excel высота строки

Подскажите, как?
Строка типа ExcelWorksheet.Rows.Height:=67 вызывает ошибку:
cannot assign to a resd-only property


Антоныч ( 2004-09-08 15:56 ) [1]

Высота и ширина ячейки

Чтобы формировать вид документа в процессе его создания, недостаточно только функций записи информации в ячейки, необходимо также изменять ее визуальные параметры. Самое простое, с чего можно начать, — изменение ширины столбцов и высоты строк. Доступ к ширине столбцов можно получить, используя коллекцию Columns. Используя номер колонки в буквенном или числовом формате и свойство коллекции ColumnWidth, можно изменить ширину столбца или назначить ее. Определенная ниже функция, реализованная на Delphi, устанавливает ширину столбца.

Function SetColumnWidth (sheet:variant;
column:variant;width:real):boolean;
begin
SetColumnW > try
ExcelApplication.ActiveWorkbook.Sheets.Item[sheet].Columns
[column].ColumnW > except
SetColumnW > end;
End;
Для определения ширины столбца используйте следующий оператор: w >
Доступ к высоте строк можно получить, используя коллекцию Rows. Назначая номер строки и свойство коллекции RowHeight, можно изменить высоту строки или назначить ее. Определенная ниже функция, реализованная на Delphi, устанавливает высоту строки.

Function SetRowHeight (sheet:variant;row:variant;
height:real):boolean;
begin
SetRowHeight:=true;
try
ExcelApplication.ActiveWorkbook.Sheets.Item[sheet].Rows[row].RowHeight:=height;
except
SetRowHeight:=false;
end;
End;
Для определения высоты строки используйте следующий оператор: height:=ExcelApplication.ActiveWorkbook.Sheets.Item[sheet].Rows[row].RowHeight;

Есть подробная документация по взаимодействию Delphi с Word и Excel. Могу выслать на мыло.


cad2206 ( 2004-09-08 16:34 ) [2]

Антоныч, эта функция устанавливает размер для всех ячеек на странице, мне нужно отдельно для каждой ячейки.


BillyJeans ( 2004-09-08 17:34 ) [3]

а может отдельно для каждой строки.


YurikGL © ( 2004-09-08 21:11 ) [4]

http://www.delphimaster.ru/cgi-bin/anketa.pl? >
интересное о себе.


DarkMan ( 2004-09-09 09:53 ) [5]


pavel_guzhanov ( 2004-09-09 13:01 ) [6]

Продолжаем копаться в листах Excel и изучать особенности работы с ними. Сегодня мы рассмотри свойства объекта WorkSheet.

Основными свойствами, которые Вы с большой вероятностью будете использовать в своей работе с Excel в Delphi являются:

  1. Cells — ячейки
  2. Columns — столбцы
  3. Name — название листа
  4. Range — диапазон ячеек
  5. Rows — сроки
  6. StandartHeight — высота строк «по умолчанию»
  7. StandartWidth — ширина столбцов «по умолчанию»
  8. UsedRange — задействованный диапазон ячеек
  9. Comments — комментарии

Всего у листа рабочей книги Excel насчитывается 54 различных свойств, но, как показвает практика, для использования Excel в Dephi достаточно 9-15 различных свойств листа, чтобы получить необходимый результат, обеспечивающий удобство и наглядность представляемых данных.

Рассмотрим применение указанных выше свойств листа Worksheet при работе с Excel в Delphi.

1. Свойство Cells

Возвращает объект диапазона, который представляет собой все ячейки на листе (а не только клетки, которые используются в настоящее время)

Однако использование свойства Cells возможно (и более практично) в другом виде. Вы можете указать сразу за словом Cells номера столбца и строки и, таким образом, получить доступ к конкретной ячейке листа. Например, забегая немного вперед, посмотрим, как можно удалить формулы из ячейки:

Выполнив такую операцию Вы удалите из ячейки С5 формулу (или любое другое содержимое). Как можно заметить, в отличие от работы с таблицами StringGrid Delphi, здесь вначале указывается номер строки, а затем номер столбца (у String Grid напротив — сначала указывается номер столбца, а затем номер строки).

Аналогичным образом Вы можете записать в ячейку данные:

Ну, а чтобы показать использование этого свойства на примере, давайте напишем простенькую процедуру копирования таблицы StringGrid в любую область листа Worksheet Excel.

Здесь в качестве параметров процедуры необходимо задать: номера первого столбца (FirstCol) и первой строки (FirstRow) на листе Excel, начиная с которых необходимо копировать данные из таблицы StringGrid (Grid). Заметьте, что вызов свойств Cells у StringGrid и WorkSheet происходит по-разному (см. индексы ячейки).

Естественно, что представленная процедура может с легкостью применяться при копировании небольших таблиц. Однако при импорте больших объемов данных в Excel эта процедура будет очень сильно тормозить работы основной программы. Более скоростной способ импорта данных из Excel в Delphi и наоборот мы рассмотрим позже, при рассмотрении объекта Range.

2. Свойство Columns

Возвращает объект диапазона, который представляет собой все столбцы на активном листе. Если активный документ не является листом (а, например, диаграммой), то вызов свойства Columns приводит к исключительной ситуации.

Это свойство удобно использовать при редактировании столбцов данных. Например вот так:

Вы сможете изменить шрифт в столбце А на полужирный. Также Вы можете изменять внешний вид столбцов, перерисовывать границы ячеек и т.д.

3. Свойство Name

С этим свойством мы уже сталкивались. Свойство Name возвращает имя рабочего листа книги.

Так мы изменили имя текущего активного листа Excel. Кроме этого, свойство Name удобо использовать при поиске необходимого листа.

4. Свойство Range

Возвращает объект, представляющий собой одну ячейку или диапазон ячеек.

Так, мы получили доступ к ячейке А1 и записали в неё текст. А следующий фрагмент кода демонстрирует быстрый способ экспорта данных из листа Excel в Delphi:

Так, мы за одно обращение к листу считали столбец данных и в дальнейшем, не используя напрямую объект WorkSheet, обработали все данные в вариантном массиве Numbers. Этот способ чтения данных с листа Excel является наиболее скоростным из всех известных мне в настоящее время. Если знаете способ более скоростной — буду очень рад, если поделитесь им.

5. Свойство Rows

Это свойство аналогично свойству Columns, но в отличие от него, возвращает объект, представляющий собой строку листа. С помощью этого свойства Вы также можете изменять внешний вид ячеек листа, изменять шрифт и т.д.

6. Свойства StandartHeight и StandartWidth

Эти свойства позволяют получить значения высоты и ширины ячеек листа «по умолчанию». Свойство доступно только для чтения, т.е. вызов:

Приведет к исключительной ситуации. Вы можете использовать это свойство, например, когда необходимо гарантировано установить значения высоты и ширины строк в значения «по умолчанию»

7. Свойство UsedRange

Возвращает диапазон занятых ячеек листа. Свойство очень удобно использовать, когда необходимо узнать количество занятых строк и столбцов на листе:

и далее, используя эти данные быстро прочитать весь занятый диапазон в вариантный массив для дальнейшей обработки.

Это свойство возвращает коллекцию комментариев на листе.

удалит второй комментарий из коллекции, а:

добавит в ячейку е5 новый комментарий.

Итак, резюмируем. Сегодня мы узнали: как записать данные в ячейку листа Excel, как прочитать данные из диапазона ячеек, как скопировать таблицу из Delphi в Excel, как быстро экспортировать данные из Excel в Delphi.

В следующий раз займемся работой с ячейками листа, а именно научимся копировать таблицы из Delphi в Excel один-к-одному с сохранением всех цветов, границ ячеек и т.д., а также, попробуем строить диаграммы, которые опять же очень часто требуются при разработке бизнес-приложений.

Чтобы формировать вид документа в процессе его создания, недостаточно только функций записи информации в ячейки, необходимо также изменять ее визуальные параметры. Самое простое, с чего можно начать, — изменение ширины столбцов и высоты строк. Доступ к ширине столбцов можно получить, используя коллекцию Columns. Используя номер колонки в буквенном или числовом формате и свойство коллекции ColumnWidth, можно изменить ширину столбца или назначить ее. Определенная ниже функция, реализованная на Delphi, устанавливает ширину столбца.

Function SetColumnWidth (sheet:variant;

Для определения ширины столбца используйте следующий оператор: w >

Доступ к высоте строк можно получить, используя коллекцию Rows. Назначая номер строки и свойство коллекции RowHeight, можно изменить высоту строки или назначить ее. Определенная ниже функция, реализованная на Delphi, устанавливает высоту строки.

Function SetRowHeight (sheet:variant;row:variant;

Источник

0 / 0 / 0

Регистрация: 02.12.2011

Сообщений: 16

1

19.12.2011, 00:26. Показов 25514. Ответов 6

Метки autofit, excel, ms excel, vba, выравнивание по высоте, выравнивание по ширине, высота ячейки, объединённые ячейки, подбор высоты, подбор ширины, подгон высоты, подгон размера, подгон ширины, размер ячейки, ячейка, ячейки (Все метки)


Студворк — интернет-сервис помощи студентам

В ячейку вставляется очень длинный текст, который при печати просто не виден. Нужно, чтобы продолжение текста переносилось в сторку ниже.
Пишу на Delphi.



0



Mawrat

13094 / 5875 / 1706

Регистрация: 19.09.2009

Сообщений: 8,808

19.12.2011, 04:05

2

Лучший ответ Сообщение было отмечено как решение

Решение

Для такой ячейки надо выставить свойство WrapText := True.

Delphi
1
2
3
4
5
var
  exCell, ... : Variant;
begin
...
  exCell.WrapText := True; //Перенос текста по словам.

После того, как во всех ячейках нужного диапазона текст будет установлен, можно выполнить подбор высоты строк так, чтобы весь текст с учётом переносов оказался видимым:

Delphi
1
2
3
4
5
var
  exRange, ... : Variant;
begin
...
  exRange.Rows.AutoFit; //Подпор высоты строк по содержимому ячеек.

Также можно выполнять подгонку ширины столбцов:

Delphi
1
2
3
4
5
var
  exRange, ... : Variant;
begin
...
  exRange.Columns.AutoFit; //Подпор ширины столбцов по содержимому ячеек.



4



Fistashka

0 / 0 / 0

Регистрация: 02.12.2011

Сообщений: 16

19.12.2011, 13:11

 [ТС]

3

Цитата
Сообщение от Mawrat
Посмотреть сообщение

Для такой ячейки надо выставить свойство WrapText := True.

Delphi
1
2
3
4
5
var
  exCell, ... : Variant;
begin
...
  exCell.WrapText := True; //Перенос текста по словам.

После того, как во всех ячейках нужного диапазона текст будет установлен, можно выполнить подбор высоты строк так, чтобы весь текст с учётом переносов оказался видимым:

Delphi
1
2
3
4
5
var
  exRange, ... : Variant;
begin
...
  exRange.Rows.AutoFit; //Подпор высоты строк по содержимому ячеек.

Также можно выполнять подгонку ширины столбцов:

Delphi
1
2
3
4
5
var
  exRange, ... : Variant;
begin
...
  exRange.Columns.AutoFit; //Подпор ширины столбцов по содержимому ячеек.

Спасибо большое, буду пытаться )))

Добавлено через 1 час 11 минут

Цитата
Сообщение от Mawrat
Посмотреть сообщение

Для такой ячейки надо выставить свойство WrapText := True.

Delphi
1
2
3
4
5
var
  exCell, ... : Variant;
begin
...
  exCell.WrapText := True; //Перенос текста по словам.

После того, как во всех ячейках нужного диапазона текст будет установлен, можно выполнить подбор высоты строк так, чтобы весь текст с учётом переносов оказался видимым:

Delphi
1
2
3
4
5
var
  exRange, ... : Variant;
begin
...
  exRange.Rows.AutoFit; //Подпор высоты строк по содержимому ячеек.

Также можно выполнять подгонку ширины столбцов:

Delphi
1
2
3
4
5
var
  exRange, ... : Variant;
begin
...
  exRange.Columns.AutoFit; //Подпор ширины столбцов по содержимому ячеек.

Все хорошо, но возникает проблема: AutoFit не работает с объединенными ячейками, а у меня именно такие.



0



Mawrat

13094 / 5875 / 1706

Регистрация: 19.09.2009

Сообщений: 8,808

20.12.2011, 21:20

4

Цитата
Сообщение от Fistashka
Посмотреть сообщение

Все хорошо, но возникает проблема: AutoFit не работает с объединенными ячейками, а у меня именно такие.

Если ячейки объединены по нескольким строкам, то тогда неизвестно для каких из этих строк следует подгонять высоту. Ведь это можно сделать разными способами, изменяя высоту той или иной строки, в пределах объединения. Поэтому метод AutoFit не выполняет изменений для объединённых ячеек.
Такую задачу можно решать по-разному в зависимости от особенностей расположения данных на листе. Например, можно принять такое решение: в случае обнаружения объединения ячеек будем подгонять высоту только верхней строки, входящей в объединение. При этом, изменять высоту, если потребуется, будем только в сторону увеличения. Уменьшать высоту не будем, чтобы не нарушить соотношения по уже сделанным ранее объединениям.
По этому условию в VBA у меня получился такой код:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Option Explicit
 
'Эта процедура предназначена для подгона высоты строк по содержимому ячеек
'в пределах заданного диапазона aRng.
Sub RngAutoFit(ByRef aRng As Excel.Range)
  Dim Cell As Excel.Range 'Отдельная ячейка.
  Dim MRng As Excel.Range 'Диапазон объединения ячеек.
  Dim DispAl As Boolean
  Dim nRow As Long
  Dim nCol As Long
  Dim HRow1 As Long 'Высота верхней строки в диапазоне объединения.
  Dim H1 As Long 'Исходная высота по совокупности всех строк объединения.
  Dim H2 As Long 'Наименьшая необходимая высота для показа текста в объединённой ячейке.
  Dim WCol1 As Long 'Исходная ширина левого столбца в диапазоне объединения.
  Dim W1 As Long 'Исходная ширина по совокупности всех столбцов объединения.
  Dim i As Long
  
  If aRng Is Nothing Then Exit Sub
  
  'Подгоняем высоту строк для ячеек, которые не входят в диапазоны объединённых ячеек.
  aRng.Rows.AutoFit
  'Отключаем режим показа предупреждений. Это надо для того, чтобы в следующей части
  'программы не появлялось сообщение с предупреждением о последствиях объединения.
  DispAl = Application.DisplayAlerts
  Application.DisplayAlerts = False
  
  'Перебор всех ячеек диапазона.
  For nRow = 1 To aRng.Rows.Count
  For nCol = 1 To aRng.Columns.Count
    'Берём очередную ячейку.
    Set Cell = aRng.Cells(nRow, nCol)
    'Определяем диапазон объединения, в который входит ячейка Cell.
    Set MRng = Cell.MergeArea
    'Если в самом деле ячейка принадлежит диапазону объединённых ячеек и эта ячейка
    'является левой верхней ячейкой в этом диапазоне, тогда запускаем алгоритм подгона высоты.
    If Cell.MergeCells And (Cell = MRng.Cells(1, 1)) Then
      'Высота верхней строки в диапазоне объединения.
      HRow1 = MRng.Rows(1).RowHeight
      'Подсчитываем исходную высоту диапазона объединения по совокупности всех его строк.
      H1 = HRow1
      For i = 2 To MRng.Rows.Count
        H1 = H1 + MRng.Rows(i).RowHeight
      Next i
      'Ширина левого столбца в диапазоне объединения.
      WCol1 = MRng.Columns(1).ColumnWidth
      'Подсчитываем исходную ширину диапазона объединения по совокупности всех его столбцов.
      W1 = WCol1
      For i = 2 To MRng.Columns.Count
        W1 = W1 + MRng.Columns(i).ColumnWidth
      Next i
      'Теперь разъединяем ячейки.
      MRng.MergeCells = False
      'Ширину левого столбца делаем равным исходной ширине всего диапазона объединения.
      Cell.ColumnWidth = W1
      'Задаём режим переноса текста по словам.
      Cell.WrapText = True
      'Выполняем подгон высоты верхней строки.
      Cell.Rows.AutoFit
      'Выполняем замер получившейся высоты верхней строки.
      'Это наименьшая высота, пригодная для показа текста.
      H2 = Cell.Rows(1).RowHeight
      'Если исходная высота диапазона объединения оказалась меньше, чем наименьшая
      'пригодная высота, то увеличиваем высоту верхней строки на соответствующую величину.
      If H1 < H2 Then
        Cell.Rows(1).RowHeight = HRow1 + (H2 - H1)
      End If
      'Возвращаем левому столбцу диапазона его прежнюю ширину.
      Cell.ColumnWidth = WCol1
      'Объединяем все нужные ячейки.
      MRng.MergeCells = True
    End If
  Next nCol
  Next nRow
  
  'Восстанавливаем прежний режим показа предупреждений.
  Application.DisplayAlerts = DispAl
End Sub
 
'Проверка.
Sub Sub1()
  Dim Rng As Excel.Range
  Dim Sh As Excel.Worksheet
  
  Set Sh = Application.ActiveSheet
  Set Rng = Sh.Range("A1:J5")
  
  RngAutoFit Rng
End Sub

Осталось код процедуры RngAutoFit() перевести на Delphi.

Идея этого алгоритма такая:
— Замеряем размеры объединённой ячейки.
— Затем, разъединяем диапазон. При этом, весь текст окажется в левой верхней ячейке диапазона объединения.
— Задаём ширину левой верхней ячейки равной ширине исходного объединённого диапазона.
— Выполняем для левой верхней ячейки подгон высоты.
— Затем, сравниваем полученную высоту с исходной высотой всего объединённого диапазона. И если оказалось, что полученная высота больше исходной, тогда на соответствующую величину увеличиваем высоту верхней строки диапазона.
— Вновь объединяем все нужные ячейки.

Книга MS Excel с этим кодом приложена к сообщению.

Вложения

Тип файла: xls AutoFitForMergeredCells.xls (37.0 Кб, 196 просмотров)



1



Fistashka

0 / 0 / 0

Регистрация: 02.12.2011

Сообщений: 16

20.12.2011, 21:32

 [ТС]

5

Цитата
Сообщение от Mawrat
Посмотреть сообщение

Если ячейки объединены по нескольким строкам, то тогда неизвестно для каких из этих строк следует подгонять высоту. Ведь это можно сделать разными способами, изменяя высоту той или иной строки, в пределах объединения. Поэтому метод AutoFit не выполняет изменений для объединённых ячеек.
Такую задачу можно решать по-разному в зависимости от особенностей расположения данных на листе. Например, можно принять такое решение: в случае обнаружения объединения ячеек будем подгонять высоту только верхней строки, входящей в объединение. При этом, изменять высоту, если потребуется, будем только в сторону увеличения. Уменьшать высоту не будем, чтобы не нарушить соотношения по уже сделанным ранее объединениям.
По этому условию в VBA у меня получился такой код:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Option Explicit
 
'Эта процедура предназначена для подгона высоты строк по содержимому ячеек
'в пределах заданного диапазона aRng.
Sub RngAutoFit(ByRef aRng As Excel.Range)
  Dim Cell As Excel.Range 'Отдельная ячейка.
  Dim MRng As Excel.Range 'Диапазон объединения ячеек.
  Dim DispAl As Boolean
  Dim nRow As Long
  Dim nCol As Long
  Dim HRow1 As Long 'Высота верхней строки в диапазоне объединения.
  Dim H1 As Long 'Исходная высота по совокупности всех строк объединения.
  Dim H2 As Long 'Наименьшая необходимая высота для показа текста в объединённой ячейке.
  Dim WCol1 As Long 'Исходная ширина левого столбца в диапазоне объединения.
  Dim W1 As Long 'Исходная ширина по совокупности всех столбцов объединения.
  Dim i As Long
  
  If aRng Is Nothing Then Exit Sub
  
  'Подгоняем высоту строк для ячеек, которые не входят в диапазоны объединённых ячеек.
  aRng.Rows.AutoFit
  'Отключаем режим показа предупреждений. Это надо для того, чтобы в следующей части
  'программы не появлялось сообщение с предупреждением о последствиях объединения.
  DispAl = Application.DisplayAlerts
  Application.DisplayAlerts = False
  
  'Перебор всех ячеек диапазона.
  For nRow = 1 To aRng.Rows.Count
  For nCol = 1 To aRng.Columns.Count
    'Берём очередную ячейку.
    Set Cell = aRng.Cells(nRow, nCol)
    'Определяем диапазон объединения, в который входит ячейка Cell.
    Set MRng = Cell.MergeArea
    'Если в самом деле ячейка принадлежит диапазону объединённых ячеек и эта ячейка
    'является левой верхней ячейкой в этом диапазоне, тогда запускаем алгоритм подгона высоты.
    If Cell.MergeCells And (Cell = MRng.Cells(1, 1)) Then
      'Высота верхней строки в диапазоне объединения.
      HRow1 = MRng.Rows(1).RowHeight
      'Подсчитываем исходную высоту диапазона объединения по совокупности всех его строк.
      H1 = HRow1
      For i = 2 To MRng.Rows.Count
        H1 = H1 + MRng.Rows(i).RowHeight
      Next i
      'Ширина левого столбца в диапазоне объединения.
      WCol1 = MRng.Columns(1).ColumnWidth
      'Подсчитываем исходную ширину диапазона объединения по совокупности всех его столбцов.
      W1 = WCol1
      For i = 2 To MRng.Columns.Count
        W1 = W1 + MRng.Columns(i).ColumnWidth
      Next i
      'Теперь разъединяем ячейки.
      MRng.MergeCells = False
      'Ширину левого столбца делаем равным исходной ширине всего диапазона объединения.
      Cell.ColumnWidth = W1
      'Задаём режим переноса текста по словам.
      Cell.WrapText = True
      'Выполняем подгон высоты верхней строки.
      Cell.Rows.AutoFit
      'Выполняем замер получившейся высоты верхней строки.
      'Это наименьшая высота, пригодная для показа текста.
      H2 = Cell.Rows(1).RowHeight
      'Если исходная высота диапазона объединения оказалась меньше, чем наименьшая
      'пригодная высота, то увеличиваем высоту верхней строки на соответствующую величину.
      If H1 < H2 Then
        Cell.Rows(1).RowHeight = HRow1 + (H2 - H1)
      End If
      'Возвращаем левому столбцу диапазона его прежнюю ширину.
      Cell.ColumnWidth = WCol1
      'Объединяем все нужные ячейки.
      MRng.MergeCells = True
    End If
  Next nCol
  Next nRow
  
  'Восстанавливаем прежний режим показа предупреждений.
  Application.DisplayAlerts = DispAl
End Sub
 
'Проверка.
Sub Sub1()
  Dim Rng As Excel.Range
  Dim Sh As Excel.Worksheet
  
  Set Sh = Application.ActiveSheet
  Set Rng = Sh.Range("A1:J5")
  
  RngAutoFit Rng
End Sub

Осталось код процедуры RngAutoFit() перевести на Delphi.

Идея этого алгоритма такая:
— Замеряем размеры объединённой ячейки.
— Затем, разъединяем диапазон. При этом, весь текст окажется в левой верхней ячейке диапазона объединения.
— Задаём ширину левой верхней ячейки равной ширине исходного объединённого диапазона.
— Выполняем для левой верхней ячейки подгон высоты.
— Затем, сравниваем полученную высоту с исходной высотой всего объединённого диапазона. И если оказалось, что полученная высота больше исходной, тогда на соответствующую величину увеличиваем высоту верхней строки диапазона.
— Вновь объединяем все нужные ячейки.

Книга MS Excel с этим кодом приложена к сообщению.

Благодарствую, буду думать ))



0



Mawrat

13094 / 5875 / 1706

Регистрация: 19.09.2009

Сообщений: 8,808

21.12.2011, 16:41

6

Лучший ответ Сообщение было отмечено как решение

Решение

Сделал перевод для Delphi.
Там в коде ещё надо подправить одну строчку.
Заменить:

Visual Basic
1
    If Cell.MergeCells And (Cell = MRng.Cells(1, 1)) Then

на:

Visual Basic
1
    If Cell.MergeCells And (Cell.Address = MRng.Cells(1, 1).Address) Then

Потому что в коде

Visual Basic
1
  If ... (Cell = MRng.Cells(1, 1)) ... Then

на самом деле сравниваются не ссылки на указанные объекты, а сравниваются значения свойств по умолчанию для этих объектов. Так как Cell и MRng.Cells(1, 1) принадлежат типу Excel.Range, то для них свойством по умолчанию будет Value. Т. е. код:

Visual Basic
1
  If ... (Cell = MRng.Cells(1, 1)) ... Then

эквивалентен коду:

Visual Basic
1
  If ... (Cell.Value = MRng.Cells(1, 1).Value) ... Then

А это не то что нам нужно. Нам надо не значение ячеек сравнивать, а выяснить, ссылаются ли эти переменные на одну и ту же ячейку. Для этого было решено использовать свойство Address.

Окончательный код VBA:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Option Explicit
 
'Эта процедура предназначена для подгона высоты строк по содержимому ячеек в пределах
'заданного диапазона aRng. Ячейки могут быть любыми, в том числе, объединёнными.
Sub RngAutoFit(ByRef aRng As Excel.Range)
  Dim Cell As Excel.Range 'Отдельная ячейка.
  Dim MRng As Excel.Range 'Диапазон объединения ячеек.
  Dim DispAl As Boolean
  Dim nRow As Long
  Dim nCol As Long
  Dim HRow1 As Long 'Высота верхней строки в диапазоне объединения.
  Dim H1 As Long 'Исходная высота по совокупности всех строк объединения.
  Dim H2 As Long 'Наименьшая необходимая высота для показа текста в объединённой ячейке.
  Dim WCol1 As Long 'Исходная ширина левого столбца в диапазоне объединения.
  Dim W1 As Long 'Исходная ширина по совокупности всех столбцов объединения.
  Dim i As Long
  
  If aRng Is Nothing Then Exit Sub
  
  'Подгоняем высоту строк для ячеек, которые не входят в диапазоны объединённых ячеек.
  aRng.Rows.AutoFit
  'Отключаем режим показа предупреждений. Это надо для того, чтобы в следующей части
  'программы не появлялось сообщение с предупреждением о последствиях объединения.
  DispAl = Application.DisplayAlerts
  Application.DisplayAlerts = False
  
  'Перебор всех ячеек диапазона.
  For nRow = 1 To aRng.Rows.Count
  For nCol = 1 To aRng.Columns.Count
    'Берём очередную ячейку.
    Set Cell = aRng.Cells(nRow, nCol)
    'Определяем диапазон объединения, в который входит ячейка Cell.
    Set MRng = Cell.MergeArea
    'Если в самом деле ячейка принадлежит диапазону объединённых ячеек и эта ячейка
    'является левой верхней ячейкой в этом диапазоне, тогда запускаем алгоритм подгона высоты.
    If Cell.MergeCells And (Cell.Address = MRng.Cells(1, 1).Address) Then
      'Высота верхней строки в диапазоне объединения.
      HRow1 = MRng.Rows(1).RowHeight
      'Подсчитываем исходную высоту диапазона объединения по совокупности всех его строк.
      H1 = HRow1
      For i = 2 To MRng.Rows.Count
        H1 = H1 + MRng.Rows(i).RowHeight
      Next i
      'Ширина левого столбца в диапазоне объединения.
      WCol1 = MRng.Columns(1).ColumnWidth
      'Подсчитываем исходную ширину диапазона объединения по совокупности всех его столбцов.
      W1 = WCol1
      For i = 2 To MRng.Columns.Count
        W1 = W1 + MRng.Columns(i).ColumnWidth
      Next i
      'Теперь разъединяем ячейки.
      MRng.MergeCells = False
      'Ширину левого столбца делаем равным исходной ширине всего диапазона объединения.
      Cell.ColumnWidth = W1
      'Задаём режим переноса текста по словам.
      Cell.WrapText = True
      'Выполняем подгон высоты верхней строки.
      Cell.Rows.AutoFit
      'Выполняем замер получившейся высоты верхней строки.
      'Это наименьшая высота, пригодная для показа текста.
      H2 = Cell.Rows(1).RowHeight
      'Если исходная высота диапазона объединения оказалась меньше, чем наименьшая
      'пригодная высота, то увеличиваем высоту верхней строки на соответствующую величину.
      If H1 < H2 Then
        Cell.Rows(1).RowHeight = HRow1 + (H2 - H1)
      End If
      'Возвращаем левому столбцу диапазона его прежнюю ширину.
      Cell.ColumnWidth = WCol1
      'Объединяем все нужные ячейки.
      MRng.MergeCells = True
    End If
  Next nCol
  Next nRow
  
  'Восстанавливаем прежний режим показа предупреждений.
  Application.DisplayAlerts = DispAl
End Sub
 
'Проверка.
Sub Sub1()
  Dim Rng As Excel.Range
  Dim Sh As Excel.Worksheet
  
  Set Sh = Application.ActiveSheet
  Set Rng = Sh.Range("A1:J5")
  
  RngAutoFit Rng
End Sub

Код Delphi:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
uses
  ComObj;
 
//Эта процедура предназначена для подгона высоты строк по содержимому ячеек в пределах
//заданного диапазона aRng. Ячейки могут быть любыми, в том числе, объединёнными.
procedure RngAutoFit(var aRng : Variant);
var
  //Cell - Отдельная ячейка, MRng - диапазон объединения ячеек.
  Cell, MRng : Variant;
  DispAl : Boolean;
  nRow, nCol,
  HRow1, //Высота верхней строки в диапазоне объединения.
  H1,    //Исходная высота по совокупности всех строк объединения.
  H2,    //Наименьшая необходимая высота для показа текста в объединённой ячейке.
  WCol1, //Исходная ширина левого столбца в диапазоне объединения.
  W1,    //Исходная ширина по совокупности всех столбцов объединения.
  i : Integer;
begin
  //В VBA это: if aRng is Nothing then Exit Sub
  if TVarData(aRng).VDispatch = nil then Exit;
 
  //Подгоняем высоту строк для ячеек, которые не входят в диапазоны объединённых ячеек.
  aRng.Rows.AutoFit;
  //Отключаем режим показа предупреждений. Это надо для того, чтобы в следующей части
  //программы не появлялось сообщение с предупреждением о последствиях объединения.
  DispAl := aRng.Application.DisplayAlerts;
  aRng.Application.DisplayAlerts := False;
 
  //Перебор всех ячеек диапазона.
  for nRow := 1 to aRng.Rows.Count do
  for nCol := 1 to aRng.Columns.Count do begin
    //Берём очередную ячейку.
    Cell := aRng.Cells[nRow, nCol];
    //Определяем диапазон объединения, в который входит ячейка Cell.
    MRng := Cell.MergeArea;
    //Если в самом деле ячейка принадлежит диапазону объединённых ячеек и эта ячейка
    //является левой верхней ячейкой в этом диапазоне, тогда запускаем алгоритм подгона высоты.
    //Иначе - пропускаем итерацию.
    if not ( Cell.MergeCells and (Cell.Address = MRng.Cells[1, 1].Address) ) then Continue;
 
    //Высота верхней строки в диапазоне объединения.
    HRow1 := MRng.Rows[1].RowHeight;
    //Подсчитываем исходную высоту диапазона объединения по совокупности всех его строк.
    H1 := HRow1;
    for i := 2 to MRng.Rows.Count do
      H1 := H1 + MRng.Rows[i].RowHeight
    ;
    //Ширина левого столбца в диапазоне объединения.
    WCol1 := MRng.Columns[1].ColumnWidth;
    //Подсчитываем исходную ширину диапазона объединения по совокупности всех его столбцов.
    W1 := WCol1;
    for i := 2 to MRng.Columns.Count do
      W1 := W1 + MRng.Columns[i].ColumnWidth
    ;
    //Теперь разъединяем ячейки.
    MRng.MergeCells := False;
    //Ширину левого столбца делаем равным исходной ширине всего диапазона объединения.
    Cell.ColumnWidth := W1;
    //Задаём режим переноса текста по словам.
    Cell.WrapText := True;
    //Выполняем подгон высоты верхней строки.
    Cell.Rows.AutoFit;
    //Выполняем замер получившейся высоты верхней строки.
    //Это наименьшая высота, пригодная для показа текста.
    H2 := Cell.Rows[1].RowHeight;
    //Если исходная высота диапазона объединения оказалась меньше, чем наименьшая
    //пригодная высота, то увеличиваем высоту верхней строки на соответствующую величину.
    if H1 < H2 then
      Cell.Rows[1].RowHeight := HRow1 + (H2 - H1)
    ;
    //Возвращаем левому столбцу диапазона его прежнюю ширину.
    Cell.ColumnWidth := WCol1;
    //Объединяем все нужные ячейки.
    MRng.MergeCells := True;
  end; //for nRow, nCol.
 
  //Восстанавливаем прежний режим показа предупреждений.
  aRng.Application.DisplayAlerts := DispAl;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  App, Book, Sh, Rng : Variant;
  Od : TOpenDialog;
begin
  Od := OpenDialog1;
  if Od.InitialDir = '' then
    Od.InitialDir := ExtractFilePath( ParamStr(0) )
  ;
  if not Od.Execute then Exit;
  if not FileExists(Od.FileName) then begin
    MessageBox(
      0
      ,PChar('Файл с заданным именем не найден. Действие отменено.')
      ,PChar('Предупреждение.')
      ,MB_OK + MB_ICONWARNING + MB_APPLMODAL
    );
    Exit;
  end;
 
  App := CreateOleObject('Excel.Application');
  App.Visible := True;
  Book := App.Workbooks.Open(Od.FileName);
  //Первый лист в рабочей книге.
  Sh := Book.Worksheets[1];
  //Весь используемый диапазон ячеек на листе.
  Rng := Sh.UsedRange;
 
  //Если требуется повысить скорость работы, следует отключить
  //режим перерисовки экрана. Но после обработки надо не забыть
  //этот режим включить вновь - чтобы пользователь мог работать
  //с открытой книгой.
  //App.ScreenUpdating := False;
 
  //Подгон высоты строк по всем ячейкам, включая объединённые.
  RngAutoFit(Rng);
 
  //Включаем обновление экрана в Excel.
  //App.ScreenUpdating := True;
end;

В приложенном архиве проект Delphi и книга Excel с проектом VBA.

Вложения

Тип файла: rar AutoFitWithMergeredCells.rar (186.1 Кб, 252 просмотров)



3



0 / 0 / 0

Регистрация: 02.12.2011

Сообщений: 16

21.12.2011, 18:30

 [ТС]

7

Спасибо Вам огромное, сама бы я никогда до этого не додумалась )) Вы меня просто спасли ))



0



I’m moving some older code from Office 2000 to Office 2010 and have ran into an issue with getting Excel to Autofit Columns

The code that was working is as follows:

for x := 1 to LV.Columns.Count do
  XLApp.Columns[x].EntireColumn.AutoFit;

Where XLApp is a TExcelApplication component

When I look at VBA the equivalent code should be

 Columns("A:A").EntireColumn.AutoFit

It’s easy for me to change my code so that the range matches the VBA, but that doesn’t seem to be the problem. The error returned by the compiler is

Class does not have a default property

And the [x] is highlighted. Code completion does not offer any way that I can see of selecting an individual column, either as an integer or a Range.

Any suggestions?

asked Mar 18, 2013 at 10:38

Dan Kelly's user avatar

The code that you have will work for late bound COM. But you state that you are using early bound COM.

For early bound COM you need to use something like this:

ExcelApp.Range['A1','A1'].EntireColumn.AutoFit;

I cannot explain how the code worked in the past. Perhaps the import unit created from the Excel type library differed in some subtle way.

answered Mar 18, 2013 at 10:53

David Heffernan's user avatar

David HeffernanDavid Heffernan

598k42 gold badges1061 silver badges1474 bronze badges

1

На чтение 7 мин. Просмотров 66 Опубликовано 15.12.2019

Подскажите, как?
Строка типа ExcelWorksheet.Rows.Height:=67 вызывает ошибку:
cannot assign to a resd-only property


Антоныч ( 2004-09-08 15:56 ) [1]

Высота и ширина ячейки

Чтобы формировать вид документа в процессе его создания, недостаточно только функций записи информации в ячейки, необходимо также изменять ее визуальные параметры. Самое простое, с чего можно начать, — изменение ширины столбцов и высоты строк. Доступ к ширине столбцов можно получить, используя коллекцию Columns. Используя номер колонки в буквенном или числовом формате и свойство коллекции ColumnWidth, можно изменить ширину столбца или назначить ее. Определенная ниже функция, реализованная на Delphi, устанавливает ширину столбца.

Function SetColumnWidth (sheet:variant;
column:variant;width:real):boolean;
begin
SetColumnW > try
ExcelApplication.ActiveWorkbook.Sheets.Item[sheet].Columns
[column].ColumnW > except
SetColumnW > end;
End;
Для определения ширины столбца используйте следующий оператор: w >
Доступ к высоте строк можно получить, используя коллекцию Rows. Назначая номер строки и свойство коллекции RowHeight, можно изменить высоту строки или назначить ее. Определенная ниже функция, реализованная на Delphi, устанавливает высоту строки.

Function SetRowHeight (sheet:variant;row:variant;
height:real):boolean;
begin
SetRowHeight:=true;
try
ExcelApplication.ActiveWorkbook.Sheets.Item[sheet].Rows[row].RowHeight:=height;
except
SetRowHeight:=false;
end;
End;
Для определения высоты строки используйте следующий оператор: height:=ExcelApplication.ActiveWorkbook.Sheets.Item[sheet].Rows[row].RowHeight;

Есть подробная документация по взаимодействию Delphi с Word и Excel. Могу выслать на мыло.


cad2206 ( 2004-09-08 16:34 ) [2]

Антоныч, эта функция устанавливает размер для всех ячеек на странице, мне нужно отдельно для каждой ячейки.


BillyJeans ( 2004-09-08 17:34 ) [3]

а может отдельно для каждой строки.


YurikGL © ( 2004-09-08 21:11 ) [4]

http://www.delphimaster.ru/cgi-bin/anketa.pl? >
интересное о себе.


DarkMan ( 2004-09-09 09:53 ) [5]


pavel_guzhanov ( 2004-09-09 13:01 ) [6]

Продолжаем копаться в листах Excel и изучать особенности работы с ними. Сегодня мы рассмотри свойства объекта WorkSheet.

Основными свойствами, которые Вы с большой вероятностью будете использовать в своей работе с Excel в Delphi являются:

  1. Cells — ячейки
  2. Columns — столбцы
  3. Name — название листа
  4. Range — диапазон ячеек
  5. Rows — сроки
  6. StandartHeight — высота строк «по умолчанию»
  7. StandartWidth — ширина столбцов «по умолчанию»
  8. UsedRange — задействованный диапазон ячеек
  9. Comments — комментарии

Всего у листа рабочей книги Excel насчитывается 54 различных свойств, но, как показвает практика, для использования Excel в Dephi достаточно 9-15 различных свойств листа, чтобы получить необходимый результат, обеспечивающий удобство и наглядность представляемых данных.

Рассмотрим применение указанных выше свойств листа Worksheet при работе с Excel в Delphi.

Содержание

  1. 1. Свойство Cells
  2. 2. Свойство Columns
  3. 3. Свойство Name
  4. 4. Свойство Range
  5. 5. Свойство Rows
  6. 6. Свойства StandartHeight и StandartWidth
  7. 7. Свойство UsedRange
  8. 8. Свойство Comments

1. Свойство Cells

Возвращает объект диапазона, который представляет собой все ячейки на листе (а не только клетки, которые используются в настоящее время)

Однако использование свойства Cells возможно (и более практично) в другом виде. Вы можете указать сразу за словом Cells номера столбца и строки и, таким образом, получить доступ к конкретной ячейке листа. Например, забегая немного вперед, посмотрим, как можно удалить формулы из ячейки:

Выполнив такую операцию Вы удалите из ячейки С5 формулу (или любое другое содержимое). Как можно заметить, в отличие от работы с таблицами StringGrid Delphi, здесь вначале указывается номер строки, а затем номер столбца (у String Grid напротив — сначала указывается номер столбца, а затем номер строки).

Аналогичным образом Вы можете записать в ячейку данные:

Ну, а чтобы показать использование этого свойства на примере, давайте напишем простенькую процедуру копирования таблицы StringGrid в любую область листа Worksheet Excel.

Здесь в качестве параметров процедуры необходимо задать: номера первого столбца (FirstCol) и первой строки (FirstRow) на листе Excel, начиная с которых необходимо копировать данные из таблицы StringGrid (Grid). Заметьте, что вызов свойств Cells у StringGrid и WorkSheet происходит по-разному (см. индексы ячейки).

Естественно, что представленная процедура может с легкостью применяться при копировании небольших таблиц. Однако при импорте больших объемов данных в Excel эта процедура будет очень сильно тормозить работы основной программы. Более скоростной способ импорта данных из Excel в Delphi и наоборот мы рассмотрим позже, при рассмотрении объекта Range.

2. Свойство Columns

Возвращает объект диапазона, который представляет собой все столбцы на активном листе. Если активный документ не является листом (а, например, диаграммой), то вызов свойства Columns приводит к исключительной ситуации.

Это свойство удобно использовать при редактировании столбцов данных. Например вот так:

Вы сможете изменить шрифт в столбце А на полужирный. Также Вы можете изменять внешний вид столбцов, перерисовывать границы ячеек и т.д.

3. Свойство Name

С этим свойством мы уже сталкивались. Свойство Name возвращает имя рабочего листа книги.

Так мы изменили имя текущего активного листа Excel. Кроме этого, свойство Name удобо использовать при поиске необходимого листа.

4. Свойство Range

Возвращает объект, представляющий собой одну ячейку или диапазон ячеек.

Так, мы получили доступ к ячейке А1 и записали в неё текст. А следующий фрагмент кода демонстрирует быстрый способ экспорта данных из листа Excel в Delphi:

Так, мы за одно обращение к листу считали столбец данных и в дальнейшем, не используя напрямую объект WorkSheet, обработали все данные в вариантном массиве Numbers. Этот способ чтения данных с листа Excel является наиболее скоростным из всех известных мне в настоящее время. Если знаете способ более скоростной — буду очень рад, если поделитесь им.

5. Свойство Rows

Это свойство аналогично свойству Columns, но в отличие от него, возвращает объект, представляющий собой строку листа. С помощью этого свойства Вы также можете изменять внешний вид ячеек листа, изменять шрифт и т.д.

6. Свойства StandartHeight и StandartWidth

Эти свойства позволяют получить значения высоты и ширины ячеек листа «по умолчанию». Свойство доступно только для чтения, т.е. вызов:

Приведет к исключительной ситуации. Вы можете использовать это свойство, например, когда необходимо гарантировано установить значения высоты и ширины строк в значения «по умолчанию»

7. Свойство UsedRange

Возвращает диапазон занятых ячеек листа. Свойство очень удобно использовать, когда необходимо узнать количество занятых строк и столбцов на листе:

и далее, используя эти данные быстро прочитать весь занятый диапазон в вариантный массив для дальнейшей обработки.

Это свойство возвращает коллекцию комментариев на листе.

удалит второй комментарий из коллекции, а:

добавит в ячейку е5 новый комментарий.

Итак, резюмируем. Сегодня мы узнали: как записать данные в ячейку листа Excel, как прочитать данные из диапазона ячеек, как скопировать таблицу из Delphi в Excel, как быстро экспортировать данные из Excel в Delphi.

В следующий раз займемся работой с ячейками листа, а именно научимся копировать таблицы из Delphi в Excel один-к-одному с сохранением всех цветов, границ ячеек и т.д., а также, попробуем строить диаграммы, которые опять же очень часто требуются при разработке бизнес-приложений.

Чтобы формировать вид документа в процессе его создания, недостаточно только функций записи информации в ячейки, необходимо также изменять ее визуальные параметры. Самое простое, с чего можно начать, — изменение ширины столбцов и высоты строк. Доступ к ширине столбцов можно получить, используя коллекцию Columns. Используя номер колонки в буквенном или числовом формате и свойство коллекции ColumnWidth, можно изменить ширину столбца или назначить ее. Определенная ниже функция, реализованная на Delphi, устанавливает ширину столбца.

Function SetColumnWidth (sheet:variant;

Для определения ширины столбца используйте следующий оператор: w >

Доступ к высоте строк можно получить, используя коллекцию Rows. Назначая номер строки и свойство коллекции RowHeight, можно изменить высоту строки или назначить ее. Определенная ниже функция, реализованная на Delphi, устанавливает высоту строки.

Function SetRowHeight (sheet:variant;row:variant;

We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept”, you consent to the use of ALL the cookies.

Cookie Duration Description
cookielawinfo-checkbox-analytics 11 months This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category «Analytics».
cookielawinfo-checkbox-functional 11 months The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category «Functional».
cookielawinfo-checkbox-necessary 11 months This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category «Necessary».
cookielawinfo-checkbox-others 11 months This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category «Other.
cookielawinfo-checkbox-performance 11 months This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category «Performance».
viewed_cookie_policy 11 months The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data.


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

Новости ·
Фриланс ·
FAQ

Правила ·
Помощь ·
Рейтинг ·
Избранное ·
Поиск ·
Участники

Форум -> Программирование -> Delphi, Kylix and Pascal -> Delphi: ActiveX/СОМ/CORBA
(еще)

Модераторы: MetalFan

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> Как высоту строки в Excel задать? Как высоту строки в Excel задать? 

:(

   

Опции темы

Lianamir
Дата 9.9.2007, 22:14 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 63
Регистрация: 8.9.2007

Репутация: нет
Всего: нет

Исправте плиз, то здесь не так???

Код

Rows[1].RowHeight:=12;

PM MAIL ICQ   Вверх
_hunter
Дата 10.9.2007, 10:55 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 2
Всего: 98

чтобы понять что здесь не так нужно выполнить несколько простых действий:
записать в excel’е макрос (во время записи макроса изменяем высоту какой-то строки) и посмотреть как это выглядит в VB. потом этот VB-шный код переводим на delphi.

———————

Tempora mutantur, et nos mutamur in illis…

PM ICQ   Вверх
Akella
  Дата 19.5.2009, 13:40 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Творец
****

Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 2
Всего: 329

http://forum.vingrad.ru/index.php?showtopi…t&p=1871967

Код
XLApp.Rows(1,1).RowHeight := 15

http://forum.vingrad.ru/forum/topic-84634/…ry651633/0.html

Код
ExcelApplication1.Range['A1','A5'].Rows.RowHeight:=24;

PM MAIL   Вверх



















Ответ в темуСоздание новой темы
Создание опроса
Правила форума «Delphi: ActiveX/СОМ/CORBA»

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »

Подписаться на тему |
Подписка на этот форум |
Скачать/Распечатать тему

[ Время генерации скрипта: 0.1139 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]

Реклама на сайте
   
Информационное спонсорство

    procedure ExportToExcel(var ASheetRef: Variant);

    function GetCol(Col: integer): String;

    begin

      if Col<27 then

        Result := Chr(Col+64)

      else

        Result := Chr((Col div 26)+64)+ Chr((Col mod 26)+64)

    end;

    //function CellsToRange(Row1, Col1: Integer): String; overload;

    //var

    //  S : String;

    //begin

    //  S := GetCol(Col1)+IntToStr(Row1);

    //  Result := S;

    //end;

    function CellsToRange(Row1, Col1, Row2, Col2: Integer): String; overload;

    var

      S : String;

    begin

      S := GetCol(Col1)+IntToStr(Row1)+’:’+ GetCol(Col2)+ IntToStr(Row2);

      Result := S;

    end;

    procedure ExportTextView(var ASheetRef: Variant);

    const

        EXCEL_COL_ITEMS_WIDTH       = 40; //width of first column (with items)

        EXCEL_COL_CODE_WIDTH        = 5; //width of second column (with codes of items)

        EXCEL_COL_DATA_WIDTH        = 11;  //width of columns with data

        EXCEL_ROW_HEADLINES_HEIGHT  = 40; //height of columns with headlines

        EXCEL_ROW_TWO_LINES_HEIGHT  = 26; //height of cells with two lines of text

        EXCEL_DEFAULT_ROW_HEIGHT    = 13;

        VERTICAL_TOP_ALIGNMENT      = 1;

        HORIZONTAL_CENTER_ALIGNMENT = 3;

        HORIZONTAL_LEFT_ALIGNMENT   = 2;

        EXCEL_FONT_NAME = ‘Arial’;

        EXCEL_FONT_SIZE = 10;

        DATA_FORMAT     = ‘# ###,0;(# ###,0);0,0’;

    var

        RowRef,

        ColRef:           Variant;

    begin

        //set number format

        ASheetRef.Range[CellsToRange(5,3,45,PeriodCount + 2)].NumberFormat:=DATA_FORMAT;

        ASheetRef.Range[CellsToRange(50,3,86,PeriodCount + 2)].NumberFormat:=DATA_FORMAT;

        //set columns widths, firstly for all columns in the range

        ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].ColumnWidth:=EXCEL_COL_DATA_WIDTH;

        //then for some

        ColRef:=ASheetRef.Columns;

        ColRef.Columns[1].ColumnWidth:=EXCEL_COL_ITEMS_WIDTH;

        ColRef.Columns[2].ColumnWidth:=EXCEL_COL_CODE_WIDTH;

        //set rows height, firstly for all rows

        ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].RowHeight:=EXCEL_DEFAULT_ROW_HEIGHT;

        //then for some

        RowRef:=ASheetRef.Rows;

        RowRef.Rows[1].RowHeight:=EXCEL_ROW_HEADLINES_HEIGHT;

        RowRef.Rows[47].RowHeight:=EXCEL_ROW_HEADLINES_HEIGHT;

        RowRef.Rows[14].RowHeight:=EXCEL_ROW_TWO_LINES_HEIGHT;

        RowRef.Rows[28].RowHeight:=EXCEL_ROW_TWO_LINES_HEIGHT;

        RowRef.Rows[59].RowHeight:=EXCEL_ROW_TWO_LINES_HEIGHT;

        RowRef.Rows[72].RowHeight:=EXCEL_ROW_TWO_LINES_HEIGHT;

        RowRef.Rows[74].RowHeight:=EXCEL_ROW_TWO_LINES_HEIGHT;

        //set font

        ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Font.Name:=EXCEL_FONT_NAME;

        ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Font.Size:=EXCEL_FONT_SIZE;

        RowRef.Rows[1].Font.Bold:= True;

        RowRef.Rows[3].Font.Bold:= True;

        RowRef.Rows[19].Font.Bold:= True;

        RowRef.Rows[20].Font.Bold:= True;

        RowRef.Rows[43].Font.Bold:= True;

        RowRef.Rows[44].Font.Bold:= True;

        RowRef.Rows[45].Font.Bold:= True;

        RowRef.Rows[47].Font.Bold:= True;

        RowRef.Rows[49].Font.Bold:= True;

        RowRef.Rows[58].Font.Bold:= True;

        RowRef.Rows[59].Font.Bold:= True;

        RowRef.Rows[63].Font.Bold:= True;

        RowRef.Rows[64].Font.Bold:= True;

        RowRef.Rows[69].Font.Bold:= True;

        RowRef.Rows[70].Font.Bold:= True;

        RowRef.Rows[84].Font.Bold:= True;

        RowRef.Rows[85].Font.Bold:= True;

        RowRef.Rows[86].Font.Bold:= True;

        ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].WrapText:=true;

        //set alignments

        ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT;

        ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].VerticalAlignment:=VERTICAL_TOP_ALIGNMENT;

        ASheetRef.Range[‘A1:A86’].HorizontalAlignment:=HORIZONTAL_LEFT_ALIGNMENT;

        ASheetRef.Range[‘A1:A3’].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT;

        ASheetRef.Cells[20,1].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT;

        ASheetRef.Cells[44,1].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT;

        ASheetRef.Cells[47,1].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT;

        ASheetRef.Cells[48,1].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT;

        ASheetRef.Cells[49,1].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT;

        ASheetRef.Cells[59,1].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT;

        ASheetRef.Cells[64,1].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT;

        ASheetRef.Cells[70,1].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT;

        ASheetRef.Cells[85,1].HorizontalAlignment:=HORIZONTAL_CENTER_ALIGNMENT;

    end;//ExportBalView

    //draws borders of cells;

    procedure DrawCellBorders(var ASheetRef: Variant);

    const

        EDGE_LEFT      = 7;

        EDGE_TOP       = 8;

        EDGE_BOTTOM    = 9;

        EDGE_RIGHT     = 10;

        INNER_VERTICAL = 11;

        INNER_HOR      = 12;

        LINE_STYLE     = 1;

        LINE_WIDTH     = 2;

    begin

        ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Borders[INNER_VERTICAL].Weight:=LINE_WIDTH;

        ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Borders[INNER_VERTICAL].LineStyle:=LINE_STYLE;

        ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Borders[INNER_HOR].Weight:=LINE_WIDTH;

        ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Borders[INNER_HOR].LineStyle:=LINE_STYLE;

        ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Borders[EDGE_TOP].Weight:=LINE_WIDTH;

        ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Borders[EDGE_BOTTOM].LineStyle:=LINE_STYLE;

        ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Borders[EDGE_LEFT].Weight:=LINE_WIDTH;

        ASheetRef.Range[CellsToRange(1,1,86,PeriodCount + 2)].Borders[EDGE_RIGHT].LineStyle:=LINE_STYLE;

    end;//DrawCellBorders

    begin

        try

            ASheetRef.Name:=’Name’;

            ExportTextView(ASheetRef);

            DrawCellBorders(ASheetRef);

        except

            ShowMessage(‘Error’);

        end;

    end;

Like this post? Please share to your friends:
  • Delphi выделить текст в word
  • Delphi работа с excel скачать
  • Delphi выгрузка в word
  • Delphi работа с excel лист
  • Delphi вывод таблицы в word