線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1768
推到 Plurk!
推到 Facebook!

ExcelApplication 控制 Excel 檔案.如何 搜尋( Crrl+F) -water

尚未結案
water
初階會員


發表:90
回覆:89
積分:35
註冊:2003-07-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-04 18:22:33 IP:61.222.xxx.xxx 未訂閱
如下列:設好連結後     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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-04 23:42:30 IP:61.62.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-05 09:19:18 IP:61.222.xxx.xxx 未訂閱
cool,此站果然高手多多. 請教: 1.如何搜尋時.只要搜尋欄位'C' (因為其他 CELL 資料相同) 2.如何 COPY 1 行 TO 其他行 (只要資料;底色/框圖...都不COPY ) ---- water        一切無為法.如虛亦如空.如如心不動.萬法在其中
------
一切無為法.如虛亦如空.如如心不動.萬法在其中
water
初階會員


發表:90
回覆:89
積分:35
註冊:2003-07-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-05 09:34:00 IP:61.222.xxx.xxx 未訂閱
不好意思:再請教進階搜尋事項: 1.下一筆指令如何下?? 2.如何判斷 有找到 ?? 3.WHILE FOUND_A      // 第一迴路 BEGIN WHILE FOUND_B    // 第二迴路 BEGIN 下一筆_B END; 下一筆_A END; 此結構又如何下指令??    一切無為法.如虛亦如空.如如心不動.萬法在其中
------
一切無為法.如虛亦如空.如如心不動.萬法在其中
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-07 10:42:37 IP:61.62.xxx.xxx 未訂閱
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-12-07 11:11:25 IP:61.62.xxx.xxx 未訂閱
引言: 不好意思:再請教進階搜尋事項: 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;
系統時間:2024-05-02 13:33:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!