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

Excel控製,如何新增或刪除多餘的Sheet

答題得分者是:cmf
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-01-03 12:02:21 IP:61.219.xxx.xxx 未訂閱
以下是我建立一個新的Excel檔的方法 我這樣下是可以新建一個sheet4 procedure TForm1.Button1Click(Sender: TObject); var wsSheet: _WorkSheet; begin Excelapplication1.Connect(); ExcelApplication1.Visible[0] := True; ExcelApplication1.Caption := 'New Excel'; ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0)); ExcelApplication1.ScreenUpdating[0] := True; wsSheet := ExcelWorkbook1.WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet; end; 請問:可是有沒有辦法刪除sheet1~3, 或是有沒有辦法可以一開始時就沒有sheet1~3, 可以自己新增sheet~~~ 再請問: 我利用下面的語法開啟了一個Excel檔 請問我要如何讓自己宣告的 wsSheet: _WorkSheet; 能夠指到該Excel特定的頁面 ex: sheet1 ExcelApplication1.Workbooks.Open ('c:\a.xls', EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) 謝謝? ---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ----------------
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-01-03 12:46:52 IP:61.218.xxx.xxx 未訂閱
引言: 以下是我建立一個新的Excel檔的方法 我這樣下是可以新建一個sheet4 procedure TForm1.Button1Click(Sender: TObject); var wsSheet: _WorkSheet; begin Excelapplication1.Connect(); ExcelApplication1.Visible[0] := True; ExcelApplication1.Caption := 'New Excel'; ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0)); ExcelApplication1.ScreenUpdating[0] := True; wsSheet := ExcelWorkbook1.WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet; end; 請問:可是有沒有辦法刪除sheet1~3, 或是有沒有辦法可以一開始時就沒有sheet1~3, 可以自己新增sheet~~~ 再請問: 我利用下面的語法開啟了一個Excel檔 請問我要如何讓自己宣告的 wsSheet: _WorkSheet; 能夠指到該Excel特定的頁面 ex: sheet1 ExcelApplication1.Workbooks.Open ('c:\a.xls', EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) 謝謝? ---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ----------------
// 設定一開始只有 一 sheet ;最少是一個 ExcelApplication1.SheetsInNewWorkbook := 1 ; //刪除sheet ; 最少要留一個 ExcelWorkbook1.Sheets("Sheet2").Select ExcelWorkbook1.ActiveWindow.SelectedSheets.Delete ExcelWorkbook1.Sheets("Sheet3").Select ExcelWorkbook1.ActiveWindow.SelectedSheets.Delete // Excel特定的頁面 ExcelWorkbook1.Sheets("Sheet1").Select
------
︿︿
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-01-03 13:46:56 IP:61.219.xxx.xxx 未訂閱
請問cmf兄: 我是用Dephi 5.0 可是會出現下面的狀況 procedure TForm1.Button1Click(Sender: TObject); begin ExcelApplication1.SheetsInNewWorkbook := 2; end; 會出現[Error] Unit1.pas(34): '[' expected but ':=' found (是這樣寫嗎?還是要加上ExcelApplication1.Connect();) 另外如果下 procedure TForm1.Button1Click(Sender: TObject); begin Excelapplication1.Connect(); ExcelApplication1.Visible[0] := True; ExcelApplication1.Caption := 'New Excel'; ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0)); ExcelApplication1.ScreenUpdating[0] := True; ExcelApplication1.Workbooks.Open ('c:\Excel.xls', EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) ExcelWorkbook1.Sheets("Sheet2").Select; ExcelWorkbook1.ActiveWindow.SelectedSheets.Delete; end; 會錯在 ExcelWorkbook1.Sheets("Sheet2").Select; Error message: [Error] Unit1.pas(38): Missing operator or semicolon [Error] Unit1.pas(38): Not enough actual parameters [Error] Unit1.pas(39): Undeclared identifier: 'ActiveWindow' [Error] Unit1.pas(39): Missing operator or semicolon [Error] Unit1.pas(39): Missing operator or semicolon [Error] Unit1.pas(40): Expression expected but 'END' found [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas' 請問是錯在哪裡 P.S 我用的三個元件ExcelApplication1, ExcelWorkbook1, ExcelWorksheet1 ---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ----------------
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-01-03 14:36:33 IP:61.218.xxx.xxx 未訂閱
    把這行改成   ExcelApplication1.SheetsInNewWorkbook := 2; 改成         ExcelApplication1.SheetsInNewWorkbook[1] := 2;        // 少了 分號  ; ExcelApplication1.Workbooks.Open ('c:\Excel.xls', EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,0); 把這行改成 ExcelWorkbook1.ActiveWindow.SelectedSheets.Delete; 改成 ExcelWorkbook1.Sheets.Delete(2);
------
︿︿
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-01-03 15:23:44 IP:61.219.xxx.xxx 未訂閱
請問cmf 兄: 先謝謝你~~~大概成了50% 以下是我的開法 ExcelApplication1.connect(); ExcelApplication1.Visible[0] := True; ExcelApplication1.SheetsInNewWorkbook[1] := 2; ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0)); ExcelApplication1.ScreenUpdating[0] := True; 這樣是可以打開2個頁面, 可是我加上 (這次有加;號) ExcelWorkbook1.Sheets("Sheet2").Select; or ExcelWorkbook1.Sheets('Sheet2').Select; 都會出現下面的訊息: [Error] Unit1.pas(39): Missing operator or semicolon [Error] Unit1.pas(39): Not enough actual parameters [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas' 但是用ExcelWorkbook1.Sheets.Select(temp,1); (var temp : OleVariant;) 時,反而把第二頁變到第一個sheet(但需要去點一下才會變?) 請問我的Select的部份有錯嗎? 另外我如果改下 ExcelWorkbook1.Sheets.Delete(2); 會出現"至少需有一張未隱藏的工作表" 請問我有漏掉什麼嗎?? 另外是否可以預覽列印或直接列印 我之前看到"領行天使大大"的範例 用的是 Variant 來建立 內容大概是 var MyExcel: Variant; begin MyExcel := CreateOleOBject('Excel.Application'); MyExcel.WorkBooks.Add; MyExcel.Visible := True; (from 領行天使) 加上 MyExcel.sheets[2].select; 則可以選到第二頁,可是 ExcelApplication1.Sheets[2].select; 會說沒有select這個方法 請問方法有錯嗎??? 寫太多,可能看不懂, 主要還是問, 1. 如何選到特定的sheet頁面 2. 如何刪除特定的sheet頁面 (之前用領行天使大大的方法,MyExcel.sheets[2].delete, 可以刪除,但會有詢問的訊息,是否可以消掉) 3. 是否可以預覽列印或直接列印Excel檔 因為有看到printout 和 preview等方法,可是在 ExcelApplication1.sheet <---一直過不去.... sorry~~問了一大堆,還是沒辦法做出來~~~ 先向你說聲謝謝~~~~ ---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ----------------
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-01-03 15:49:28 IP:61.218.xxx.xxx 未訂閱
1. 如何選到特定的sheet頁面 ExcelWorkbook1.Sheets.Select(Replace: OleVariant; lcid: Integer); 2. 如何刪除特定的sheet頁面 ExcelWorkbook1.Sheets.Delete(lcid: Integer); (之前用領行天使大大的方法,MyExcel.sheets[2].delete, 可以刪除,但會有詢問的訊息,是否可以消掉) 3. 是否可以預覽列印或直接列印Excel檔 因為有看到printout 和 preview等方法,可是在 ExcelApplication1.sheet <---一直過不去.... ExcelApplication1.ActiveWindow.PrintPreview(EnableChanges: OleVariant);
------
︿︿
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-01-03 16:06:34 IP:61.218.xxx.xxx 未訂閱
procedure TEST; var ExcelWorksheet:array[0...10] of TExcelWorksheet; i:integer; begin ExcelApplication1.connect(); ExcelApplication1.Visible[0] := True; ExcelApplication1.SheetsInNewWorkbook[1] := 2; ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0)); ExcelApplication1.ScreenUpdating[0] := True; for i:=0 to ExcelWorkbook1.Sheets.Count-1 do begin ExcelWorksheet[i]:=ExcelWorkbook1.Sheets.Item[i]; end; ExcelWorksheet[1].Select; ExcelWorksheet[1].Delete; ExcelWorksheet[0].PrintPreview; end;
------
︿︿
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-01-03 16:20:29 IP:61.219.xxx.xxx 未訂閱
to cmf 兄: Compile會錯在這一行 ExcelWorksheet[i] := ExcelWorkbook1.Sheets.Item[i]; [Error] Unit1.pas(48): Incompatible types: 'TExcelWorksheet' and 'IDispatch' [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas' 是不是我的Delphi的問題 ~~~~ @_@~~~ 如果把那一行註解掉則換下面二行會 Run Time Error ExcelWorksheet[1].Delete; ExcelWorksheet[0].PrintPreview; Sorry~~~又要麻煩你~~~ ---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ----------------
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-01-03 16:23:10 IP:61.218.xxx.xxx 未訂閱
ExcelWorksheet[i] := ExcelWorkbook1.Sheets.Item[i] as TExcelWorksheet;
------
︿︿
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-01-03 16:46:14 IP:61.219.xxx.xxx 未訂閱
To cmf 兄: 換成 ExcelWorksheet[i] := ExcelWorkbook1.Sheets.Item[i] as TExcelWorksheet; Compile Error Message變成 [Error] Unit1.pas(48): Operator not applicable to this operand type [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas' 如果用 ExcelWorksheet[i] := TExcelWorksheet(ExcelWorkbook1.Sheets.Item[i]); 會變成Run Time Error "無效的索引~~" 請問題錯在哪裡??? ---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ----------------
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-01-03 19:30:24 IP:61.70.xxx.xxx 未訂閱
skurama: 你把你完整程式,貼上來 我再拿到我的電腦執行看看 看看是那裡出問題 這樣好嗎?
------
︿︿
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-01-03 21:05:37 IP:61.13.xxx.xxx 未訂閱
To cmf 兄: 我是用你之前回的那段程式去執行 procedure TForm1.Button1Click(Sender: TObject); var ExcelWorksheet:array[0..10] of TExcelWorksheet; i:integer; begin ExcelApplication1.connect(); ExcelApplication1.Visible[0] := True; ExcelApplication1.SheetsInNewWorkbook[1] := 2; ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0)); ExcelApplication1.ScreenUpdating[0] := True; for i:=0 to ExcelWorkbook1.Sheets.Count-1 do begin ExcelWorkbook1.Sheets.Item[i] as TExcelWorksheet; <---快錯 end; ExcelWorksheet[1].Select; ExcelWorksheet[1].Delete; ExcelWorksheet[0].PrintPreview; end; ExcelWorkbook1.Sheets.Item[i] as TExcelWorksheet; 這一行 的錯誤訊息是 [Error] Unit1.pas(42): Operator not applicable to this operand type [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas' 我是用 New Application 加一個按鈕,加上ExcelApplication1, ExcelWorksheet1, ExcelWorkbook1 在按鈕跑上面那段程式,然後就出現錯誤訊息了~~~ 謝謝你~~~~ ---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ----------------
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-01-03 22:51:11 IP:61.70.xxx.xxx 未訂閱
改成這樣試試看八 procedure TForm1.Button1Click(Sender: TObject); var ExcelWorksheet:array[0..10] of TExcelWorksheet; i:integer; lcid: integer; _Template:Olevariant; begin lcid := GetUserDefaultLCID; _Template:=Olevariant(xlWBATWorksheet); try ExcelApplication1.connect; except showmessage('無法連上Excel'); exit; end; ExcelApplication1.Visible[lcid] := True; ExcelApplication1.SheetsInNewWorkbook[lcid] := 2; ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(_Template,lcid)); ExcelApplication1.ScreenUpdating[lcid] := True; for i:=0 to ExcelWorkbook1.WorkSheets.Count-1 do begin ExcelWorksheet[i]:=TExcelWorksheet.Create(self); ExcelWorksheet[i].ConnectTo(ExcelWorkbook1.Worksheets[i 1] as _Worksheet); end; if ExcelWorkbook1.WorkSheets.Count >= 2 then begin ExcelWorksheet[1].Select; ExcelWorksheet[1].Delete; ExcelWorksheet[1].Free; end; ExcelWorksheet[0].PrintPreview; end;
------
︿︿
skurama
中階會員


發表:88
回覆:127
積分:73
註冊:2002-07-22

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-01-03 23:23:02 IP:61.13.xxx.xxx 未訂閱
To cmf 兄~~~ 謝啦~~~ 現在都可以用了~~~~ ---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ----------------
------
----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
cmf
尊榮會員


發表:84
回覆:918
積分:1032
註冊:2002-06-26

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-01-03 23:52:43 IP:61.70.xxx.xxx 未訂閱
skurama: 年青人,有前途 這麼晚了,還在努力工作
------
︿︿
系統時間:2024-11-24 21:35:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!