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

При сохранении 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
StringGrid to Excel. Cell width?!?!
    #32263203
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Sheet.Columns.Column[ 0 ].Width 
должно же быть у Excel
За синтаксис не ручаюсь, но точно помню, что есть что-то типа такого
...
Рейтинг: 0 / 0
StringGrid to Excel. Cell width?!?!
    #32263299
koff4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для 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
StringGrid to Excel. Cell width?!?!
    #32263334
SOUND
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил задачу.

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

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


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