วิธีทำให้แผ่นงาน Excel ใช้งานได้ delphi xe5 การเข้าถึง Excel จาก Delphi

แลกเปลี่ยนข้อมูลกับ เอ็มเอส เอ็กเซลวี เดลฟีด้วยความช่วยเหลือ โอเล่.

สวัสดีเพื่อนร่วมงานที่รัก!

ไม่ช้าก็เร็วเราทุกคนต้องเผชิญกับภารกิจในการแลกเปลี่ยนข้อมูลกับแอปพลิเคชันแพ็คเกจ เอ็มเอส ออฟฟิศ- หนึ่งในนั้นก็คือ เอ็มเอส เอ็กเซล- และโดยเฉพาะเกี่ยวกับการโต้ตอบกับผลิตภัณฑ์นี้ เอ็มเอส ออฟฟิศจะมีการหารือในบทความนี้

วิธีหนึ่งในการโต้ตอบ เดลฟีเอ็มเอส เอ็กเซล- คือการเชื่อมต่อให้เป็น โอเล่วัตถุ.

ดังนั้น.
ก่อนอื่นเลยในการทำงานด้วย เอ็มเอส เอ็กเซลและ โอเล่เพิ่มในส่วน การใช้งานโมดูล 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 ดังแสดงในตารางด้านล่าง:

ชื่อ ความหมาย ตอนนี้เรามาดูวัตถุโดยละเอียดมากขึ้น นามสกุลไฟล์
xlCSV6 ซีเอสวี*.csv
xlExcel856 สมุดงาน Excel 97-2003*.xls
xlHtml44 รูปแบบ HTML*.htm; *.HTML
xlOpenDocumentSpreadsheet.xls60 สเปรดชีต OpenDocument*.ods
xlOpenXMLWorkbook.xlsx51 เปิดหนังสือ 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 ที่ใช้งานอยู่