AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken excel tabsheet einlesen , OLE fehler
Thema durchsuchen
Ansicht
Themen-Optionen

excel tabsheet einlesen , OLE fehler

Ein Thema von bernhard_LA · begonnen am 23. Nov 2015 · letzter Beitrag vom 23. Nov 2015
Antwort Antwort
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
464 Beiträge
 
Delphi 12 Athens
 
#1

AW: excel tabsheet einlesen , OLE fehler

  Alt 23. Nov 2015, 10:22
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.
  Mit Zitat antworten Zitat
bernhard_LA
Online

Registriert seit: 8. Jun 2009
Ort: Bayern
1.148 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: excel tabsheet einlesen , OLE fehler

  Alt 23. Nov 2015, 10:29
was ist die einfachste Möglichkeit für dem Import alle Formeln in feste Wert zu verwandeln ? Save as *.csv ?????
  Mit Zitat antworten Zitat
quaero

Registriert seit: 25. Apr 2013
38 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: excel tabsheet einlesen , OLE fehler

  Alt 23. Nov 2015, 13:37
Kann es sein, dass du in deiner Excel-Tabelle Felder ohne Werte hast und dessen NULL-Werte nicht umgewandelt werden können?
quaero
  Mit Zitat antworten Zitat
bernhard_LA
Online

Registriert seit: 8. Jun 2009
Ort: Bayern
1.148 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: excel tabsheet einlesen , OLE fehler

  Alt 23. Nov 2015, 14:17
ja, wie müsste ich auf diese Null Felder am besten reagieren ?
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: excel tabsheet einlesen , OLE fehler

  Alt 23. Nov 2015, 15:16
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;
Ralph
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: excel tabsheet einlesen , OLE fehler

  Alt 23. Nov 2015, 15:31
Zwei Möglichkeiten, die helfen könnten:
Delphi-Quellcode:
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;
oder (unelegant)
  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:
AGrid.Cells[(row - 1), (col - 1)] := Sheet.Cells[row,col].value; 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.
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;
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: excel tabsheet einlesen , OLE fehler

  Alt 23. Nov 2015, 16:45
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:

AGrid.Cells[(row - 1), (col - 1)] := XLApp.WorksheetFunction.Text(Sheet.Cells[row,col].value,Sheet.Cells[row,col].NumberFormat);
Ralph
  Mit Zitat antworten Zitat
bernhard_LA
Online

Registriert seit: 8. Jun 2009
Ort: Bayern
1.148 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: excel tabsheet einlesen , OLE fehler

  Alt 23. Nov 2015, 20:20
die fehler entstanden durch Zellen mit einem div 0 Error in Excel, nach einer Datenbereinigung klappt es jetzt mit dem Import
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:31 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-2025 by Thomas Breitkreuz