Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / StringGrid to Excel. Cell width?!?! / 4 сообщений из 4, страница 1 из 1
12.09.2003, 09:12
    #32263163
SOUND
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringGrid to Excel. Cell width?!?!
Привет.

При сохранении StringGrid'a в Excel,
есть ли возможность установить размер ячейки?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
 XLApp  := CreateOleObject('Excel.Application');
  try
    XLApp.Visible := False;
    XLApp.Workbooks.Add(xlWBatWorkSheet);
    Sheet      := XLApp.Workbooks[ 1 ].WorkSheets[ 1 ];
    Sheet.Name := 'Àíàëèòèêà';
    Sheet.Cells[ 1 ,  3 ] :=   'Îò÷åò';
    for col :=  0  to   stringGrid.ColCount -  1  do
      for row :=  0  to   stringGrid.RowCount -  1  do
        Sheet.Cells[row +  4 , col+ 1 ] :=   stringGrid.Cells[col, row];
    try
      XLApp.Workbooks[ 1 ].SaveAs(FileName);
      Result := True;
    except
    end;
  finally
    if not VarIsEmpty(XLApp) then
    begin
      XLApp.DisplayAlerts := False;
      XLApp.Visible := True;
//      XLApp.Quit;
//      XLAPP := Unassigned;
//      Sheet := Unassigned;
    end;


Должно же быть у WorkSheet'a свойство, которое задаёт ширину столбцов!!!

П.С.
Размер грида не очень большой поэтому использую цикл, а не range.
потом может перепишу.
...
Рейтинг: 0 / 0
12.09.2003, 09:39
    #32263203
Артем1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringGrid to Excel. Cell width?!?!
Код: plaintext
Sheet.Columns.Column[ 0 ].Width 
должно же быть у Excel
За синтаксис не ручаюсь, но точно помню, что есть что-то типа такого
...
Рейтинг: 0 / 0
12.09.2003, 10:44
    #32263299
koff4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringGrid to Excel. Cell width?!?!
Для Range имеется еще и ColumnWidth, что то вроде:
FExcelWorksheet.Range[StrCell,StrCell].ColumnWidth :=

Единственная неприятность - ширина указывается в знаках, а у StringGrid она в пикселях. Для этого я написал вот такую штуку:

Код: plaintext
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.
 // Преобразование ширины колонки из пикселей в число символов
  function GetDispWidth(pWidth: Integer): Integer;
  var
    DC: HDC;
    SaveFont: HFont;
    TM: TTextMetric;
    RestoreCanvas: Boolean;
    TmpInt1, TmpInt2: Integer;
  begin
     Result :=  10 ;

    with DBGrid do
    begin
        RestoreCanvas := not HandleAllocated;
        if RestoreCanvas then
          Cаnvas.Handle := GetDC( 0 );
        try
          Canvas.Font := Font;
          GetTextMetrics(Canvas.Handle, TM);
          //Предотвращение Floating Point Exception
          Result :=  Round((pWidth - TM.tmOverhang -  4 ));
          Result :=  Round((Canvas.TextWidth('0') - TM.tmOverhang));
          //
          Result :=  10 ;
          Result :=  Round( (pWidth - TM.tmOverhang -  4 ) / (Canvas.TextWidth('0') - TM.tmOverhang) );
        finally
          if RestoreCanvas then begin
            ReleaseDC( 0 ,Canvas.Handle);
            Canvas.Handle :=  0 ;
          end;
        end;
    end;
  end;


Может пригодится.
...
Рейтинг: 0 / 0
12.09.2003, 11:04
    #32263334
SOUND
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringGrid to Excel. Cell width?!?!
Решил задачу.

Добавил такую строчку: Sheet.Columns[ColNumber].ColumnWidth := ColumnSize;

Большое спасибо за ответы!
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / StringGrid to Excel. Cell width?!?! / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]