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
bernhard_LA

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

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
 
#2

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
 
#3

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
 
#4

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

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

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 12:05 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