| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | Excel celle farve Fra : Hans Nikolajsen | 
  Dato :  18-10-08 11:03 |  
  |   
            Hej alle!
 
 Jeg bruger Delphi 7.
 
 Jeg har lavet et program der laver et regneark.
 Jeg kan ikke finde ud af at få Delphi 7 til at ændre farven på bestemt 
 celler.
 Nogen der har et forslag????
 
 Programmet:
 **********************************************************************************************************************
 
 unit Unit1;
 
 interface
 
 uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs,DateUtils, StdCtrls, Grids, ComObj;
 
 type
   TForm1 = class(TForm)
     StringGrid1: TStringGrid;
     Edit1: TEdit;
     // Indtast årstal.
     Edit2: TEdit;
     // Indtast initialer.
     Button1: TButton;
      // Startsknap.
     Label1: TLabel;
      // Caption årstal.
     Label2: TLabel;
      // Caption initialer.
 
     procedure FormCreate(Sender: TObject);
     procedure Button1Click(Sender: TObject);
 
   private
     { Private declarations }
   public
     { Public declarations }
   end;
 
 var
   Form1: TForm1;
    myDate : TDateTime;
    day    : array[1..7] of string;
    N, R, aar, Taeller, skud, dagensnavn :integer;
    X:string;
 
 implementation
 
 {$R *.dfm}
 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
   Edit1.Clear;
   Edit2.Clear;
   for R := 1 to 8 do
   stringgrid1.Cells[0,0]:='Dato';
   stringgrid1.Cells[1,0]:='Dag';
   stringgrid1.Cells[2,0]:='Komme';
   stringgrid1.Cells[3,0]:='Gå';
   stringgrid1.Cells[4,0]:='Flex';
   stringgrid1.Cells[5,0]:='Flex i alt';
    stringgrid1.Cells[6,0]:='Ferie';
 end;
 
 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;
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
   Taeller:=0;
   dagensnavn:=0;
   aar := strtoint(edit1.Text);
   day[1] := 'Mandag';
   day[2] := 'Tirsdag';
   day[3] := 'Onsdag';
   day[4] := 'Torsdag';
   day[5] := 'Fredag';
   day[6] := 'Lørdag';
   day[7] := 'Søndag';
   myDate := EncodeDate(aar, 1, 1);
   dagensnavn:= DayOfTheWeek(myDate);
   skud := 365;
   if DateToStr(mydate+59) = '29-02-'+edit1.Text then skud := 366;
   for Taeller:= 1 to skud do
    begin
      X:='=HVIS(D'+inttostr(Taeller+1)+'*24>12,5;HVIS(C'+inttostr(Taeller+1)+'<>0;(D'+inttostr(Taeller+1)+'-C'+inttostr(Taeller+1)+')*24-7,9;-7,4);HVIS(C'+inttostr(Taeller+1)+'<>0;(D'+inttostr(Taeller+1)+'-C'+inttostr(Taeller+1)+')*24-7,4;-7,4))';
 
     // 
 =HVIS(D2*24>12,5;HVIS(C2<>0;(D2-C2)*24-7,9;-7,4);HVIS(C2<>0;(D2-C2)*24-7,4;-7,4))
 
      if dagensnavn = 6 then X:='';
      if dagensnavn = 7 then X:='';
      stringgrid1.Cells[0,Taeller]:=DateToStr(mydate+Taeller-1); //dato
      stringgrid1.Cells[1,Taeller]:=day[dagensnavn]; //dagnavn
      stringgrid1.Cells[4,Taeller]:= X; //Flex formel
      stringgrid1.Cells[5,Taeller]:= 
 '=F'+inttostr(Taeller)+'+E'+inttostr(Taeller+1) ; //Flex I alt
      inc(dagensnavn);
      if dagensnavn= 8 then dagensnavn:=1;
    end;
   stringgrid1.Cells[5,1]:= '';
 
   if SaveAsExcelFile(stringGrid1, edit2.Text+' '+inttostr(aar)+' Flex',
     'c:\'+edit2.Text+' '+inttostr(aar)+' Flex'+'.xls') then
     ShowMessage('Regnearket er gemt som '+ 'c:\'+edit2.Text+' 
 '+inttostr(aar)+' Flex'+'.xls');
   Application.Terminate;
 end;
 end.
 
 **********************************************************************************************************************
 
 -- 
 --
 Mvh
 Hans Nikolajsen 
 
  
            
             |   |   
            
        
 
            
         
           willowcroft@sol.dk (19-10-2008) 
         
	
            | Kommentar Fra : willowcroft@sol.dk | 
  Dato :  19-10-08 09:23 |  
  |   
            
 Med TStringGrid skal du farve cellerne ”manuelt” i OnDrawCell.
 
 F.eks. på denne måde:
 
 
   if (ARow = 2) and (ACol mod 2 = 1) then
   begin
     with sgStatisticsSystem.Canvas do
     begin
       Brush.Color := clRed;
       FillRect(Rect);
       //Font.Color := sgStatisticsSystem.Font.Color;
       TextOut(Rect.Left + 4, Rect.Top + 5,
 sgStatisticsSystem.Cells[ACol, ARow]);
     end;
   end;
 
 
 
 Med TExtStringGrid delphi.icm.edu.pl/ftp/d50free/EGrid.zip er der
 indbygget lettere metoder (men desværre ikke helt uden fejl). Der skal
 lige bruges et minut på at få den til at virke i D7.
 
 Hvis nogen kender lettere metoder eller bedre komponenter er jeg meget
 interesseret i at få det at vide.
 
 - Esben
 
 
 
 
 On 18 Okt., 12:03, "Hans Nikolajsen" <hansnikolaj...@msn.com> wrote:
 > Hej alle!
 >
 > Jeg bruger Delphi 7.
 >
 > Jeg har lavet et program der laver et regneark.
 > Jeg kan ikke finde ud af at få Delphi 7 til at ændre farven på bestemt
 > celler.
 > Nogen der har et forslag????
 >
 > Programmet:
 > **********************************************************************************************************************
 >
 > unit Unit1;
 >
 > interface
 >
 > uses
 >   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 >   Dialogs,DateUtils, StdCtrls, Grids, ComObj;
 >
 > type
 >   TForm1 = class(TForm)
 >     StringGrid1: TStringGrid;
 >     Edit1: TEdit;
 >     // Indtast årstal.
 >     Edit2: TEdit;
 >     // Indtast initialer.
 >     Button1: TButton;
 >      // Startsknap.
 >     Label1: TLabel;
 >      // Caption årstal.
 >     Label2: TLabel;
 >      // Caption initialer.
 >
 >     procedure FormCreate(Sender: TObject);
 >     procedure Button1Click(Sender: TObject);
 >
 >   private
 >     { Private declarations }
 >   public
 >     { Public declarations }
 >   end;
 >
 > var
 >   Form1: TForm1;
 >    myDate : TDateTime;
 >    day    : array[1..7] of string;
 >    N, R, aar, Taeller, skud, dagensnavn :integer;
 >    X:string;
 >
 > implementation
 >
 > {$R *.dfm}
 >
 > procedure TForm1.FormCreate(Sender: TObject);
 > begin
 >   Edit1.Clear;
 >   Edit2.Clear;
 >   for R := 1 to 8 do
 >   stringgrid1.Cells[0,0]:='Dato';
 >   stringgrid1.Cells[1,0]:='Dag';
 >   stringgrid1.Cells[2,0]:='Komme';
 >   stringgrid1.Cells[3,0]:='Gå';
 >   stringgrid1.Cells[4,0]:='Flex';
 >   stringgrid1.Cells[5,0]:='Flex i alt';
 >    stringgrid1.Cells[6,0]:='Ferie';
 > end;
 >
 > 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;
 >
 > procedure TForm1.Button1Click(Sender: TObject);
 > begin
 >   Taeller:=0;
 >   dagensnavn:=0;
 >   aar := strtoint(edit1.Text);
 >   day[1] := 'Mandag';
 >   day[2] := 'Tirsdag';
 >   day[3] := 'Onsdag';
 >   day[4] := 'Torsdag';
 >   day[5] := 'Fredag';
 >   day[6] := 'Lørdag';
 >   day[7] := 'Søndag';
 >   myDate := EncodeDate(aar, 1, 1);
 >   dagensnavn:= DayOfTheWeek(myDate);
 >   skud := 365;
 >   if DateToStr(mydate+59) = '29-02-'+edit1.Text then skud := 366;
 >   for Taeller:= 1 to skud do
 >    begin
 >      X:='=HVIS(D'+inttostr(Taeller+1)+'*24>12,5;HVIS(C'+inttostr(Taeller+1)+'<>0;(D'+inttostr(Taeller+1)+'-C'+inttostr(Taeller+1)+')*24-7,9;-7,4);HVIS(C'+inttostr(Taeller+1)+'<>0;(D'+inttostr(Taeller+1)+'-C'+inttostr(Taeller+1)+')*24-7,4;-7,4))';
 >
 >     //
 > =HVIS(D2*24>12,5;HVIS(C2<>0;(D2-C2)*24-7,9;-7,4);HVIS(C2<>0;(D2-C2)*24-7,4;-7,4))
 >
 >      if dagensnavn = 6 then X:='';
 >      if dagensnavn = 7 then X:='';
 >      stringgrid1.Cells[0,Taeller]:=DateToStr(mydate+Taeller-1); //dato
 >      stringgrid1.Cells[1,Taeller]:=day[dagensnavn]; //dagnavn
 >      stringgrid1.Cells[4,Taeller]:= X; //Flex formel
 >      stringgrid1.Cells[5,Taeller]:=
 > '=F'+inttostr(Taeller)+'+E'+inttostr(Taeller+1) ; //Flex I alt
 >      inc(dagensnavn);
 >      if dagensnavn= 8 then dagensnavn:=1;
 >    end;
 >   stringgrid1.Cells[5,1]:= '';
 >
 >   if SaveAsExcelFile(stringGrid1, edit2.Text+' '+inttostr(aar)+' Flex',
 >     'c:\'+edit2.Text+' '+inttostr(aar)+' Flex'+'.xls') then
 >     ShowMessage('Regnearket er gemt som '+ 'c:\'+edit2.Text+'
 > '+inttostr(aar)+' Flex'+'.xls');
 >   Application.Terminate;
 > end;
 > end.
 >
 > **********************************************************************************************************************
 >
 > --
 > --
 > Mvh
 > Hans Nikolajsen
 
  
            
             |   |   
            
        
 
            
         
           Henning Madsen (01-12-2008) 
         
	
            | Kommentar Fra : Henning Madsen | 
  Dato :  01-12-08 15:28 |  
  |   
            
 <willowcroft@sol.dk> skrev i en meddelelse 
 news:12cd7612-7fd2-4194-972a-e54ac02f5f39@p59g2000hsd.googlegroups.com...
 
 Med TStringGrid skal du farve cellerne ”manuelt” i OnDrawCell.
 
 F.eks. på denne måde:
 
 
   if (ARow = 2) and (ACol mod 2 = 1) then
   begin
     with sgStatisticsSystem.Canvas do
     begin
       Brush.Color := clRed;
       FillRect(Rect);
       //Font.Color := sgStatisticsSystem.Font.Color;
       TextOut(Rect.Left + 4, Rect.Top + 5,
 sgStatisticsSystem.Cells[ACol, ARow]);
     end;
   end;
 
 
 
 Med TExtStringGrid delphi.icm.edu.pl/ftp/d50free/EGrid.zip er der
 indbygget lettere metoder (men desværre ikke helt uden fejl). Der skal
 lige bruges et minut på at få den til at virke i D7.
 
 Hvis nogen kender lettere metoder eller bedre komponenter er jeg meget
 interesseret i at få det at vide.
 
 - Esben
 
 
 
 
 On 18 Okt., 12:03, "Hans Nikolajsen" <hansnikolaj...@msn.com> wrote:
 > Hej alle!
 >
 > Jeg bruger Delphi 7.
 >
 > Jeg har lavet et program der laver et regneark.
 > Jeg kan ikke finde ud af at få Delphi 7 til at ændre farven på bestemt
 > celler.
 > Nogen der har et forslag????
 >
 > Programmet:
 > **********************************************************************************************************************
 >
 > unit Unit1;
 >
 > interface
 >
 > uses
 > Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 > Dialogs,DateUtils, StdCtrls, Grids, ComObj;
 >
 > type
 > TForm1 = class(TForm)
 > StringGrid1: TStringGrid;
 > Edit1: TEdit;
 > // Indtast årstal.
 > Edit2: TEdit;
 > // Indtast initialer.
 > Button1: TButton;
 > // Startsknap.
 > Label1: TLabel;
 > // Caption årstal.
 > Label2: TLabel;
 > // Caption initialer.
 >
 > procedure FormCreate(Sender: TObject);
 > procedure Button1Click(Sender: TObject);
 >
 > private
 > { Private declarations }
 > public
 > { Public declarations }
 > end;
 >
 > var
 > Form1: TForm1;
 > myDate : TDateTime;
 > day : array[1..7] of string;
 > N, R, aar, Taeller, skud, dagensnavn :integer;
 > X:string;
 >
 > implementation
 >
 > {$R *.dfm}
 >
 > procedure TForm1.FormCreate(Sender: TObject);
 > begin
 > Edit1.Clear;
 > Edit2.Clear;
 > for R := 1 to 8 do
 > stringgrid1.Cells[0,0]:='Dato';
 > stringgrid1.Cells[1,0]:='Dag';
 > stringgrid1.Cells[2,0]:='Komme';
 > stringgrid1.Cells[3,0]:='Gå';
 > stringgrid1.Cells[4,0]:='Flex';
 > stringgrid1.Cells[5,0]:='Flex i alt';
 > stringgrid1.Cells[6,0]:='Ferie';
 > end;
 >
 > 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;
 >
 > procedure TForm1.Button1Click(Sender: TObject);
 > begin
 > Taeller:=0;
 > dagensnavn:=0;
 > aar := strtoint(edit1.Text);
 > day[1] := 'Mandag';
 > day[2] := 'Tirsdag';
 > day[3] := 'Onsdag';
 > day[4] := 'Torsdag';
 > day[5] := 'Fredag';
 > day[6] := 'Lørdag';
 > day[7] := 'Søndag';
 > myDate := EncodeDate(aar, 1, 1);
 > dagensnavn:= DayOfTheWeek(myDate);
 > skud := 365;
 > if DateToStr(mydate+59) = '29-02-'+edit1.Text then skud := 366;
 > for Taeller:= 1 to skud do
 > begin
 > X:='=HVIS(D'+inttostr(Taeller+1)+'*24>12,5;HVIS(C'+inttostr(Taeller+1)+'<>0;(D'+inttostr(Taeller+1)+'-C'+inttostr(Taeller+1)+')*24-7,9;-7,4);HVIS(C'+inttostr(Taeller+1)+'<>0;(D'+inttostr(Taeller+1)+'-C'+inttostr(Taeller+1)+')*24-7,4;-7,4))';
 >
 > //
 > =HVIS(D2*24>12,5;HVIS(C2<>0;(D2-C2)*24-7,9;-7,4);HVIS(C2<>0;(D2-C2)*24-7,4;-7,4))
 >
 > if dagensnavn = 6 then X:='';
 > if dagensnavn = 7 then X:='';
 > stringgrid1.Cells[0,Taeller]:=DateToStr(mydate+Taeller-1); //dato
 > stringgrid1.Cells[1,Taeller]:=day[dagensnavn]; //dagnavn
 > stringgrid1.Cells[4,Taeller]:= X; //Flex formel
 > stringgrid1.Cells[5,Taeller]:=
 > '=F'+inttostr(Taeller)+'+E'+inttostr(Taeller+1) ; //Flex I alt
 > inc(dagensnavn);
 > if dagensnavn= 8 then dagensnavn:=1;
 > end;
 > stringgrid1.Cells[5,1]:= '';
 >
 > if SaveAsExcelFile(stringGrid1, edit2.Text+' '+inttostr(aar)+' Flex',
 > 'c:\'+edit2.Text+' '+inttostr(aar)+' Flex'+'.xls') then
 > ShowMessage('Regnearket er gemt som '+ 'c:\'+edit2.Text+'
 > '+inttostr(aar)+' Flex'+'.xls');
 > Application.Terminate;
 > end;
 > end.
 >
 > **********************************************************************************************************************
 >
 > --
 > --
 > Mvh
 > Hans Nikolajsen
 
 
 Hvis du kan bruge følge program løsning kan du få programeringen bagefter.
 På formen er anbragt en XStringGrid, som jeg varmt kan anbefal men tror ikke 
 det her er forskel på den og StringGrid.
 Når man klikker på den aktuelle Celle Kopieres cellens indhol til Edit3 nu 
 kan man i Edit3 skrive eller rette derefter klikker man på Radio Button 1 
 eller to for at vælge farve, her Sort eller Rød skrift derefter tryk på 
 Button 1 og vupsi den skrevne eller rettede skrift føres tilbage til den 
 celle der var aktuel med skriftfarven Sort eller Rød.
 NB Jeg bruger også Delphi 7
 Er det noget du kan bruge får du programmet bagefter.
 
 MVH Henning
 
 
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |