Avatar billede bonzai Nybegynder
10. december 2004 - 15:35 Der er 6 kommentarer og
1 løsning

Dato format ved eksport til Excel

Jeg har et problem, når jeg gemmer data fra Delphi over i en Excel-fil (jeg bruger en speciel tredjeparts komponent til dette), sættes alle data til standardformat.
Er der nogen der ved eller kender til en måde, hvorpå man kan få det rigtige format over i Excel?
F.eks. hvis jeg har et datofelt i Delphi, så skulle det også gerne vises som datoformat i Excel.

På forhånd mange tak for hjælpen ;o)
Avatar billede delphi Nybegynder
11. december 2004 - 01:21 #1
For det første: Søg selv informationen via Google.  Første link når du søger på "Delphi Excel Automation" giver som første link resultatet http://community.borland.com/article/0,1410,10126,00.html
Dette link giver svaret - i hvert fald for Delphi 3. 
Desuden er der et hel nyheds gruppe til egnet netop dette spørgsmål: borland.public.delphi.oleautomation

For det andet: Hvilken Delphi version benytter du?  De seneste versioner har mere udbyggede muligheder for det du ønsker.Delphi 7 har således et "Server" faneblad med en hel stak VCL komponenter der bl.a. kan det du søger.  Start med TExcelApplication - søg på Google efter info vedr. denne.  Du vil på et eller andet tidspunkt finde referencer til Deborah Pathes website.  Hun har bl.a. et site vedr Excel automation (http://www.djpate.freeserve.co.uk/AutoExcl.htm) samt et demo project som du kan finde referencen til på denne side.

Mere specifikt svar på dit spørgsmål:
>>>>>How to format a range<<<<<
Assuming a _Worksheet variable, WS:

  var
    Format: OleVariant;
  ...
    WS := Excel.ActiveSheet as _Worksheet;

To format one cell in the General number style
    Format := 'General';
    WS.Range['A1', 'A1'].NumberFormat := Format;

To format a range in the 'Text' style, aligned right
Weirdly enough, to give a range a 'text' style you have to set its NumberFormat property to '@':

  with WS.Range['A1', 'M10'] do
  begin
    NumberFormat := '@';
    HorizontalAlignment := xlHAlignRight;
  end;

To format a range of cells with the 'March 4, 1999' date style
    Format := 'mmmm d, yyyy';
    WS.Range['B1', 'C10'].NumberFormat := Format;

To format an entire column in a customized currency style
    Format := '$#,##0.00_);[Red]($#,##0.00)';
    WkSheet.Range['C1', 'C1'].EntireColumn.NumberFormat := Format;

To set the text in a cell to 20pt Arial, bold, and fuchsia
    with Excel.ActiveCell.Font do
    begin
      Size := 20;
      FontStyle := 'Bold';
      Color := clFuchsia;
      Name := 'Arial';
    end;

To change the cell's colour

    Excel.ActiveCell.Interior.Color := clBtnFace;
or
    Excel.Range['B2', 'C6'].Interior.Color := RGB(223, 123, 123);
To make the first three characters in a cell bold
  var
    Start, Length: OleVariant;
  ...
    Start := 1;
    Length := 3;
    Excel.ActiveCell.Characters[Start, Length].Font.FontStyle := 'Bold';
    Start := 4;
    Length := 16;
    Excel.ActiveCell.Characters[Start, Length].Font.FontStyle := 'Regular';
Avatar billede bonzai Nybegynder
13. december 2004 - 11:44 #2
Tak for svaret ;o)
Problemet er dog ikke helt løst endnu.
Mit datofelt bliver godt nok vist som datoformat i Excel, men alligevel ikke helt, for jeg skal først ind i formellinjen og stå med musemarkøren, før end datoen bliver set som en dato (bla. når jeg skal lave grafer o.lign.).
Avatar billede bonzai Nybegynder
13. december 2004 - 11:48 #3
Jeg bruger i øvrigt Delphi 5
Avatar billede bonzai Nybegynder
13. december 2004 - 11:52 #4
Jeg har fundet frem til en funktion (til Excel Worksheet) der hedder formula, men jeg ved ikke lige, om det er den jeg skal bruge til formålet? Eller hvordan jeg skal bruge den, hvis det er?
Avatar billede delphi Nybegynder
14. december 2004 - 07:27 #5
;o) kan nærmest oversættes med Båt-tud / båtnakke.  Hvad mener du med det?
Avatar billede delphi Nybegynder
14. december 2004 - 07:29 #6
Vedr. formula: Jeg kan ikke svare på det spørgsmål direkte uden at have kigget på det, hvilket jeg ihvertfald ikke lige i dag har tiden til....
Avatar billede bonzai Nybegynder
17. december 2004 - 08:28 #7
Jeg løste selv problemet, selvom du godt nok ledte mig på rette vej ;o)

Jeg gjorde følgende:
  strDato := FormatDateTime('dd-mm-yyyy', Dato);
  strTid  := FormatDateTime('hh-nn-ss', Dato);
  format  := 'dd-mm-yy'+' '+'hh:mm:ss;@';
  formula := 'Datevalue("'+strDato+'")+Timevalue("'+strTid+'");

... og så undlader jeg selvfølgelig at sætte value til en værdi!

På den måde kan Excel se, at det er et datoformat når jeg vil lave en graf :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester