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).