2012-11-20 77 views
1

我使用cxGrid,我想導入一個excel文件到cxgrid。我寫了這個代碼的一個函數。Delphi cxGrid rowcount

但是,它錯了,因爲cxGrid不知道RowCount和ColCount。 我想知道,我能用什麼,有什麼相似之處? 幫幫我! 謝謝!

function Xls_To_cxGrid(AGrid: TcxGrid; AXLSFile: string): Boolean; 

const 
    xlCellTypeLastCell = $0000000B; 
var 
    XLApp, Sheet: OLEVariant; 
    RangeMatrix: Variant; 
    x, y, k, r: Integer; 
begin 
    Result := False; 
    XLApp := CreateOleObject('Excel.Application'); 
    try 
    XLApp.Visible := False; 
    XLApp.Workbooks.Open(AXLSFile); 
    Sheet := XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1]; 

    Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate; 
    x := XLApp.ActiveCell.Row; 
    y := XLApp.ActiveCell.Column; 

     AGrid.RowCount := x; 
     AGrid.ColCount := y; 

    RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value; 
    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; 
    RangeMatrix := Unassigned; 

    finally 
    if not VarIsEmpty(XLApp) then 
    begin 
     XLApp.Quit; 
     XLAPP := Unassigned; 
     Sheet := Unassigned; 
     Result := True; 
    end; 
    end; 
end; 

回答

2

cxGrid只是ChartViews,TableViews,CardViews和BandedTableViews的容器。作爲一個容器,它不知道任何有關行和列的內容。因爲你想要替換一個StringGrid,我建議使用(非數據庫)TableView。

爲了得到一個TableView中......

  • ...打開網格定製表單(單擊窗體設計器「自定義...」在網格中的「結構導航」)。
  • 轉到「視圖」選項卡,然後單擊「添加視圖...」。選擇「表」(而不是「數據庫表」!)。
  • 在「Structure」選項卡上,右鍵單擊cxGrid1Level1符號,選擇「Select View」和新的TableView。
  • 您現在可以返回到「視圖」選項卡並刪除TableView(cxGrid1DBTableView1)DB

(又見DX幫助主題「柵格層」溫特的標題「指定有關網格視圖」。)

而是「行數」,你會再使用YourView.DataController.RecordCount。 「ColCount」將是YourView.ColumnCount。您可以使用YourView.DataController.Values[...]來訪問單元格值。爲了加快填充視圖我與

YourView.DataController.BeginUpdate; 
try 
    YourView.DataController.RecordCount := x; 
    // ... 
finally 
    YourView.DataController.EndUpdate; 
end; 
+0

圍繞着它的cxGrid只是爲了ChartViews,TableViews,CardViews和BandedTableViews的容器。作爲一個容器,它不知道任何有關行和列的內容。 – alzaimar

+0

@alzaimar,我整合了你的評論。 –

+0

只需使用它。這是微不足道的。 – alzaimar