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

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2007, 22:39   #11
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию

Alter, спасибо! С Вашей помощью получилось нечто похожее на то, что я хотела!
У меня еще такой вопрос. Точнее, два вопроса.
Первый. Можно ли сохранять данные из СтрингГрида в Exel так, чтобы они распределялись по ячейкам. А то у меня все сохраняется в одну ячейку.
И второй. Можно ли сохранять форму вместе со всеми данными. Т.е. если в СтрингГриде 200 строк, то чтобы все они были видны. Или сразу в таком виде отправлять на печать. Если такое можно сделать, то первый вопрос можно не рассматривать.
Спасибо еще раз!
If you wanna make the world a better place take a look at yourself and then make a change!
monushka вне форума Ответить с цитированием
Старый 05.11.2007, 23:41   #12
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
По умолчанию Сохранять данные из StringGrid1 в Exel

Код:
{ With OLE Automation }
uses
  ComObj;
function RefToCell(ARow, ACol: Integer): string;
begin
  Result := Chr(Ord('A') + ACol - 1) + IntToStr(ARow);
end;

function SaveAsExcelFile(AGrid: TStringGrid; ASheetName, AFileName: string): Boolean;
const
 xlWBATWorksheet = -4167;
var
  Row, Col: Integer;
  GridPrevFile: string;
  XLApp, Sheet, Data: OLEVariant;
  i, j: Integer;
begin
  // Prepare Data 
Data := VarArrayCreate([1, AGrid.RowCount, 1, AGrid.ColCount], varVariant);
  for i := 0 to AGrid.ColCount - 1 do
    for j := 0 to AGrid.RowCount - 1 do
      Data[j + 1, i + 1] := AGrid.Cells[i, j];
  // Create Excel-OLE Object 
Result := False;
  XLApp := CreateOleObject('Excel.Application');
  try
    // Hide Excel 
   XLApp.Visible := False;
    // Add new Workbook 
   XLApp.Workbooks.Add(xlWBatWorkSheet);
    Sheet := XLApp.Workbooks[1].WorkSheets[1];
    Sheet.Name := ASheetName;
    // Fill up the sheet 
   Sheet.Range[RefToCell(1, 1), RefToCell(AGrid.RowCount,
      AGrid.ColCount)].Value := Data;
    // Save Excel Worksheet 
   try
      XLApp.Workbooks[1].SaveAs(AFileName);
      Result := True;
    except
      // Error ? 
   end;
  finally
    // Quit Excel 
   if not VarIsEmpty(XLApp) then
    begin
      XLApp.DisplayAlerts := False;
      XLApp.Quit;
      XLAPP := Unassigned;
      Sheet := Unassigned;
    end;
  end;
end;
 
// Example: 
procedure TForm1.Button1Click(Sender: TObject);
begin
if SaveAsExcelFile(stringGrid1,'My Stringgrid Data','c:\MyExcelFile.xls') then
    ShowMessage('StringGrid saved!');
end;
Поиск по Google рулит
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума Ответить с цитированием
Старый 05.11.2007, 23:44   #13
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
По умолчанию Печать StringGrid

Код:
procedure PrintGrid(sGrid: TStringGrid;
left_StandOff,top_StandOff:integer; sTitle: string);
var
X1, X2,PixelsX,PrinterCoordX: Integer;
Y1, Y2,PixelsY,PrinterCoordY: Integer;
I: Integer;
F: Integer;
TR: TRect;
begin
{ left_StandOff - отступ в миллиметрах слева от края листа
top_StandOff - отступ в миллиметрах сверху от края листа
PrinterCoordX и PrinterCoordY - тот же отступ только в пикселах
Высота строк и ширина столбцов взяты соответственно 150 и 400,
при желании их размер можно передать в процедуру как параметры
}
//получаем информацию о разрешении принтера
PixelsX:=GetDeviceCaps(printer.Handle,LogPixelsX);//разрешение по Х
PixelsY:=GetDeviceCaps(printer.Handle,LogPixelsY);//разрешение по Y
PrinterCoordX:=round(PixelsX/25.4*left_StandOff);//переводим мм в  и ксели
PrinterCoordY:=round(PixelsY/25.4*top_StandOff); //---
with printer do
begin
//Печатаем заголовок таблицы
Title := sTitle;
BeginDoc; // Начало печати
Canvas.Pen.Color := 0; // цвет-чёрный
Canvas.Font.Name := 'verdana'; // шрифт
Canvas.Font.Size := 10; // размер шрифта
Canvas.Font.Style := [];
//Текс заголовка в заданных координатах
Canvas.TextOut(PrinterCoordX, PrinterCoordY-100-
printer.Canvas.Font.Size*10, Printer.Title);
Canvas.Pen.Color := 0;
Canvas.Font.Name := 'Verdana';
Canvas.Font.Size := 8; 
end;
for i:=0 to sgrid.colcount-1 do //перебираем столбцы
for f:=0 to sgrid.rowcount-1 do //перебираем в столбце все строки
begin
X1 := PrinterCoordX+i*400; //400-это ширина столбца
X2 := PrinterCoordX+400+i*400; //тоже
Y1:=PrinterCoordY+f*150; //150-высота строки
y2:=PrinterCoordY+150+f*150; //тоже
TR:=Rect(x1,y1,x2,y2);
with printer do
begin
Canvas.MoveTo(x1,y1);//Двигаем рисовалку в верхний левый угол таблицы
{пишем надпись в квадрате(ячейке) i-столбеца и f-строки со сдвигом
от верха на Y+50 и со сдвигом от левого края колонки на X+50
}
Canvas.TextRect(TR, X1 + 50, Y1 + 50, sGrid.Cells[i,f]);
//рисуем линии ячейки
Canvas.LineTo(x1,y2);
Canvas.LineTo(x2,y2);
Canvas.LineTo(x2,y1);
Canvas.LineTo(x1,y1);
end;
end;
Printer.EndDoc; // конец печати
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
PrintGrid(StringGrid1,20,20, 'Таблица1: "Название"');
end;
Поиск по Google рулит
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос данніх в зависимости от цвета ячейки gavrylyuk Microsoft Office Excel 8 08.08.2008 19:11
Помогите сцепить ячейки с определенным условием 7erge Microsoft Office Excel 4 23.07.2008 09:47
Изобразить на экране правильный многоугольник, стороны которого окрашены в разные цвета, совершающий внут Sashka Помощь студентам 3 31.01.2008 12:02
смена цвета ячейки если... zetrix Microsoft Office Excel 0 30.10.2006 19:06