ExcelApplication 控制 Excel 檔案.如何 搜尋( Crrl+F) -water |
尚未結案
|
water
初階會員 發表:90 回覆:89 積分:35 註冊:2003-07-07 發送簡訊給我 |
如下列:設好連結後 Ms_ExcelAP2 := CreateOleObject('Excel.Application');
Ms_ExcelWB2 := Ms_ExcelAP2.WorkBooks.OPEN(Ms_ExcelW2);
Ms_ExcelAP2.Worksheets[1].select; 如何尋找 'BWG-3K7009' . 找到後.如何取得 Cell Row & Column 一切無為法.如虛亦如空.如如心不動.萬法在其中
------
一切無為法.如虛亦如空.如如心不動.萬法在其中 |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
hi, 試試: Cells.Find function
procedure TForm1.Button1Click(Sender: TObject); var FExcel : variant; FWorkBook : variant; FWorkSheet : variant; FCell: variant; begin try FExcel := CreateOLEObject( 'Excel.Application' ); FWorkBook := FExcel.WorkBooks.Open('c:\1.xls'); FWorkSheet := FWorkBook.WorkSheets[1]; except raise Exception.Create('無法啟動excel'); exit; end; FExcel.visible := True; FCell := FWorkSheet.cells.Find('test'); ShowMessage(FCell.Row); ShowMessage(FCell.Column); end; |
water
初階會員 發表:90 回覆:89 積分:35 註冊:2003-07-07 發送簡訊給我 |
|
water
初階會員 發表:90 回覆:89 積分:35 註冊:2003-07-07 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
Q:1.如何搜尋時.只要搜尋欄位'C' (因為其他 CELL 資料相同)
A: 利用 columns 的選取, 可以使 excel 只在該範圍 find, 如下:
procedure TForm1.Button1Click(Sender: TObject); var FExcel : variant; FWorkBook : variant; FWorkSheet : variant; FCell: variant; begin try FExcel := CreateOLEObject( 'Excel.Application' ); FWorkBook := FExcel.WorkBooks.Open('c:\1.xls'); FWorkSheet := FWorkBook.WorkSheets[1]; except raise Exception.Create('無法啟動excel'); exit; end; FExcel.visible := True; FWorkSheet.Columns[3].Select; //指定 C 欄 FCell := FWorkSheet.cells.Find('test'); ShowMessage(FCell.Row); ShowMessage(FCell.Column); end;Q:2.如何 COPY 1 行 TO 其他行 (只要資料;底色/框圖...都不COPY ) A:使用 Copy, PasteSpecial 參數使用 xlPasteFormulas (僅貼值, 公式, 資料, 不含格式), 如下: procedure TForm1.Button1Click(Sender: TObject); var FExcel : variant; FWorkBook : variant; FWorkSheet : variant; FCell: variant; xlPasteFormulas: integer; begin xlPasteFormulas := -4123; try FExcel := CreateOLEObject( 'Excel.Application' ); FWorkBook := FExcel.WorkBooks.Open('c:\1.xls'); FWorkSheet := FWorkBook.WorkSheets[1]; except raise Exception.Create('無法啟動excel'); exit; end; FExcel.visible := True; FWorkSheet.Columns[4].Copy; FWorkSheet.Columns[8].PasteSpecial(xlPasteFormulas); end; |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
引言: 不好意思:再請教進階搜尋事項: 1.下一筆指令如何下?? 2.如何判斷 有找到 ?? 3.WHILE FOUND_A // 第一迴路 BEGIN WHILE FOUND_B // 第二迴路 BEGIN 下一筆_B END; 下一筆_A END; 此結構又如何下指令??關於是否找到的問題, 可以使用 VarIsEmpty 來測試, 即可很容易明白是否有找到, 唯在 excel 中, findnext 是會一直重覆重頭再來找, 所以要找完整個文件, 必須自行記錄第一個找到的 cell 並記錄下來, 藉以比對, 是否 excel 又重頭開始找了, 程式如下: procedure TForm1.Button1Click(Sender: TObject); var FExcel : variant; FWorkBook : variant; FWorkSheet : variant; FCell: variant; FindRow, FindColumn: integer; begin try FExcel := CreateOLEObject( 'Excel.Application' ); FWorkBook := FExcel.WorkBooks.Open('c:\1.xls'); FWorkSheet := FWorkBook.WorkSheets[1]; except raise Exception.Create('無法啟動excel'); exit; end; FExcel.visible := True; FCell := FWorkSheet.cells.Find('test'); if not VarIsEmpty(FCell) then // if the data is find, VarIsEmpty is very useful to exam the result begin // find first cell and record the row and column FindRow := FCell.Row; FindColumn := FCell.Column; end else begin ShowMessage('not found'); exit; end; repeat FCell := FWorkSheet.cells.FindNext(FCell); ShowMessage(FCell); until (FindRow = FCell.Row) and (FindColumn = FCell.Column); // compare if the found cell is the first found cell end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |