Einzelnen Beitrag anzeigen

SearchBot

Registriert seit: 27. Jun 2004
Ort: N-W vom Bodensee
272 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Unterschied zw. Excel 2010 und 2013 ?

  Alt 1. Apr 2015, 11:54
Hallo und sorry, daß ich erst jetzt antworte, hatte noch was anderes zu bearbeiten
Sorry auch für keinen-Einblick, ich hatte beim Frage-stellen meinen Quelltext nicht parat

Es geht darum, die Spalten auszulesen und in ein Grid zur Weiterverwendung zu kopieren.

Delphi-Quellcode:
procedure TForm1.bt_ExcelConvertClick(Sender: TObject);
//http://www.swissdelphicenter.ch/de/showcode.php?id=156
Const
  xlCellTypeLastCell = $0000000B;
  xlUp = 3;
  xlTextWindows=20;

var
  ColumnRange: OleVariant;
  ExcelApp, Sheet: OleVariant;
  Matrix: Variant;
  ex:TSortGrid;
  x,y,i:integer;
  clip:TClipBoard;
  ExRan:boolean; //lief Excel zuvor? Dann nicht schließen!

function OpenExcel(filename:string):integer; //Rückgabe: Anzahl Zeilen
begin
  try
   ExcelApp.Workbooks.Open(Filename);

   Sheet:=ExcelApp.Workbooks[1].WorkSheets[1];
   Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
    // Get the value of the last row
   result := ExcelApp.ActiveCell.Row;
  except
   result:=0;
  end;
end;

begin
  { Start Excel }
  Memo1.Lines.Add('Kontaktiere Excel...');
  try
    ExcelApp := GetActiveOleObject('Excel.Application');
    ExRan:=true;
  except
    ExRan:=false;
    try
      ExcelApp := CreateOleObject('Excel.Application');
    except
      Memo1.Lines.Add('...gescheitert.');
      ShowMessage(ExcelNichtDa);
      ExcelStatus:=0;
      Exit;
    end;
  end;
  Memo1.Lines.Add('...erfolgreich!'#13);
   ExcelStatus:=2;

   ex:=TSortGrid.createParented(Form1.Handle);

{...}
       x:=OpenExcel(edit1.Text);

       if x>0 then begin
        ex.RowCount := x;
        ex.ColCount := 5;

        clip:=TClipBoard.Create;
        Memo1.Lines.Add('Extrahiere Daten...');
        ExcelApp.Range['A1','A1'].EntireRow.Delete(xlUp);

        for I := 1 to ex.ColCount do begin
         ExcelApp.Range[chr(ord('A')+(i-1))+inttostr(i),chr(ord('A')+(i-1))+inttostr(i)].EntireColumn.Copy(EmptyParam);
         ex.Cols[i-1].text:=Clip.asText;
         Application.ProcessMessages;
        end;
{...}
       end else showError; //also Tabelle hat keinen Inhalt, blabla
Das Problem müsste also im OpenExcel stecken, weil bei Version 2010 gehts, bei Version 2013 nicht (zumindest am Zielrechner ist das so).
  Mit Zitat antworten Zitat