![]() |
Datenbank: MSSQL • Version: 8 • Zugriff über: ADO
excel tabsheet einlesen , OLE fehler
Liste der Anhänge anzeigen (Anzahl: 2)
ich möchte mit dieser Funktion (Quelle
![]() ein Excel Arbeitsblatt einlesen .
Delphi-Quellcode:
#1 :
function Xls_To_StringGrid(AGrid: TStringGrid; AXLSFile: string): Boolean;
const xlCellTypeLastCell = $0000000B; var XLApp, Sheet: OLEVariant; RangeMatrix: Variant; x, y, k, r: Integer; begin Result := False; // Create Excel-OLE Object XLApp := CreateOleObject('Excel.Application'); try // Hide Excel XLApp.Visible := False; // Open the Workbook XLApp.Workbooks.Open(AXLSFile); // Sheet := XLApp.Workbooks[1].WorkSheets[1]; Sheet := XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1]; // In order to know the dimension of the WorkSheet, i.e the number of rows // and the number of columns, we activate the last non-empty cell of it Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate; // Get the value of the last row x := XLApp.ActiveCell.Row; // Get the value of the last column y := XLApp.ActiveCell.Column; // Set Stringgrid's row &col dimensions. AGrid.RowCount := x; AGrid.ColCount := y; // Assign the Variant associated with the WorkSheet to the Delphi Variant RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value; // Define the loop for filling in the TStringGrid k := 1; repeat for r := 1 to y do AGrid.Cells[(r - 1), (k - 1)] := RangeMatrix[K, R]; Inc(k, 1); AGrid.RowCount := k + 1; until k > x; // Unassign the Delphi Variant Matrix RangeMatrix := Unassigned; finally // Quit Excel if not VarIsEmpty(XLApp) then begin // XLApp.DisplayAlerts := False; XLApp.Quit; XLAPP := Unassigned; Sheet := Unassigned; Result := True; end; end; end; und erhalte diesen OLE Fehler beim Einlesen einer ersten Tabelle, woran liegt es ....??? #2: Ich habe eine andere *.xls Datei getestet und bekomme den zweiten OLE Fehler |
AW: excel tabsheet einlesen , OLE fehler
Habe die Funktion schnell mal ausprobiert. Sie funktioniert soweit mit einer einfachen Excel-Datei. Möglicherweise enthält deine Datei Formeln mit Berechnungsfehlern. z.B. "A1 DIV 0". Versuche es mal mit einer ganz einfachen Excel-Datei mit zwei, drei Zahlen ohne Berechnungen.
|
AW: excel tabsheet einlesen , OLE fehler
was ist die einfachste Möglichkeit für dem Import alle Formeln in feste Wert zu verwandeln ? Save as *.csv ?????
|
AW: excel tabsheet einlesen , OLE fehler
Kann es sein, dass du in deiner Excel-Tabelle Felder ohne Werte hast und dessen NULL-Werte nicht umgewandelt werden können?
|
AW: excel tabsheet einlesen , OLE fehler
ja, wie müsste ich auf diese Null Felder am besten reagieren ?
|
AW: excel tabsheet einlesen , OLE fehler
Kann man das Ganze nicht gefühlt sauberer eindampfen zu:
Delphi-Quellcode:
function Xls_To_StringGrid(AGrid: TStringGrid; AXLSFile: string): Boolean;
var XLApp, workbook, Sheet: OLEVariant; row, col: Integer; begin Result := False; XLApp := CreateOleObject('Excel.Application'); try XLApp.Visible := False; Workbook:=XLApp.Workbooks.Open(AXLSFile); Sheet := Workbook.WorkSheets[1]; // Set Stringgrid's row &col dimensions. AGrid.RowCount := Sheet.UsedRange.Rows.Count; AGrid.ColCount := Sheet.UsedRange.Columns.Count; // Define the loop for filling in the TStringGrid for row = 1 to Sheet.UsedRange.Rows.Count do for col = 1 to Sheet.UsedRange.Columns.Count do AGrid.Cells[(row - 1), (col - 1)] := Sheet.Cells[row,col].value; finally // Quit Excel if not VarIsEmpty(XLApp) then begin XLApp.Quit; XLAPP := Unassigned; Sheet := Unassigned; Result := True; end; end; end; |
AW: excel tabsheet einlesen , OLE fehler
Zwei Möglichkeiten, die helfen könnten:
Delphi-Quellcode:
oder (unelegant)
if VarIsEmpty(RangeMatrix[K, R]) then begin
AGrid.Cells[(r - 1), (k - 1)] := '<leer>'; // bzw. einfach := ''; end else begin AGrid.Cells[(r - 1), (k - 1)] := RangeMatrix[K, R]; end;
Delphi-Quellcode:
AGrid.Cells[(r - 1), (k - 1)] := RangeMatrix[K, R] + '';
Jumpys Variante gefällt mir besser, wenn dort der Fehler weiterhin auftritt, wäre er in der Zeile zu vermuten:
Delphi-Quellcode:
Hier würd' ich erstmal ein Try except drum bauen und in 'ner Fehlermeldung row und col ausgeben und dann mal in der Exceltabelle nachschauen, was denn da drinne steht, eventuell kann man mit dem Wissen ja dann etwas besser für eine sinnvolle Fehlerbehandlung sorgen.
AGrid.Cells[(row - 1), (col - 1)] := Sheet.Cells[row,col].value;
Delphi-Quellcode:
try
AGrid.Cells[(row - 1), (col - 1)] := Sheet.Cells[row,col].value; except on e : exception do begin ShowMessage(Format('row: %d, col: %d',[row,col])); end; end; |
AW: excel tabsheet einlesen , OLE fehler
Beim nochmaligen Nachdenken habe ich überlegt, dass es vllt. helfen könnte, denn Zellwert bereits in Excel auf den für das StringGrid benötigten String zu casten, was evtl. mit diesem Trick gehen könnte:
Delphi-Quellcode:
AGrid.Cells[(row - 1), (col - 1)] := XLApp.WorksheetFunction.Text(Sheet.Cells[row,col].value,Sheet.Cells[row,col].NumberFormat);
|
AW: excel tabsheet einlesen , OLE fehler
die fehler entstanden durch Zellen mit einem div 0 Error in Excel, nach einer Datenbereinigung klappt es jetzt mit dem Import
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz