顯示Excel的資料(新手) |
答題得分者是:christie
|
tokiama
一般會員 發表:34 回覆:60 積分:23 註冊:2009-04-19 發送簡訊給我 |
請問一下:
[code delphi] procedure TForm1.Button1Click(Sender: TObject); var Excel:Variant; begin Excel:=CreateOleObject('Excel.Application'); Excel.WorkBooks.open('C:\Documents and Settings\Administrator\桌面\Excel\TEST1.xls'); StringGrid1.Cells[1,1]:=Excel.WorkBooks[1].WorkSheets[1].Cells[1,1]; Excel.WorkBooks[1].close; Excel.Quit; end; end. [/code] 我已經成功的可以去開起Excel的檔案了,可是我要怎麼顯示Excel裡的資料呢? 我只能載一個→StringGrid1.Cells[1,1]:=Excel.WorkBooks[1].WorkSheets[1].Cells[1,1]; 想說要用回圈,可是...我如果不知道Excel的資料到哪裡那我要怎麼用回圈? 請問一下有誰知道怎麼樣才可以知道Excel的資料有幾欄幾列嗎? ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 我爬了文後... 發現有這個可以用→ wc:=Excel.WorkBooks[1].WorkSheets[1].Cells.SpecialCells(xlCellTypelastCell,EmptyParam).row; 可是這回是這個出錯→[ Error] Unit1.pas(36): Undeclared identifier: 'xlCellTypelastCell' 我的 Unit 又少加了? 編輯記錄
tokiama 重新編輯於 2009-10-25 14:37:53, 註解 無‧
|
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
|
tokiama
一般會員 發表:34 回覆:60 積分:23 註冊:2009-04-19 發送簡訊給我 |
想跟大家請教一下;
我是用StringGrid去顯示Excel的內容的,然後修改StringGrid時順便改便Excel內的資料。 在要儲存檔案或是離開時才會執行 Excel.WorkBooks[1].close; 跟 Excel.Quit;。 雖然已經可以讀取、修改、儲存了,可是必須在知道Excel的資料的最後一筆是在多少列、多少行的前提下,並寫死在讀檔的時後。 如下: [code delphi] var Form1: TForm1; Excel:olevariant; Eout:olevariant; x,y:integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var i,j:integer; begin if opendialog1.Execute then begin Eout:=true; Excel:=CreateOleObject('Excel.Application'); Excel.WorkBooks.open(opendialog1.FileName); //////////////////////////////////////////////////////////////////////// for i:=1 to 3 do //上下向 for j:=1 to 3 do //左又向 StringGrid1.Cells[i,j]:=Excel.WorkBooks[1].WorkSheets[1].Cells[j,i]; //////////////////////////////////////////////////////////////////////// end; end;[/code] 請問一下前輩們有沒有什麼方法可以知道Excel的最後一筆資料在第幾行第幾列? ===================引 用 st33chen 文 章=================== 請問您有 USES comobj, Excel2000 嗎? ===================引 用 st33chen 文 章=================== Comobj 有,Excel2000 使用後會出現 → [Fatal Error] Unit1.pas(7): File not found: 'Excel2000.dcu' ,所以就把Excel2000拿掉了。 Excel2000是什麼?能麻煩哪位跟我說一下嗎?謝謝 & 麻煩了。 |
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
以下 :
[code delphi] procedure TForm1.Button1Click(Sender: TObject); var i, j: Integer; BoxNo: String; MsExcel, MsExcelWorkBook, MsExcelWorkSheet: Variant; begin if OpenDialog1.Execute then begin MsExcel := CreateOleObject( 'Excel.Application'); MsExcelWorkBook := msExcel.Workbooks.Open(OpenDialog1.FileName); MsExcelWorkSheet := msExcel.Worksheets.Item[1]; for i := 3 to MsExcelWorkSheet.Rows.Count do for j := 3 to MsExcelWorkSheet.Columns.Count do begin end; end; end; [/code] 或以下網址: http://delphi.ktop.com.tw/board.php?cid=168&fid=923&tid=73304#5 供參考...
編輯記錄
老大仔 重新編輯於 2009-10-26 09:40:40, 註解 無‧
|
tokiama
一般會員 發表:34 回覆:60 積分:23 註冊:2009-04-19 發送簡訊給我 |
這方法本新手去試了一下!
可以是可以....只是我光讀檔程式就跑了很久.... 就算我只有讀15X15筆也要跑上快13秒左右,是我本身在用雙迴圈那地方就寫不好了嗎? ===================引 用 老大仔 文 章=================== 以下?: [code delphi] procedure TForm1.Button1Click(Sender: TObject); var ??? i, j: Integer; ??? BoxNo: String; ??? MsExcel, MsExcelWorkBook, MsExcelWorkSheet: Variant; begin ??? if OpenDialog1.Execute then ??? begin ??? MsExcel := CreateOleObject( 'Excel.Application'); ??? MsExcelWorkBook := msExcel.Workbooks.Open(OpenDialog1.FileName); ??? MsExcelWorkSheet := msExcel.Worksheets.Item[1]; ??? for i := 3 to MsExcelWorkSheet.Rows.Count do ? for j := 3 to MsExcelWorkSheet.Columns.Count do ? begin ?? ? end; ??? end; end; [/code] 或以下網址: http://delphi.ktop.com.tw/board.php?cid=168&fid=923&tid=73304#5 供參考... |
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
christie
資深會員 發表:30 回覆:299 積分:475 註冊:2005-03-25 發送簡訊給我 |
請參考一下
uses ComObj; 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); //XLApp.Workbooks.Add(-4167); //Sheet:=XLApp.Workbooks[1].WorkSheets[1]; // 1 Sheet:=XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];//'藥品-外用' //ExcelApp.Workbooks.Add(xlWBatWorkSheet); //Sheet := XLApp.Workbooks[2].WorkSheets[1]; //ExtractFileName(AXLSFile) // 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 if Xls_To_StringGrid(StringGrid1, '20091027.xls') then ShowMessage('Table has been exported to String-Grid ! OK ') end;
------
What do we live for if not to make life less difficult for each other? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |