PDA

View Full Version : excel & delphi



baby_tanhaa
دوشنبه 30 شهریور 1388, 10:03 صبح
سلام

من با استفاده از adoconnection به یک فایل اکسل متصل شدم و تونستم اطلاعاتش رو تو dbgrid نمایش بدم
اما مشکلی که وجود داره اینه که اطلاعات همه ی سلول ها نمایش داده نمیشه و از یک ستون یک سری اطلاعات میاد و یک سری نماید و جالب اینه که تو فایل های اکسل مختلف فرق می کنه و جالب تر اینکه وقتی تو اکسل همون سلول هایی که نشون داده نمی شد رو با دراگ کردن سلول های دیگه پر می کنم اینبار نمایش داده میشه
نوع داده ای اون سلسو ها رو تو اکسل هرچیم میذارم بازم همینه
یکی راهنماییم کنه

daffy_duck376
دوشنبه 30 شهریور 1388, 21:29 عصر
شما اگر میخواهید اطلاعات رو بخونید این یه نمونه کار هست البته وابسته به نصب بون اکسل می باشد. یه راه بهتر استفاده از کامپوننت smiport می باشد .
یه string grid روی فرم بگذار و یک کلید . به کدها یه نگاهی بنداز


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;

procedure TForm1.Button1Click(Sender: TObject);
begin
Xls_To_StringGrid(StringGrid1,'c:\book1.xls')
end;