baby_tanhaa
دوشنبه 30 شهریور 1388, 11:03 صبح
سلام
 
من با استفاده از adoconnection به یک فایل اکسل متصل شدم و تونستم اطلاعاتش رو تو dbgrid نمایش بدم
اما مشکلی که وجود داره اینه که اطلاعات همه ی سلول ها نمایش داده نمیشه و از یک ستون یک سری اطلاعات میاد و یک سری نماید و جالب اینه که تو فایل های اکسل مختلف فرق می کنه و جالب تر اینکه وقتی تو اکسل همون سلول هایی که نشون داده نمی شد رو با دراگ کردن سلول های دیگه پر می کنم اینبار نمایش داده میشه
نوع داده ای اون سلسو ها رو تو اکسل هرچیم میذارم بازم همینه
یکی راهنماییم کنه
daffy_duck376
دوشنبه 30 شهریور 1388, 22: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;
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.