Thema: Prism EXCEL in Delphi.NET

Einzelnen Beitrag anzeigen

micha382

Registriert seit: 4. Nov 2005
Ort: Lyon(Frankreich)
10 Beiträge
 
Delphi 8 Professional
 
#3

Re: EXCEL in Delphi.NET

  Alt 18. Nov 2005, 09:04
Zitat:
Schonmal probiert, einfach eine Referenz auf eine COM TypeLib zu setzen? Rolling Eyes
So einfach ist es in .NET dann doch nicht, guter Mann. Da bin ich ja selbst drauf gekommen, doch funktioniert hat es trotzdem nicht...

Doch getreu dem Motto 'Démerdez-vous!' hab ich's nach einigen Wochen doch hinbekommen:

Ich benutze eine Funktion 'GetExcelWorksheet', die meine Datei öffnet und meine gewünschten Datensätze in ein DataSet schreibt.
Delphi-Quellcode:

uses
  System.Reflection, Excel, System.Data.OleDb, ComObj,

  System.Collections, System.ComponentModel,
  System.Data, System.Drawing, System.Web, System.Web.SessionState,
  System.Web.UI, System.Web.UI.WebControls, System.Web.UI.HtmlControls,
  Borland.Vcl.SysUtils;


function GetExcelWorkSheet(pathName:string; fileName:string; workSheetNumber:integer) : DataSet;
begin
  ExcelConnection := OleDbConnection.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+pathName+'\'+fileName+';Extended Properties=Excel 8.0;');
  ExcelConnection.Open();
  ExcelCommand := OleDbCommand.Create;
  ExcelCommand.Connection := ExcelConnection;

  restrictions[0] := nil;
  restrictions[1] := nil;
  restrictions[2] := nil;
  restrictions[3] := 'TABLE'; // only user tables

  ExcelSheets := ExcelConnection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, restrictions);
  SpreadSheetName := '['+ExcelSheets.Rows[workSheetNumber]['TABLE_NAME'].ToString()+']';
  ExcelDataSet := DataSet.Create;// DataSet ExcelDataSet = new DataSet();
  ExcelCommand.CommandText := 'SELECT [A], [B], [C] FROM' +SpreadSheetName+ 'WHERE [A]>15 AND [A]>16';
  // Abfrage, die nur bestimmte Datensätze auswählt, funktioniert wie SQL

  ExcelAdapter := OleDbDataAdapter.Create(ExcelCommand);
  ExcelAdapter.Fill(ExcelDataSet);

  ExcelConnection.Close();
  Result := ExcelDataSet;//return ExcelDataSet;

end;

function Get_DataSet : DataSet;
begin
  DataSet := GetExcelWorksheet('C:\abc\def\','ghi.xls',1);
  // Die Ziffer hinter dem letzten Komma bezeichnet die Arbeitsmappe. EXCEL fängt bei 1 an zu zählen. Steht eine 0, wird die letzte Mappe aktiviert.
end;
Trotzdem vielen Dank für die freundliche Unterstützung. Habe gelernt, dass Foren (und nicht nur eures) doch nicht so toll sind wie sie immer denken.

Grüsse,

Micha
Micha
  Mit Zitat antworten Zitat