Einzelnen Beitrag anzeigen

hoika
Online

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#1

Excel, OLE, Formatierung beschleunigen

  Alt 19. Aug 2009, 09:55
Hallo,

nachdem ich ein StringGrid nach Excel exportiert habe,
will ich Zahlen auch als Zahl exportieren.

Problem: Das dauert ewig.

Der Code sieht wie folgt aus:

Delphi-Quellcode:
      DoubleColumnList:= TDoubleColumnList.Create;
      try
        Grid_GetDoubleColumns(AGrid, DoubleColumnList);

        sFormat:= 'Standard';

        for iDoubleColumnItem:= 0 to DoubleColumnList.Count-1 do
        begin
          DoubleColumnItem:= DoubleColumnList[iDoubleColumnItem];

          sRef_Start:= RefToCell(DoubleColumnItem.iCol+1, DoubleColumnItem.iRowStart+1);
          sRef_End := RefToCell(DoubleColumnItem.iCol+1, DoubleColumnItem.iRowEnd+1);

          bFormatError:= False;
          if sFormat<>'then
          begin
            try
              Sheet.Range[sRef_Start,sRef_End].NumberFormat:= sFormat;
            except
              bFormatError:= True;
            end;

            if bFormatError then
            begin
              bFormatError:= False;
              sFormat:= 'General';
              try
                Sheet.Range[sRef_Start,sRef_End].NumberFormat:= sFormat;
              except
                bFormatError:= True;
              end;

              if bFormatError then
              begin
                sFormat:= '';
              end;
            end;
          end;

          if bFormatError=False then
          begin
            for iRow:= DoubleColumnItem.iRowStart to DoubleColumnItem.iRowEnd do
            begin
              if TryStrToFloat(AGrid.Cells[DoubleColumnItem.iCol,iRow], dFloat) then
              begin
                sRef:= RefToCell(DoubleColumnItem.iCol+1, iRow+1);
                Sheet.Range[sRef,sRef].Value:= dFloat;
              end;
            end;
          end;
        end; { for iDoubleColumnItem:= 0 to DoubleColumnList.Count-1 do }
      finally
        DoubleColumnList.Free;
      end;
DoubleColumnList enthält eine Liste zusammenhängender Double-Bereiche
(spaltenbezogen, Spalte,Startzeile,Endzeile).
Das ganze drumrum (sFormat) hat mit den verschiedenen Excel-Versionen zu tun (u.a. 2007),
tut aber nix zur Sache.

Lange dauert es, wenn eine Spalte Lücken (z.B. leere Zellen) hat.
Dann gibt es hlt viele Bereiche, die formtiert werden müssen.
Gibt es keine Möglichkeit, mehrere Bereiche auf einmal zu formatieren ?

Hat jemand eine Idee ?

Danke


Heiko
Heiko
  Mit Zitat antworten Zitat