แลกเปลี่ยนข้อมูลกับ เอ็มเอส เอ็กเซลวี เดลฟีด้วยความช่วยเหลือ โอเล่.
สวัสดีเพื่อนร่วมงานที่รัก!
ไม่ช้าก็เร็วเราทุกคนต้องเผชิญกับภารกิจในการแลกเปลี่ยนข้อมูลกับแอปพลิเคชันแพ็คเกจ เอ็มเอส ออฟฟิศ- หนึ่งในนั้นก็คือ เอ็มเอส เอ็กเซล- และโดยเฉพาะเกี่ยวกับการโต้ตอบกับผลิตภัณฑ์นี้ เอ็มเอส ออฟฟิศจะมีการหารือในบทความนี้
วิธีหนึ่งในการโต้ตอบ เดลฟีค เอ็มเอส เอ็กเซล- คือการเชื่อมต่อให้เป็น โอเล่วัตถุ.
ดังนั้น.
ก่อนอื่นเลยในการทำงานด้วย เอ็มเอส เอ็กเซลและ โอเล่เพิ่มในส่วน การใช้งานโมดูล ComObjและ ActiveX.
และสิ่งแรกที่เราต้องตรวจสอบคือมีการติดตั้งหรือไม่ เอ็มเอส เอ็กเซลบนคอมพิวเตอร์ของผู้ใช้โดยหลักการแล้ว
เมื่อต้องการทำเช่นนี้ เราจะใช้ฟังก์ชัน CLSIDFromProgIDซึ่งดูในรีจิสทรี ซีแอลเอสไอดีสำหรับการถ่ายทอด ProgID:
ความช่วยเหลือจาก MSDN: วิธีการ CLSIDFromProgID
พารามิเตอร์:
pszProgID: เสาStr— สตริงที่มีชื่อของวัตถุ
คลิด: ทีซีแอลเอสดี- ตัวชี้ไปยังโครงสร้าง TGUIDซึ่งวัตถุที่พบถูกถ่ายโอนไปยัง
ผลตอบแทน:
HRESULT— ผลลัพธ์ ซึ่งสามารถรับค่าต่อไปนี้:
ซ_โอเค- พบวัตถุ;
CO_E_CLASSSTRING— ลงทะเบียนแล้ว ซีแอลเอสไอดีสำหรับ ProgIDไม่ถูกต้อง;
REGDB_E_WRITEREGDB- เขียนผิด ซีแอลเอสไอดีไปที่ทะเบียน
จากผลลัพธ์ที่เราต้องการ ซ_โอเค.
มาเขียนฟังก์ชันเพื่อพิจารณาว่ามีอยู่หรือไม่ เอ็กเซลจากผู้ใช้:
ฟังก์ชัน IsXlsInstall: บูลีน; var CLSID: TCLSID; เริ่มต้นผลลัพธ์:= (CLSIDFromProgID("Excel.Application", CLSID) = S_OK); จบ;
ถ้า เอ็กเซลติดตั้งแล้วมาเชื่อมต่อได้เลย คุณสามารถทำได้สองวิธี: GetActiveOleObject— รับลิงก์ไปยังอินสแตนซ์ที่ทำงานอยู่แล้ว เอ็กเซลหรือ CreateOleObject— สร้างตัวอย่างใหม่ เอ็กเซล.
หากเรามีงานรับข้อมูลจากการทำงาน เอ็กเซลจากนั้นเราควรใช้เฉพาะตัวเลือกแรก ในกรณีอื่นๆ ที่เราพยายามเชื่อมต่อ และหากไม่ได้ผล เราก็สร้างมันขึ้นมา
มาเขียน 2 ฟังก์ชั่นเพื่อเชื่อมต่อกัน XlsConnectและเปิดตัวอันใหม่ XlsStart:
มาเพิ่มตัวแปรกัน FXlsAppมีประเภท ตัวแปรซึ่งจะมีการอ้างอิงถึงวัตถุ เอ็กเซล.
FXlsApp ส่วนตัว: ตัวแปร; *** ฟังก์ชั่น XlsConnect: บูลีน; เริ่มต้นผลลัพธ์:= เท็จ;
ลอง FXlsApp:= GetActiveOleObject("Excel.Application"); เอ็มเอส เอ็กเซลผลลัพธ์:= จริง;
ยกเว้นจุดสิ้นสุด; จบ; ขั้นตอน XlsStart; เริ่ม FXlsApp:= CreateOleObject("Excel.Application"); จบ; ตอนนี้คุณสามารถเพิ่มปุ่มได้ เมื่อคลิกแล้วเราจะเชื่อมต่อกันโดยใช้ฟังก์ชันเขียน:
หน้าต่างเริ่มต้น เอ็กเซลเริ่มใน พื้นหลัง- เส้น FXlsApp.Visible:= จริง;สร้างหน้าต่างพื้นหลัง เอ็กเซลมองเห็นได้.
หน้าต่าง เอ็กเซลมันเริ่มว่างเปล่าและจำเป็นต้องเพิ่มเข้าไป สมุดงาน- ทำได้โดยใช้วิธีการ WorkBooks.Addซึ่งจะเพิ่มหนังสือเล่มใหม่หรือเปิดหนังสือเล่มที่บันทึกไว้ก่อนหน้านี้หากคุณระบุเส้นทางไปยังไฟล์
มาเพิ่มขั้นตอนที่จะทำสิ่งนี้:
ขั้นตอน XWorkbookAdd(const FilePath: string = ""); เริ่ม FXlsApp.WorkBooks.Add (FilePath); จบ;
เพิ่มหนังสือแล้ว ตอนนี้เรามาลองเขียนอะไรบางอย่างในนั้นกันดีกว่า
FXlsApp.Cells := "ทดสอบสตริง";
ที่ไหน แถวคือดัชนีแถว และ พ.อ— ดัชนีคอลัมน์ที่ขึ้นต้นด้วยหนึ่ง
FXlsApp.Range["A1"] := "เซลล์ A1";
ที่ไหน พิสัยเป็นอาร์เรย์ของเซลล์ และ A1- คุ้นเคย เอ็กเซลพิกัดของเซลล์
สามารถระบุช่วงเป็นพิกัดได้ ตัวอย่างเช่น รหัส
FXlsApp.Range["A3:A10"] := 5;
จะเติมเซลล์ทั้งหมดด้วยหมายเลข 5 A3โดย A10และรหัส
FXlsApp.Range["A3:A10"].Interior.Color:= clMoneyGreen;
จะเน้นช่วงเดียวกันเป็นสีเขียวอ่อน
ใน ด้านหลังคือการรับข้อมูลจาก เอ็กเซล, ใช้งานได้เหมือนกัน เส้น
ShowMessage(FXlsApp.เซลล์);
จะแสดงข้อความพร้อมเนื้อหาของเซลล์ที่มีพิกัด: Row=5, Column=1
หลังจากที่เราได้ดำเนินการกิจวัตรที่จำเป็นแล้วด้วย เอ็กเซลเราสามารถบันทึกหนังสือผลลัพธ์ลงในไฟล์ด้วยคำสั่งต่อไปนี้:
FXlsApp.ActiveWorkbook.SaveAs("C:\Test.xlsx");
ที่ไหน สมุดงานที่ใช้งานอยู่- หนังสือเล่มปัจจุบัน
และปิดแอปพลิเคชัน เอ็กเซลสั่งการ:
FXlsApp.ออก;
คุณเข้าใจตัวเลือกการควบคุมเหล่านี้ได้อย่างไร เอ็กเซลจาก เดลฟีไม่จำกัด และมีวิธีหนึ่งที่ค่อนข้างง่ายในการหาวิธีดำเนินการที่จำเป็นด้วย เอ็กเซลจาก เดลฟี.
มันชื่อมาโคร
ลองจินตนาการว่าเราต้องรวมหลายเซลล์ให้เป็นเซลล์เดียวและเราไม่รู้ว่าต้องทำอย่างไร แต่เราต้องการที่จะค้นหา โดยทำตามขั้นตอนต่อไปนี้:
1. เปิดตัว เอ็กเซลและสร้างหนังสือเปล่าขึ้นมา
2. เรียกใช้คำสั่ง "บันทึกมาโคร" ตามค่าเริ่มต้น ชื่อของมาโครจะเป็น "Macro1" (ในเวอร์ชั่นต่างๆ เอ็กเซล คำสั่งนี้อยู่ในรายการเมนูต่างๆ)
3. เลือกช่วงของเซลล์ที่ต้องการแล้วคลิกปุ่ม "ผสานและวางตรงกลาง"
4. หยุดบันทึกมาโคร
5. เรียกรายการมาโครและเลือกมาโครที่คุณบันทึกไว้ที่นั่น
6. คลิกปุ่ม "เปลี่ยน"
ตัวแก้ไขเริ่มต้นขึ้น ไมโครซอฟต์ วิชวลเบสิกสำหรับการสมัครโดยเราจะเห็นรหัสของการดำเนินการ:
Sub Macro1() " " Macro1 Macro " พร้อมการเลือก .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False สิ้นสุดด้วยการเลือก .ผสานส่วนท้าย
มาดูสิ่งที่เขาเขียนถึงเราให้ละเอียดยิ่งขึ้นที่นี่:
ด้วยการคัดสรร— สำหรับช่วงของเซลล์ที่เลือก ให้ตั้งค่าคุณสมบัติ:
การจัดตำแหน่งตามแนวนอน = xlCenter — การวางแนวแนวนอน= อยู่ตรงกลาง
การจัดตำแหน่งแนวตั้ง = xlBottom— การวางแนวตั้ง — ตามขอบด้านล่าง
WrapText = เท็จ— การตัดข้อความด้วยคำถูกปิดใช้งาน
การวางแนว = 0— การวางแนว 0 องศา
AddIndent = เท็จ- การใช้งาน เยื้องอัตโนมัติเปิด/ปิด
ระดับการเยื้อง = 0— เยื้องระดับ 0
ShrinkToFit = เท็จ— บีบอัดข้อความเพื่อให้พอดีกับคอลัมน์เปิด/ปิด
ReadingOrder = xlContext— ลำดับการอ่านตามบริบท
ผสานเซลล์ = เท็จ— เปิด/ปิดเซลล์ที่ผสาน
จบด้วย— สิ้นสุดส่วนของงานด้วยช่วงที่เลือก
การเลือกผสาน— รวมช่วงที่เลือก
ตอนนี้เรามาลองรวมเซลล์จาก Delphi:
เราเลือกช่วงที่เราต้องการ
FXlsApp.Selection.MergeCells:= จริง;
เราผสานเซลล์โดยการตั้งค่าคุณสมบัติ หรือใช้วิธี:
FXlsApp.Selection.ผสาน;
ด้วยวิธีนี้คุณจะได้รับโค้ดสำหรับการจัดการที่จำเป็นเกือบทุกอย่าง
และหากคุณสมบัติหรือวิธีการบางอย่างทำให้เกิดคำถาม คุณสามารถใช้ความช่วยเหลือบน MSDN ได้
โปรดสังเกตลักษณะเฉพาะของการทำงานกับอาร์เรย์ใน วีบีเอ- ดัชนีในอาร์เรย์ใน เดลฟีถูกห่อด้วยวงเล็บเหลี่ยมในขณะที่เข้ามา วีบีเอพวกเขาจะอยู่ในตัวกลม และโค้ดเข้า เดลฟี
FXlsApp.Range["B5:C8"].เลือก;
วี วีบีเอจะมีลักษณะเช่นนี้
ช่วง("D5:H14").เลือก;
ด้านล่างฉันจะให้เล็กน้อย คำถามที่พบบ่อยในประเด็นของการมีปฏิสัมพันธ์กับ เอ็กเซลจาก เดลฟี
จะกำหนดค่าคงที่ใน Excel เพื่อใช้ใน Delphi ได้อย่างไร?
ในบรรณาธิการ วีบีเอเรากำหนดจุดหยุดตรงข้ามกับค่าคงที่ของดอกเบี้ย คลิกดำเนินการ และเมื่อการดำเนินการหยุด ให้ชี้ไปที่ค่าคงที่ที่สนใจ:
จะปิดการใช้งานข้อความเอาต์พุตใน Excel ได้อย่างไร?
FXlsApp.DisplayAlerts:= เท็จ;
จะรับรายชื่อหนังสือจาก Excel ได้อย่างไร?
สำหรับ i:= 1 ถึง FXlsApp.Workbooks.Count ทำ ListBox1.Items.Add(FXlsApp.Workbooks.Item[i].Name);
จะปิดการแสดงตารางได้อย่างไร?
FXlsApp.ActiveWindow.DisplayGridlines:= เท็จ;
จะแสดงแผ่นงานปัจจุบันเป็นตัวอย่างก่อนพิมพ์ได้อย่างไร
FXlsApp.ActiveWindow.SelectedSheets.PrintPreview;
จะทำให้ข้อความในเซลล์เป็นตัวหนาได้อย่างไร?
แถว Var: จำนวนเต็ม; // ดัชนีสตริง Col: จำนวนเต็ม; // ดัชนีเซลล์ TextSelStart: จำนวนเต็ม; // เริ่มจากอักขระ TextSelLength: integer; // จำนวนอักขระที่เลือกเริ่มต้น FXlsApp.Cells.Characters(TextSelStart, TextSelLength).Font.Bold:= True; จบ;
จะปรับความสูงของแถวให้พอดีอัตโนมัติสำหรับเซลล์ที่ติดกาวได้อย่างไร
Var merge_area: ตัวแปร; cell_width, cells_width, i: จำนวนเต็มเริ่มต้น // บันทึกช่วงของเซลล์ที่ผสานลงในตัวแปร merge_area:= FXlsApp.Range["D5"].MergeArea;// บันทึกความกว้างของเซลล์ที่เราจะเลือกความสูง cell_width:= FXlsApp.Range["D5"].ColumnWidth;
cells_width:= 0;
สำหรับ i:= 1 ถึง merge_area.Columns.Count do // รับความกว้างรวมของคอลัมน์ทั้งหมดของช่วงที่ผสาน cells_width:= cells_width + merge_area.Columns[i].ColumnWidth;
// ยกเลิกการผสานเซลล์ merge_area.UnMerge;
// ตั้งค่าความกว้างของเซลล์ที่สนใจเท่ากับความกว้างทั้งหมด FXlsApp.Range["D5"].ColumnWidth:= cells_width;
// เรียก วิธีการมาตรฐานปรับความสูงของแถวให้พอดีอัตโนมัติ FXlsApp.Rows.EntireRow.AutoFit;
// คืนความกว้างเดิมของเซลล์ที่สนใจ FXlsApp.Range["D5"].ColumnWidth:= cell_width;
// กาวช่วงกลับเข้าด้วยกัน merge_area.Merge; จบ;
จะหาเซลล์ที่ใช้แล้วได้อย่างไร?
ผลลัพธ์:= exApp.ActiveSheet.UsedRange;
วิธีรับตัวอักษรคอลัมน์ตามดัชนี
ใช้คณิตศาสตร์; *** ฟังก์ชั่น ColIdxToStr(const Col: integer): string const CharsCount: integer = 26;
ออฟเซ็ต: จำนวนเต็ม = 64; var อันดับ: ไบต์;
Col, Tmp: จำนวนเต็ม; เริ่มต้น ผลลัพธ์:= "";
ในขณะที่ Col > 0 จะเริ่มต้นอันดับ:= 0; Tmp:=สี;ในขณะที่ Tmp > CharsCount จะเริ่มต้น Tmp:= Ceil(Tmp / CharsCount - 1);
Inc(อันดับ);
จบ; ผลลัพธ์:= ผลลัพธ์ + Chr(Tmp + ออฟเซ็ต);
Inc(อันดับ);
Col:= Col - Trunc(กำลัง(CharsCount,อันดับ)) * Tmp;
จบ; จบ;
ใน
รีวิวนี้
Excel.DisplayAlerts:=เท็จ;
แสดงหรือซ่อน Excel บนหน้าจอ:
Excel.Visible:= จริง;
Excel.Visible:= เท็จ;
การพิมพ์เนื้อหาของแผ่นงาน Excel ที่ใช้งานอยู่:
Excel.ActiveSheet.PrintOut;
การอ่าน/เขียนข้อมูลใน EXCEL
คุณสามารถเข้าถึงเซลล์ในสมุดงาน Excel ปัจจุบันได้ดังนี้:
Excel.Range["b2"]:="สวัสดี!"; // เขียนค่าลงในเซลล์
s:=Excel.ช่วง["b2"]; // อ่านค่าจากเซลล์
โดยที่ b2 คือที่อยู่ของเซลล์
หรือใช้รูปแบบลิงก์ R1C1:
Excel.Range]:="สวัสดี!";
พิกัดของเซลล์อยู่ที่ไหน
เลย เซลล์ Excelคุณสามารถกำหนดค่าใดๆ ก็ได้ (อักขระ จำนวนเต็ม เศษส่วน วันที่) แล้ว Excel จะตั้งค่าการจัดรูปแบบเริ่มต้นในเซลล์
จัดรูปแบบเซลล์ใน EXCEL
คุณสามารถเลือก (เลือก) กลุ่มเซลล์สำหรับงานต่อไปได้ดังนี้:
Excel.Range, Excel.Cells] เลือก;
// ทั้ง
Excel.Range["A1:C5"].เลือก;
ในกรณีนี้ พื้นที่ที่อยู่ระหว่างเซลล์ A1 และ C5 จะถูกเลือก
หลังจากทำการเลือกแล้ว คุณสามารถตั้งค่า:
1) การรวมเซลล์:
Excel.Selection.MergeCells:=จริง;
2) การตัดคำ:
Excel.Selection.WrapText:=จริง;
3) การจัดตำแหน่งแนวนอน:
Excel.Selection.HorizontalAlignment:=3;
เมื่อตั้งค่าเป็น 1 ระบบจะใช้การจัดตำแหน่งเริ่มต้น เมื่อตั้งค่าเป็น 2 การจัดตำแหน่งจะอยู่ทางซ้าย 3 จะอยู่ตรงกลาง และ 4 จะอยู่ทางขวา 4) การจัดตำแหน่งในแนวตั้ง
Excel.Selection.VerticalAlignment:=1;
ค่าที่กำหนดจะเหมือนกับการจัดตำแหน่งแนวนอน
5) เส้นขอบสำหรับเซลล์:
เมื่อตั้งค่าเป็น 1 เส้นขอบเซลล์จะถูกวาดด้วยเส้นทึบบางๆ
นอกจากนี้ คุณสามารถระบุค่าสำหรับคุณสมบัติ Borders ได้ เช่น เท่ากับ 3 จากนั้นจะตั้งค่าเฉพาะเส้นขอบด้านบนสำหรับบล็อกการเลือกเท่านั้น:
Excel.Selection.Borders.LineStyle:=1;
ค่าของคุณสมบัติ Borders ระบุ การรวมกันที่แตกต่างกันขอบเซลล์
ในทั้งสองกรณี คุณสามารถใช้ค่าในช่วงตั้งแต่ 1 ถึง 10
การใช้รหัสผ่านใน EXCEL
การตั้งรหัสผ่านสำหรับสมุดงานที่ใช้งานอยู่สามารถทำได้ดังนี้:
พยายาม
// พยายามตั้งรหัสผ่าน
Excel.ActiveWorkbook.protect("ผ่าน");
ยกเว้น
// การดำเนินการหากความพยายามในการตั้งรหัสผ่านล้มเหลว
จบ;
โดยที่ pass คือรหัสผ่านสำหรับตั้งหนังสือ
การลบรหัสผ่านออกจากหนังสือก็คล้ายกัน ใช้คำสั่ง
Excel.ActiveWorkbook.Unprotect("ผ่าน");
การตั้งค่าหรือลบรหัสผ่านสำหรับแผ่นงานที่ใช้งานอยู่ สมุดงาน Excelผลิตโดยทีมงาน
Excel.ActiveSheet.protect("ผ่าน"); //ตั้งรหัสผ่าน
Excel.ActiveSheet.Unprotect("ผ่าน"); // ลบรหัสผ่าน
โดยที่ pass เป็นรหัสผ่านที่ตั้งไว้เพื่อปกป้องหนังสือ
การดำเนินการเสริมใน EXCEL
การลบแถวที่มีการเลื่อนขึ้น (เมื่อดำเนินการเหล่านี้ แถวที่ 5 ถึง 15 จะถูกลบ):
Excel.Rows["5:15"].เลือก;
Excel.การเลือก.ลบ;
วิธีตั้งค่าพื้นที่ค้างบนแผ่นงาน Excel ที่ใช้งานอยู่:
// ยกเลิกการตรึงพื้นที่หากตั้งค่าไว้
Excel.ActiveWindow.FreezePanes:=เท็จ;
// เลือก เซลล์ที่ต้องการ, วี ในกรณีนี้ D3
Excel.Range["D3"].เลือก;
// กำหนดพื้นที่ที่จะแช่แข็ง
Excel.ActiveWindow.FreezePanes:=จริง;
การทำงานกับ EXCEL จาก Delphi
ในบทความนี้ ฉันจะแสดงวิธีการทำงานด้วย MS Excel จากเดลฟี- บทความนี้อาจเป็นประโยชน์กับผู้ที่ต้องการเรียนรู้วิธีการสร้างสรรค์ต่างๆ รายงาน Excelจากโปรแกรมที่เขียนมา เดลฟี- บทความนี้มีข้อมูลอ้างอิงที่จำเป็นสำหรับการทำงานด้วย เอ็มเอส เอ็กเซล- ที่นี่คุณจะพบข้อมูลเกี่ยวกับวิธีการ:
เชื่อมต่อและยกเลิกการเชื่อมต่ออินเทอร์เฟซ Excel อย่างถูกต้อง
- วิธีเปลี่ยนขนาดตัวอักษร สี และประเภท
- วิธีการเลือก รวม เติม และคูณช่วงของเซลล์
- วิธีหมุนและจัดกึ่งกลางข้อความ
- วิธีการวาดเส้นขอบเซลล์
- วิธีใส่สูตรลงในเซลล์ และอื่นๆ อีกมากมาย...
เอาล่ะ มาเริ่มกันเลย...
เราจะทำงานผ่านโมดูล คอมออบเจ,สำหรับสิ่งนี้ใน การใช้งานจำเป็นต้องเพิ่มโมดูล ComObjและโมดูล Excel_TLB(สำหรับ เอ็มเอส เอ็กเซล 2007).
ใช้……, ComObj, Excel_TLB;
โมดูล Excel_TLBประกอบด้วยสิ่งที่จำเป็น ค่าคงที่ที่จะทำงานร่วมกับ เอ็กเซลคุณไม่จำเป็นต้องเชื่อมต่อ แต่คุณจะต้องป้อนค่าคงที่ที่ใช้ทั้งหมดจากโมดูลนี้ด้วยตนเอง ค่าของค่าคงที่สามารถพบได้ภายในโมดูลหรือบนอินเทอร์เน็ต แต่สำหรับ รุ่นที่แตกต่างกัน เอ็มเอส เอ็กเซลพวกเขาแตกต่างกัน
ความสนใจ!!!โมดูล Excel_TLBในเวอร์ชันอื่น เอ็มเอส เอ็กเซลอาจจะเรียกต่างกันออกไป ก่อนที่จะเชื่อมต่อโมดูล Excel_TLB,คุณต้องนำเข้าไลบรารี เอ็กเซล- เมื่อต้องการทำเช่นนี้ ให้เลือก ส่วนประกอบ -> นำเข้าส่วนประกอบ -> นำเข้าไลบรารีประเภท ->เราพบ เอ็มเอส เอ็กเซลและปฏิบัติตามคำแนะนำ
ในส่วนคำอธิบายตัวแปร เราต้องอธิบาย ตัวแปรประเภท ตัวแปรหรือ โอเล่วาเรียนท์เพื่อเชื่อมต่ออินเทอร์เฟซ เอ็กเซลฉันอธิบายตัวแปร เก่ง.
แบบฟอร์ม 1: TForm1;
เก่ง
: ตัวแปร;// ตัวแปรที่สร้างอ็อบเจ็กต์ เอ็กเซล
การสร้างเอกสาร
ความสนใจ!!!เมื่อใดก็ตามที่คุณสร้างอ็อบเจ็กต์อินเทอร์เฟซ ให้รวมขั้นตอนการสร้างไว้ในโมดูลการจัดการข้อผิดพลาด:
พยายาม
สร้างอินเทอร์เฟซ
สร้างรายงาน
ปล่อยอินเทอร์เฟซ
ยกเว้น
จัดการกับข้อผิดพลาด
ปล่อยอินเทอร์เฟซ
จบ;
พยายาม
// สร้างวัตถุ EXCEL
//เพื่อไม่ให้ถามคำถามเรื่องการบันทึกเอกสาร
excel.DisplayAlerts:= เท็จ;
// สร้าง เอกสารใหม่
สมุดงาน
excel.WorkBooks.Add;
//หรือโหลดจากไดเร็กทอรีโปรแกรม
excel.WorkBooks.Open(GetCurrentDir() + "\report.xls");
( GetCurrentDir() - ส่งกลับเส้นทางไปยังไดเร็กทอรีด้วยโปรแกรม)
//ทำให้มองเห็นได้ ฟังก์ชั่นนี้หลังจากการดีบักและทดสอบแล้ว ควรใช้ในตอนท้ายหลังจากสร้างรายงานแล้ว (ซึ่งจะช่วยเพิ่มความเร็วในกระบวนการส่งออกข้อมูลไปยังรายงาน)
excel.Visible:= จริง;
//กำหนดประเภทของสูตรในรูปแบบ R1C1
excel.Application.ReferenceStyle:= xlR1C1;
// กำหนดประเภทสูตรในรูปแบบ A1
excel.Application.ReferenceStyle:= xlA1;
// ตั้งชื่อแผ่นงานแรกและแผ่นที่สอง
excel.WorkBooks.WorkSheets.Name:= "รายงาน1";
excel.WorkBooks.WorkSheets.Name:= "รายงาน2";
//กำหนดรูปแบบตัวเลขสำหรับรูปแบบตัวเลขคอลัมน์ที่หนึ่งและสี่
excel.WorkBooks.WorkSheets.Columns.NumberFormat:= "0.00";
excel.WorkBooks.WorkSheets.Columns.NumberFormat:= "0.0";
// กำหนดความกว้างของคอลัมน์แรกและคอลัมน์ที่สอง
excel.WorkBooks.WorkSheets.Columns.ColumnWidth:= 10;
excel.WorkBooks.WorkSheets.Columns.ColumnWidth:= 20;
// กำหนดลักษณะ สี ขนาด และประเภทของฟอนต์สำหรับแถวแรก
excel.WorkBooks.WorkSheets.Rows.Font.Bold:= จริง; //อ้วน
excel.WorkBooks.WorkSheets.Rows.Font.Color:= clRed; //สีแดง
excel.WorkBooks.WorkSheets.Rows.Font.Size:= 12; //ขนาด12
excel.WorkBooks.WorkSheets.Rows.Font.Name:= "ไทม์สนิวโรมัน"; //แบบอักษร
//กำหนดค่าเซลล์ 1.4 และ 2.4 (1 - แถว, 4 - คอลัมน์)
excel.WorkBooks.WorkSheets.Cells := "และด้วยวิธีนี้คุณสามารถป้อนค่าลงในเซลล์";
excel.WorkBooks.WorkSheets.Cells := "และด้วยวิธีนี้คุณสามารถป้อนค่าลงในเซลล์";
//ป้อนสูตร "=b5+c4" ลงในเซลล์ "A12"
excel.WorkBooks.WorkSheets.Range["A12"].สูตร:="=b5+c4";
// จัดแถวแรกให้ตรงกลางในแนวตั้ง
excel.WorkBooks.WorkSheets.Rows.VerticalAlignment:= xlCenter;
// จัดแถวแรกในแนวนอนให้ตรงกลาง
excel.WorkBooks.WorkSheets.Rows.HorizontalAlignment:= xlCenter;
// จัดแนวเซลล์ไปทางซ้าย
excel.WorkBooks.WorkSheets.Cells.HorizontalAlignment:= xlLeft;
// จัดแนวเซลล์ไปทางขวา
excel.WorkBooks.WorkSheets.Cells.HorizontalAlignment:= xlRight;
// รวมเซลล์ "A1:A8"
excel.WorkBooks.WorkSheets.Range["A1:A8"].ผสาน;
// หมุนคำเป็นมุม 90 องศาสำหรับแถวที่สอง
excel.WorkBooks.WorkSheets.Rows.Orientation:= 90;
// หมุนคำเป็นมุม 45 องศาสำหรับช่วงเซลล์ "B3:D3"
excel.WorkBooks.WorkSheets.Range["B3:D3"].การวางแนว:= 45;
//ลากขอบเขตของช่วงที่เลือกไปทางซ้าย
excel.Selection.Borders.LineStyle:= xlContinuous; - สไตล์เส้นทึบ
excel.Selection.Borders.Weight:= xlMedium;// ความหนาของเส้น
//วาดขอบเขตของช่วงที่เลือกไว้ด้านบน
excel.Selection.Borders.Weight:= xlMedium;
//วาดขอบเขตของช่วงที่เลือกให้ต่ำลง
excel.Selection.Borders.Weight:= xlMedium;
//วาดขอบเขตของช่วงที่เลือกไปทางขวา
excel.Selection.Borders.Weight:= xlMedium;
//วาดขอบเขตของช่วงที่เลือกในแนวตั้งภายใน
excel.Selection.Borders.Weight:= xlMedium;
//วาดขอบเขตของช่วงที่เลือกในแนวนอนภายใน
excel.Selection.Borders.Weight:= xlMedium;
//ป้อนช่วงที่เลือกอัตโนมัติ
//เช่น เติมพื้นที่เซลล์ "A10:C10" ด้วยคำว่า "hello"
//และคูณลงไปอีกห้าเซลล์ "A10:C15"
excel.WorkBooks.WorkSheets.Range["A10:C10"].Value:="สวัสดี";
//เลือกช่วงของเซลล์ "A10:C10"
excel.WorkBooks.WorkSheets.Range["A10:C10"].เลือก;
//ป้อนอัตโนมัติ (คัดลอก) พื้นที่ของเซลล์ "A10:C15" ด้วยช่วงที่เลือก
excel.selection.autofill(excel.WorkBooks.WorkSheets.Range["A10:C15"],xlFillDefault);
// ปิดการใช้งานคำเตือนเพื่อไม่ให้ถามคำถามเกี่ยวกับการบันทึกและอื่น ๆ
excel.DisplayAlerts:= เท็จ;
//บันทึกเอกสารไปที่ รูปแบบ Excel 97-2003
excel.ActiveWorkBook.Saveas(GetCurrentDir() + "\report.xls",xlExcel8);
//บันทึกเอกสารในรูปแบบ Excel 2007 ปัจจุบัน
excel.ActiveWorkBook.Saveas(GetCurrentDir() + "\report.xlsx");
//ปิดหนังสือทั้งหมด
excel.Workbooks.ปิด;
//ปิด Excel
excel.Application.quit;
//ปลดปล่อยอินเทอร์เฟซ
excel:= ยังไม่ได้กำหนด;
//จัดการข้อผิดพลาด
//ปิดหนังสือทั้งหมด
excel.Workbooks.ปิด;
//ปิด Excel
excel.Application.quit;
//ปลดปล่อยอินเทอร์เฟซ
excel:= ยังไม่ได้กำหนด;
จบ;
จบ;
เมื่อได้ร่วมงานกับ แผ่นงาน Excelเราสามารถใช้ตัวเลือกต่อไปนี้:
- ทำงานร่วมกับพื้นที่ Range["B3:D3"]
- ทำงานกับเซลล์ Cells โดยที่ 2 คือแถว, 4 คือคอลัมน์
- ทำงานกับแถว แถว หรือช่วงของแถว แถว["1:5"];
- ทำงานกับคอลัมน์ คอลัมน์หรือช่วงของคอลัมน์ คอลัมน์["A:I"];
Range["A1"] และ Cells หมายถึงสิ่งเดียวกัน
หลังจากที่เอกสารถูกสร้างขึ้นหรือมีข้อผิดพลาดเกิดขึ้น คุณต้องปล่อยอินเทอร์เฟซอย่างถูกต้อง
มิฉะนั้นเมื่อปิด เอ็กเซลมันจะหายไปจากหน้าจอ แต่ถ้าคุณเปิดตัวจัดการงาน มันจะยังคงค้างอยู่ที่นั่นและถ้าเป็นเช่นนั้น กระบวนการนี้ยังไม่เสร็จสิ้นจากนั้นเมื่อเริ่มต้นใหม่แต่ละครั้งพวกเขาจะสะสมมากขึ้นเรื่อย ๆ จนกระทั่งคอมพิวเตอร์เริ่มค้าง ดังนั้นจึงจำเป็นต้องปล่อยอินเทอร์เฟซทั้งหมดที่เกี่ยวข้อง เอ็กเซลกับหนังสือและแผ่นงานของเขา
ตัวอย่างเช่น:
//ปิดหนังสือทั้งหมด
excel.Workbooks.ปิด;
//ปิด Excel
excel.Application.quit;
//ปลดปล่อยอินเทอร์เฟซ
แผ่นงาน:=ยังไม่ได้กำหนด; //ชีตอินเตอร์เฟสหากมันถูกสร้างขึ้น
สมุดงาน:= ยังไม่ได้กำหนด;//ส่วนต่อประสานสมุดงานหากถูกสร้างขึ้น
excel:= ยังไม่ได้กำหนด;//อินเทอร์เฟซของข้อเสนอเองหากถูกสร้างขึ้น
ด้านล่างนี้เป็นตัวอย่างของผลลัพธ์ใน Excel จากเดลฟี ตารางสูตรคูณพร้อมคำอธิบายโดยละเอียด
หน่วย หน่วยที่ 1;
การใช้งาน
Windows, ข้อความ, SysUtils, ตัวแปร, คลาส, กราฟิก, การควบคุม, แบบฟอร์ม,
กล่องโต้ตอบ, comobj, StdCtrls, Excel_TLB;
พิมพ์
TForm1 = คลาส (TForm)
Button1: T ปุ่ม;
ขั้นตอน Button1Click (ผู้ส่ง: TObject);
ส่วนตัว
(ประกาศส่วนตัว)
สาธารณะ
(ประกาศสาธารณะ)
จบ;
วาร์
แบบฟอร์ม 1: TForm1;
excel: ตัวแปร; // ตัวแปรที่สร้างวัตถุ EXCEL
MyData: ตัวแปร; // ตัวแปรที่สร้างตารางสูตรคูณ
ฉัน,j:จำนวนเต็ม;
การดำเนินการ
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
เริ่ม
พยายาม
// วัตถุ EXCEL
excel:= CreateOleObject("Excel.Application");
//เพื่อไม่ให้ถามคำถามเรื่องการบันทึกเอกสาร
excel.DisplayAlerts:= เท็จ;
//เอกสารใหม่
excel.WorkBooks.Add;
//ประกาศอาร์เรย์ตัวแปร
MyData:= VarArrayCreate(,varVariant);
สำหรับฉัน:= 1 ถึง 9 ทำ
สำหรับ J:= 1 ถึง 9 ทำ
ข้อมูลของฉัน:=i*j;
// รวมเซลล์ "A1:I1"
excel.WorkBooks.WorkSheets.Range["A1:I1"].ผสาน;
//เขียนชื่อเรื่อง
excel.WorkBooks.WorkSheets.Range["A1"].Value:="ตารางสูตรคูณ";
// จัดตำแหน่งหัวเรื่องให้อยู่ตรงกลาง
excel.WorkBooks.WorkSheets.Range["A1"].HorizontalAlignment:= xlCenter;
// กำหนดความกว้างของคอลัมน์ A เป็น I
excel.WorkBooks.WorkSheets.Columns["A:I"].ColumnWidth:= 3;
//เลือกพื้นที่ของตารางสูตรคูณ ["A2:I10"] และวาดเส้นขอบ
excel.WorkBooks.WorkSheets.Range["A2:I10"].เลือก;
//ลากขอบเขตของช่วงที่เลือกไปทางซ้าย
excel.Selection.Borders.LineStyle:= xlContinuous; // รูปแบบเส้นทึบ
excel.Selection.Borders.Weight:= xlThin; // ความหนาของเส้น
//วาดขอบเขตของช่วงที่เลือกไว้ด้านบน
excel.Selection.Borders.LineStyle:= xlContinuous;
excel.Selection.Borders.Weight:= xlThin;
//วาดขอบเขตของช่วงที่เลือกให้ต่ำลง
excel.Selection.Borders.LineStyle:= xlContinuous;
excel.Selection.Borders.Weight:= xlThin;
//วาดขอบเขตของช่วงที่เลือกไปทางขวา
excel.Selection.Borders.LineStyle:= xlContinuous;
excel.Selection.Borders.Weight:= xlThin;
//วาดขอบเขตของช่วงที่เลือกในแนวตั้งภายใน
excel.Selection.Borders.LineStyle:= xlContinuous;
excel.Selection.Borders.Weight:= xlThin;
//วาดขอบเขตของช่วงที่เลือกในแนวนอนภายใน
excel.Selection.Borders.LineStyle:= xlContinuous;
excel.Selection.Borders.Weight:= xlThin;
//กำหนดช่วง ["A2:I10"] ให้กับค่าของอาร์เรย์ตัวแปร MyData ซึ่งจะเพิ่มความเร็วในการทำงานมากกว่าเอาต์พุต // เซลล์
Excel.WorkBooks.WorkSheets.Range["A2:I10"].Value:=MyData;
//ทำให้มองเห็นได้
excel.Visible:= จริง;
//ปลดปล่อยอินเทอร์เฟซ
MyData:= ยังไม่ได้กำหนด;
excel:= ยังไม่ได้กำหนด;
ยกเว้น
showmessage("โปรดทราบ! เกิดข้อผิดพลาดขณะสร้างแอปพลิเคชัน MS Excel");
//ปิด Excel
excel.Application.quit;
//ปลดปล่อยอินเทอร์เฟซ
MyData:= ยังไม่ได้กำหนด;
excel:= ยังไม่ได้กำหนด;
จบ;
จบ;
เมื่อเขียนบทความนี้ มีการใช้เนื้อหาจากเว็บไซต์
คุณสามารถหยุดในแต่ละขั้นตอนของโมเดลนี้และศึกษาได้เป็นเวลาหลายเดือน หากมีความจำเป็นต้องศึกษาคุณสมบัติและวิธีการเพิ่มเติมเป็นพิเศษเราจะกลับมาศึกษาอย่างแน่นอน ตอนนี้เรามาเริ่มต้นทำงานใน Delphi ด้วยแผ่นงานสมุดงานกันดีกว่า
2. จะเปิดใช้งานแผ่นงานสมุดงาน Excel ได้อย่างไร?
ดังที่คุณทราบเมื่อสร้างสมุดงานเปล่า เอ็กเซล จะเพิ่ม 3 ลงในหนังสือเล่มนี้โดยอัตโนมัติ แผ่นเปล่า- หากต้องการทำงานกับแผ่นงานเฉพาะ ( แผ่นงานหรือเพียงแค่ แผ่น) ต้องเปิดใช้งานแผ่นงานนี้ วิธีหนึ่งในการเปิดใช้งานแผ่นงานสมุดงาน เอ็กเซล วี เดลฟี ดูเหมือนว่านี้:
สตริงทรัพยากร rsEInvalidSheetIndex = "ดัชนีที่ระบุสำหรับ WorkBooks ไม่ถูกต้อง การเปิดใช้งานแผ่นงานถูกยกเลิก"- rsEInvalidSheetActivate= "การเปิดใช้งานแผ่นงานเสร็จสมบูรณ์โดยมีข้อผิดพลาด"- ฟังก์ชั่น ActivateSheet(WBIndex: integer ; SheetName: string ) : boolean ;
var i: จำนวนเต็ม ; เริ่มต้น ผลลัพธ์ : = false ;ถ้า WBIndex > MyExcel. หนังสืองาน. นับแล้วเพิ่มข้อยกเว้น สร้าง (rsEInvalidSheetIndex);
ลอง i : = 1 ถึง MyExcel สมุดงาน [WBIndex] ชีต นับ ทำ if AnsiLowerCase (MyExcel. WorkBooks [ WBIndex]. Sheets . Item [ i]. Name ) = AnsiLowerCase (SheetName) จากนั้นเริ่ม MyExcel. สมุดงาน [WBIndex] ชีต รายการ[i] เปิดใช้งาน ; ผลลัพธ์: = จริง; หยุดพัก; จบ ; ยกเว้นยกข้อยกเว้น สร้าง (rsEInvalidSheetActivate);จบ ; จบ ;
ที่นี่ พารามิเตอร์ฟังก์ชันจะถูกตั้งค่าเป็นดัชนีสมุดงาน (WBIndex) ในคอลเลกชัน หนังสืองานและชื่อของแผ่นงาน
หากต้องการ คุณสามารถเปิดใช้งานแผ่นงานเดียวกันตามดัชนีในคอลเลกชันได้
แผ่นงาน แผ่นงาน.
- ในขณะเดียวกันฟังก์ชั่นก็ง่ายขึ้นเล็กน้อย (ไม่จำเป็นต้องมีเงื่อนไขในการตรวจสอบชื่อชีต)
นอกจากนี้หากคุณมั่นใจว่า แผ่นงาน.
ในขณะนี้
เนื่องจากสมุดงานที่คุณต้องการใช้งานอยู่ คุณสามารถหลีกเลี่ยงการใช้ตัวแปรพิเศษ (ดัชนีสมุดงาน WBIndex) และเปิดใช้งานแผ่นงานดังนี้: แผ่นงานเอ็กเซลของฉัน ActiveWorkBook. ชีต รายการ[i] เปิดใช้งาน ; 30 ตอนนี้เรามาดูวิธีการที่วัตถุใช้ให้ละเอียดยิ่งขึ้น
3. วิธีการแผ่นงาน Excel | ตอนนี้เรามาดูวัตถุโดยละเอียดมากขึ้น |
รูปนี้แสดงวิธีการต่างๆ ที่ผมเคยใช้ในการทำงาน | วัตถุทั้งหมด |
ผลรวม วิธีการต่าง ๆ ที่คุณสามารถใช้ได้วิธี คำอธิบายเปิดใช้งาน | |
ทำให้แผ่นงานปัจจุบันใช้งานได้ เราได้พูดคุยถึงวิธีการทำงานแล้ว | |
คำนวณทุกอย่าง | |
เปิดหนังสือ แผ่นงาน | |
, แผ่นงานเฉพาะในหนังสือหรือ | |
ช่วงที่กำหนด | |
เซลล์บนแผ่นงาน | |
ตรวจสอบการสะกดบนแผ่นงานที่เลือก บันทึกการเปลี่ยนแปลงทั้งหมดในไฟล์ ลบแผ่นงานปัจจุบันการเลือกแผ่นงาน | |
คัดลอกแผ่นงานไปยังตำแหน่งอื่นในสมุดงาน วางเนื้อหาของคลิปบอร์ดลงในแผ่นงานส่งคืนวัตถุที่แสดงถึงไดอะแกรมเดียว (object |
ChartObject
ChartObjects ) บนแผ่นงานการเคลื่อนย้ายแผ่นงาน วิธีนี้คล้ายกับวิธีการนี้ แผ่นงานสำเนา
- ข้อแตกต่างเพียงอย่างเดียวคือหลังจากวาง แผ่นงานที่คัดลอกจะถูกลบออกจากหนังสือ
ให้เราพิจารณาแต่ละวิธีที่นำเสนอข้างต้น
ด้านล่างเช่น การแสดงออกเป็นไปได้ไม่เพียงแต่สำหรับแผ่นงานเฉพาะในสมุดงาน Excel เท่านั้น ลองดูตัวเลือกสำหรับการเรียกวิธีคำนวณ
var MyExcel: OleVariant;
เอ็กเซลของฉัน คำนวณ
ข้อมูลโค้ดด้านล่างนี้จะคำนวณแผ่นงานที่ใช้งานอยู่
เอ็กเซลของฉัน ActiveWorkBook. ActiveWorkSheet. คำนวณ
มาคำนวณสูตรทั้งหมดในคอลัมน์ A, B และ C:
เอ็กเซลของฉัน ActiveWorkBook. ActiveWorkSheet. ใช้ช่วง. คอลัมน์("A:C") คำนวณ
วิธีการตรวจสอบการสะกด
การเรียกเมธอดมีลักษณะดังนี้:. การแสดงออกตรวจสอบการสะกด (พจนานุกรมแบบกำหนดเอง, ละเว้นตัวพิมพ์ใหญ่, แนะนำเสมอ, SpellLang) ) บนแผ่นงานขณะเดียวกัน. แผ่นงาน).
แผ่นควรยื่นออกมา ( | พารามิเตอร์ | ตอนนี้เรามาดูวัตถุโดยละเอียดมากขึ้น |
พิมพ์ | ตัวแปร | พจนานุกรมแบบกำหนดเองกับ |
สตริงที่ระบุชื่อของไฟล์พจนานุกรมผู้ใช้ที่จะพิจารณาหากไม่พบคำนั้นในพจนานุกรมหลัก หากละเว้นอาร์กิวเมนต์นี้ ระบบจะใช้พจนานุกรมเริ่มต้น | ตัวแปร | ละเว้นตัวพิมพ์ใหญ่จริง ถ้าจำเป็นก็เช่นนั้น ไมโครซอฟต์ เอ็กเซล ข้ามคำที่เขียนด้วยตัวพิมพ์ใหญ่เท็จ เพื่อ ไมโครซอฟต์ เอ็กเซล ตรวจสอบทุกคำ หากละเว้นข้อโต้แย้งนี้แล้วการตั้งค่าปัจจุบัน |
เอ็กเซล | ตัวแปร | ละเว้นตัวพิมพ์ใหญ่แนะนำเสมอ เพื่อ เพื่อที่จะ ข้ามคำที่เขียนด้วยตัวพิมพ์ใหญ่แสดงรายการคำแนะนำสำหรับการสะกดคำอื่นๆ เมื่อตรวจพบคำที่สะกดผิด เพื่อ , ถึง กำลังรอการป้อนข้อมูลการสะกดที่ถูกต้อง |
- หากละเว้นอาร์กิวเมนต์นี้ ระบบจะใช้การตั้งค่าปัจจุบัน | ตัวแปร | SpellLang ภาษาพจนานุกรม สามารถรับค่าของค่าคงที่ตัวใดตัวหนึ่งได้ MsoLanguageID เช่น สำหรับภาษารัสเซียสะกดภาษา = 1,049 , สำหรับภาษาอังกฤษ (สหรัฐอเมริกา) SpellLang = 1,033 |
ฯลฯ รายละเอียดเพิ่มเติมเกี่ยวกับตัวระบุภาษา
จะตรวจสอบไวยากรณ์บนแผ่นงาน Excel ใน Delphi ได้อย่างไร
เอ็กเซลของฉัน ActiveWorkBook. ActiveWorkSheet. ตรวจสอบการสะกด(CustomDictionary:=EmptyParam, IgnoreUppercase:=false, AlwaysSuggest:=EmptyParam, SpellLang:=1033) เอ็มเอส เอ็กเซล ในกรณีนี้ จะตรวจสอบชีตปัจจุบันรวมถึงตรวจสอบคำจากตัวพิมพ์ใหญ่ - ภาษาที่ใช้ยืนยันคือภาษารัสเซีย โปรดทราบว่าเพื่อที่จะเรียกใช้เมธอด เราได้ระบุอย่างชัดเจนว่าพารามิเตอร์ใดที่จะกำหนดค่าใด ยิ่งกว่านั้น เพื่อที่จะข้ามพารามิเตอร์ใด ๆ เราใช้ว่างเปล่าพารามิเตอร์ เดลฟี (พารามิเตอร์ว่าง) ซึ่งอยู่ใน โอเล่วาเรียนท์.
เป็นตัวแปรประเภท เดลฟี เป็นที่ชัดเจนว่าวิธีการเรียกวิธีการนี้ (โดยระบุพารามิเตอร์ทั้งหมดอย่างชัดเจน) ไม่สะดวกสำหรับคุณโดยสิ้นเชิงและไม่ได้รับการฝึกฝนอย่างกว้างขวางในการเขียนโปรแกรมเป็นภาษาอังกฤษ เอ็กเซล .
แต่อย่างไรก็ตาม นี่เป็นวิธีเดียวและไม่มีวิธีอื่นในการเรียกวิธีการที่ใช้
วิธีการบันทึกเป็น
การบันทึกแผ่นงานแผ่นงาน Excel
expression.SaveAs(ชื่อไฟล์, รูปแบบไฟล์, รหัสผ่าน, WriteResPassword, ReadOnlyRecommended, CreateBackup, AddToMru, TextCodepage, TextVisualLayout, Local)แผ่นควรยื่นออกมา ( | พารามิเตอร์ | ตอนนี้เรามาดูวัตถุโดยละเอียดมากขึ้น |
ชื่อไฟล์ | ตัวแปร | สตริงที่แสดงชื่อของไฟล์ที่จะบันทึก จะต้องระบุ เส้นทางเต็มลงในไฟล์ มิฉะนั้นไฟล์จะถูกบันทึกลงในโฟลเดอร์ เอ็กเซล . |
FileFormat | ตัวแปร | รูปแบบไฟล์ที่ใช้ในการบันทึก ตามค่าเริ่มต้น ไฟล์จะถูกบันทึกในรูปแบบที่คุณเลือก ครั้งสุดท้ายวี เอ็กเซล |
รหัสผ่าน | ตัวแปร | รหัสผ่านสำหรับไฟล์ (ไม่เกิน 15 ตัวอักษร) รหัสผ่านต้องตรงตามตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ |
WriteResPassword | ตัวแปร | รหัสผ่านที่จะใช้ในการเปลี่ยนแปลงสมุดงาน หากไม่ได้ระบุรหัสผ่าน หนังสือจะถูกเปิดในโหมดอ่านอย่างเดียว |
อ่านอย่างเดียวแนะนำ | ตัวแปร | ถ้าพารามิเตอร์เท่ากัน ละเว้นตัวพิมพ์ใหญ่จากนั้นเมื่อเปิดไฟล์จะมีข้อความปรากฏขึ้นบนหน้าจอแนะนำให้เปิดไฟล์แบบอ่านอย่างเดียว |
สร้างการสำรองข้อมูล | ตัวแปร | ละเว้นตัวพิมพ์ใหญ่เพื่อสร้างไฟล์สำรอง |
AddToMru | ตัวแปร | ละเว้นตัวพิมพ์ใหญ่เพื่อเพิ่มชื่อไฟล์ที่บันทึกไว้ในรายการล่าสุด เปิดไฟล์ในเมนูหลัก เอ็กเซล |
ข้อความรหัสเพจและ ข้อความ VisualLayout | ตัวแปร | ไม่ได้ใช้ในปัจจุบันและเก็บรักษาไว้เพื่อความเข้ากันได้แบบย้อนหลัง |
ท้องถิ่น | ตัวแปร | ไม่ พารามิเตอร์ที่จำเป็นโดยค่าเริ่มต้นจะเท่ากับ เท็จ.ความหมาย ละเว้นตัวพิมพ์ใหญ่- บันทึกไฟล์จาก ภาษาไมโครซอฟต์ Excel (รวมถึงการตั้งค่าแผงควบคุม) |
MyExcel.ActiveWorkBook.ActiveWorkSheet.SaveAs("C\:MyExcelFile.xls")
ในกรณีนี้ การตั้งค่าเริ่มต้นจะถูกใช้เมื่อทำการบันทึก
หากคุณต้องการประหยัด ไฟล์เอ็กเซลในรูปแบบอื่น จากนั้นในพารามิเตอร์ FileFormatคุณสามารถใช้ค่าตัวแจงนับค่าใดค่าหนึ่งได้ xlFileFormat - ความหมายบางอย่าง xlFileFormat ดังแสดงในตารางด้านล่าง:
ชื่อ | ความหมาย | ตอนนี้เรามาดูวัตถุโดยละเอียดมากขึ้น | นามสกุลไฟล์ |
xlCSV | 6 | ซีเอสวี | *.csv |
xlExcel8 | 56 | สมุดงาน Excel 97-2003 | *.xls |
xlHtml | 44 | รูปแบบ HTML | *.htm; *.HTML |
xlOpenDocumentSpreadsheet.xls | 60 | สเปรดชีต OpenDocument | *.ods |
xlOpenXMLWorkbook.xlsx | 51 | เปิดหนังสือ XML | *.xlsx |
มาเขียนขั้นตอนเล็ก ๆ ที่ให้คุณบันทึกแผ่นงาน Excel ในรูปแบบต่างๆ:
constxlCSV = 6 ; xlExcel8 = 56 ; xlHtml = 44 ;
xlOpenDocumentSpreadsheet = 60 ;
xlOpenXMLWorkbook = 51 ;
สตริงทรัพยากร rsESaveActiveSheet =
"เกิดข้อผิดพลาดในการบันทึกแผ่นงานที่ใช้งานอยู่"
- ขั้นตอน SaveAs (const AFileName: TFileName; AFileFormat: integer ) ;
คัดลอกแผ่นงานไปยังตำแหน่งอื่นในสมุดงาน
การบันทึกแผ่นงานแผ่นงาน Excel
expression.Copy (ก่อน, หลัง)อย่างไรก็ตามหากคุณใช้พารามิเตอร์ ก่อนแล้วคุณไม่ควรใช้ หลังจากและในทางกลับกัน ฉันขอดึงความสนใจของคุณไปที่ข้อเท็จจริงที่ว่านี่คือ SHEET ที่ระบุไม่ใช่ดัชนีชีต
วิธีคัดลอกแผ่นงาน Excel ไปยัง Delphi
MyExcel.ActiveWorkBook.WorkSheets.Item.Copy (หลัง:= MyExcel.ActiveWorkBook.WorkSheets.Item)
ในกรณีนี้ แผ่นงานแรกจะถูกคัดลอกและวางหลังจากแผ่นงานที่สาม
วิธีการวาง
วางเนื้อหาของคลิปบอร์ดลงในแผ่นงาน Excel
การบันทึกแผ่นงานแผ่นงาน Excel
expression.Paste(ปลายทาง, ลิงก์)วิธีวางเนื้อหาคลิปบอร์ดลงในแผ่นงาน Excel ใน Delphi
MyExcel.ActiveWorkBook.ActiveSheet.Paste(Destination:=MyExcel.ActiveWorkBook.ActiveSheet.Range("D1:D5"))
ในกรณีนี้ เนื้อหาของบัฟเฟอร์จะถูกแทรกลงในคอลัมน์ D ในแถวที่ 1 ถึง 5 ควรสังเกตว่าหากเนื้อหาของบัฟเฟอร์ไม่ตรงตามเงื่อนไข เช่น มีเพียง 1 หมายเลขในบัฟเฟอร์ แล้ว สถานการณ์พิเศษ.
วิธี ลบแผ่นงานปัจจุบัน
ส่งกลับวัตถุที่แสดงถึงไดอะแกรมเดียว (object บันทึกการเปลี่ยนแปลงทั้งหมดในไฟล์) หรือการรวบรวมไดอะแกรมทั้งหมด (object ลบแผ่นงานปัจจุบัน) บนแผ่นงาน
การบันทึกแผ่นงานแผ่นงาน Excel
expression.ChartObjectsวิธีรับแผนภูมิในแผ่นงาน Excel ใน Delphi
MyExcel.ActiveWorkBook.ActiveSheet.ChartObjects
ในกรณีนี้จะได้รับอันแรก
วิธีย้าย
การย้ายแผ่นงาน วิธีการนี้คล้ายกับ. ข้อแตกต่างเพียงอย่างเดียวคือหลังจากวาง แผ่นงานที่คัดลอกจะถูกลบออกจากหนังสือ
นี่คือส่วนหนึ่งของวิธีการที่ฉันเคยใช้เมื่อทำงานด้วย เอ็กเซล วี เดลฟี - โดยทั่วไปอาจกล่าวได้ว่าใน เดลฟี สามารถควบคุมได้ เอ็มเอส เอ็กเซล ไม่เลวร้ายไปกว่าการทำงานโดยตรงกับแอปพลิเคชันนี้สิ่งสำคัญคืออย่าลืมว่าวิธีการหรือทรัพย์สินใดรับผิดชอบต่อสิ่งใด :) เพื่อไม่ให้ลืม ฉันได้สร้าง MindMap ขนาดเล็กขึ้นมา ซึ่งฉันจะเสริมและอัปเดตเป็นระยะๆ เมื่อคลิกที่ลิงค์ คุณจะเห็นออบเจ็กต์ Excel วิธีการที่ใช้ พารามิเตอร์ของวิธีการ และประเภทตามนั้น ประเภทเดลฟี- โดยทั่วไป แผ่นโกงกราฟิกขนาดเล็กสำหรับผู้ที่ต้องการปรับแต่ง Excel ใน Delphi
ในบทความนี้ เราจะดูโครงสร้างพื้นฐานที่ช่วยให้คุณเข้าถึงสมุดงาน MS Excel จาก Delphi
จัดระเบียบการเข้าถึงหนังสือ EXCEL
หากต้องการโต้ตอบกับ MS Excel ในโปรแกรม คุณต้องใช้โมดูล ComObj
ใช้ ComObj;
และประกาศตัวแปรเพื่อเข้าถึง MS เอ็กเซลต่อไปพิมพ์:
Var MsExcel: ตัวแปร;
ในกรณีที่ง่ายที่สุด การเริ่มต้นตัวแปร Excel สามารถทำได้ดังนี้:
MsExcel:= CreateOleObject("Excel.Application");
ออฟเซ็ต: จำนวนเต็ม = 64; var อันดับ: ไบต์;
MsExcel.Workbooks.Add;
การเปิดหนังสือที่มีอยู่ (โดยที่ path คือเส้นทางไปยังไฟล์ที่มีนามสกุล xls):
MsExcel.Workbooks.เปิด;
จบ; ผลลัพธ์:= ผลลัพธ์ + Chr(Tmp + ออฟเซ็ต);
MsExcel.Workbooks.เปิด;
Col:= Col - Trunc(กำลัง(CharsCount,อันดับ)) * Tmp;
MsExcel.ActiveWorkbook.ปิด; MsExcel.Application.ออก;
การบล็อกคำขอ Ms Excel (การยืนยัน การแจ้งเตือน) เช่น การบล็อกคำขอบันทึกไฟล์:
MsExcel.DisplayAlerts:=เท็จ;
แสดง Excel บนหน้าจอ:
MsExcel.Visible:= จริง;
หรือซ่อน:
MsExcel.Visible:= เท็จ;
การพิมพ์เนื้อหาของแผ่นงาน MS Excel ที่ใช้งานอยู่:
MsExcel.ActiveSheet.PrintOut;
การอ่าน/เขียนข้อมูลใน EXCEL
คุณสามารถเข้าถึงเซลล์ในสมุดงาน Excel ปัจจุบันได้ดังนี้:
ในการเขียนค่าลงในเซลล์:
MsExcel.Range["B2"]:="สวัสดี!";
หากต้องการอ่านค่าจากเซลล์:
S:=MsExcel.Range["B2"];
ที่ไหน บี2- ที่อยู่เซลล์
หรือใช้รูปแบบลิงก์ R1C1:
MsExcel.Range]:="สวัสดี!";
ที่ไหน - พิกัดของเซลล์
โดยทั่วไป คุณสามารถกำหนดค่าใดๆ ให้กับเซลล์ Excel ได้ (อักขระ จำนวนเต็ม เศษส่วน วันที่) และ Ms Excel จะตั้งค่าการจัดรูปแบบเริ่มต้นในเซลล์
จัดรูปแบบเซลล์ใน EXCEL
คุณสามารถเลือก (เลือก) กลุ่มเซลล์สำหรับงานต่อไปได้ดังนี้:
MsExcel.Range, MsExcel.Cells] เลือก; // หรือ MsExcel.Range["A1:C5"].เลือก;
ในกรณีนี้ พื้นที่ที่อยู่ระหว่างเซลล์ A1 และ C5 จะถูกเลือก
หลังจากทำการเลือกแล้ว คุณสามารถตั้งค่าการรวมเซลล์ การตัดคำ และแนวนอน และ การจัดตำแหน่งตามแนวตั้ง:
// ผสานเซลล์ MsExcel.Selection.MergeCells:=True; // ตัดตาม MsExcel.Selection.WrapText:=True; // การจัดตำแหน่งแนวนอน MsExcel.Selection.HorizontalAlignment:=3; // การจัดตำแหน่งแนวตั้ง MsExcel.Selection.VerticalAlignment:=1;
สำหรับแนวตั้งและ การจัดตำแหน่งแนวนอนมีการใช้ค่าต่อไปนี้:
1 - ใช้การจัดตำแหน่งเริ่มต้น
2 - การจัดตำแหน่งด้านซ้าย
3 - อยู่ตรงกลาง
4 - ทางด้านขวา
เส้นขอบเซลล์
เมื่อตั้งค่าเป็น 1 เส้นขอบเซลล์จะถูกวาดด้วยเส้นทึบบางๆ
นอกจากนี้ คุณสามารถระบุค่าสำหรับคุณสมบัติ Borders ได้ เช่น เท่ากับ 3 จากนั้นจะตั้งค่าเฉพาะเส้นขอบด้านบนสำหรับบล็อกการเลือกเท่านั้น:
MsExcel.Selection.Borders.LineStyle:=1;
ค่าของคุณสมบัติ Borders ระบุการผสมผสานของขอบเซลล์ที่แตกต่างกัน ในทั้งสองกรณี คุณสามารถใช้ค่าในช่วงตั้งแต่ 1 ถึง 10
การใช้รหัสผ่านใน EXCEL
การตั้งรหัสผ่านสำหรับสมุดงานที่ใช้งานอยู่สามารถทำได้ดังนี้:
ลอง // พยายามตั้งรหัสผ่าน MsExcel.ActiveWorkbook.protect("pass"); ยกเว้น // การกระทำหากความพยายามในการตั้งรหัสผ่านล้มเหลว
ที่ไหน ผ่าน- ตั้งรหัสผ่านสำหรับหนังสือ
การลบรหัสผ่านออกจากหนังสือก็คล้ายกัน ใช้คำสั่ง
MsExcel.ActiveWorkbook.Unprotect("ผ่าน");
ที่ไหน ผ่าน
การตั้งค่าและการลบรหัสผ่านสำหรับแผ่นงานที่ใช้งานอยู่ของสมุดงาน Excel ทำได้โดยใช้คำสั่ง
MsExcel.ActiveSheet.protect("ผ่าน"); // ตั้งรหัสผ่าน MsExcel.ActiveSheet.Unprotect("pass"); // ลบรหัสผ่าน
ที่ไหน ผ่าน- ตั้งรหัสผ่านเพื่อป้องกันหนังสือ
การดำเนินการเสริมใน EXCEL
การลบแถวด้วยการเลื่อนขึ้น:
MsExcel.Rows["5:15"].เลือก; MsExcel.การเลือก.;
เมื่อดำเนินการเหล่านี้ บรรทัดที่ 5 ถึง 15 จะถูกลบ
ตั้งค่าพื้นที่แช่แข็งบนแผ่นงาน Excel ที่ใช้งานอยู่
// ยกเลิกการตรึงพื้นที่หากตั้งค่าไว้ MsExcel.ActiveWindow.FreezePanes:=False; // เลือกเซลล์ที่ต้องการ ในกรณีนี้คือ D3 MsExcel.Range["D3"].Select; // ตั้งค่าพื้นที่แช่แข็ง MsExcel.ActiveWindow.FreezePanes:=True;
การบันทึกสมุดงาน Excel ที่ใช้งานอยู่