การทำงานกับ Excel จาก Delphi การเข้าถึง 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"); จบ; ตอนนี้คุณสามารถเพิ่มปุ่มได้ เมื่อคลิกแล้วเราจะเชื่อมต่อกันโดยใช้ฟังก์ชันเขียน:

ขั้นตอน btnConnectClick(ผู้ส่ง: TObject); เริ่มต้นถ้าไม่ใช่ IsXlsInstall ให้เพิ่ม Exception.Create("ไม่พบแอปพลิเคชัน MS Excel บน เอ็กเซลเริ่มใน พื้นหลัง- เส้น 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.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:=จริง;


สวัสดี ในบทความนี้ ฉันจะบอกวิธีการใช้งานในแอปพลิเคชัน (โปรแกรม) ของคุณ เดลฟี DB ในรูปแบบ เอ็มเอส เอ็กเซล- ใช่ ใช่ เป๊ะเลย เอ็มเอส เอ็กเซล- ไม่มีอะไรซับซ้อนที่นี่ ก่อนอื่น เรามากรอกแผ่นงานของเราใน MS Excel กันก่อน บรรทัดแรกในแต่ละคอลัมน์จะใช้แอปพลิเคชันของเราเป็นชื่อของคอลัมน์เสมอ กล่าวคือ จะไม่ใช้ชื่อของคอลัมน์เช่นนี้ - , บี, และอื่น ๆ ดังนั้นในบรรทัดแรกของคอลัมน์ A และคอลัมน์ B ที่ฉันเขียน ชื่อเต็มและ ระดับตามลำดับสำหรับแต่ละคอลัมน์ นี่จะเป็นหัวข้อของเราจากนั้นฉันกรอกข้อมูลที่จะอยู่ในฐานข้อมูลด้านล่างเขียนชื่อและการให้คะแนนด้วยตัวเอง ดังนั้นฐานข้อมูลของเราจึงพร้อม ตอนนี้เรามาสร้างการเชื่อมต่อกับมันกันดีกว่า การเชื่อมต่อถูกสร้างขึ้นคล้ายกับ เอ็มเอส แอคเซสดังนั้นจึงไม่มีอะไรซับซ้อนที่นี่ ในแบบฟอร์มเรามีส่วนประกอบเก่า:

  • TDBGrid
  • TADOQuery
  • ทาโดคอนเน็คชั่น
  • TDataSource

ฉันจะบอกวิธีเชื่อมต่อส่วนประกอบเหล่านี้อย่างรวดเร็วเนื่องจากฉันได้กล่าวไว้แล้ว

  • TADOQueryทาโดคอนเน็คชั่นในทรัพย์สิน - การเชื่อมต่อ
  • TDataSourceกับ TADOQueryในทรัพย์สิน ชุดข้อมูล
  • TDBGridTDataSourceในทรัพย์สิน แหล่งข้อมูล

// เรียก ทาโดคอนเน็คชั่นตั้งค่าคุณสมบัติ ลองพรอมท์วี เท็จ- ดูเหมือนว่า การตั้งค่าขนาดเล็กเสร็จแล้ว. ตอนนี้เรามาถึงการเชื่อมต่อโดยตรง ในทรัพย์สิน ทาโดคอนเน็คชั่น- ConnectionStringคลิกที่ปุ่ม " “แล้วเราก็จะมีหน้าต่างชมวิว

คลิกที่ปุ่ม " สร้าง..." และหน้าต่างต่อไปนี้จะปรากฏขึ้น

ในหน้าต่างนี้ เลือกผู้ให้บริการต่อไปนี้: ผู้ให้บริการ Microsoft OLE DB สำหรับไดรเวอร์ ODBCและกดปุ่ม " ถัดไป>>" และดูหน้าต่างต่อไปนี้

ในหน้าต่างนี้ ให้วางตัวชี้ไปที่ " ทันที ใช้สตริงการเชื่อมต่อ" และคลิกที่ปุ่ม " การประกอบ“ หลังจากนั้นจะมีหน้าต่างปรากฏขึ้น

ในหน้าต่างนี้ ไปที่แท็บแหล่งข้อมูลคอมพิวเตอร์ ในรายการที่ปรากฏ ให้เลือก - ไฟล์เอ็กเซลหรือคลิกซ้ายที่วันที่นี้ ดับเบิลคลิกและในหน้าต่างที่ปรากฏขึ้นให้ระบุเส้นทางมาที่เรา เอ็กเซล- หนังสือที่เราสร้าง หลังจากนั้นคลิกที่ปุ่ม “ ตกลง- เรามีการเชื่อมต่อทั้งหมดพร้อมแล้ว ฉันต้องการเพิ่มมากขึ้นถ้าคุณมีไฟล์ เอ็กเซลโดยที่ตารางของคุณอยู่ในไดเรกทอรีเดียวกันกับโปรแกรม จากนั้นอยู่ในคุณสมบัติส่วนประกอบ ทาโดคอนเน็คชั่น- ConnectionStringเส้นทางไปยังไฟล์ Excel ของคุณจะถูกจดไว้ ลบเส้นทางและเหลือเพียงชื่อของคุณ เอ็กเซลไฟล์ที่มีนามสกุลและในคุณสมบัติ ฐานข้อมูลเริ่มต้นองค์ประกอบเดียวกันเขียนชื่อของคุณ เอ็กเซล- ไฟล์ที่มีนามสกุล . จากนั้น เมื่อคุณเปิดแอปพลิเคชัน จะไม่มีข้อผิดพลาดในเส้นทางไปยังฐานข้อมูลของคุณที่ระบุอย่างไม่ถูกต้อง ต่อไปใน TDBGridดับเบิลคลิกแล้วสร้าง 2 แถวในหน้าต่างที่ปรากฏขึ้น ซึ่งจะเป็นคอลัมน์ของเรา และสร้างขึ้นโดยคลิกที่ปุ่ม “ เพิ่มใหม่ (Ins)- ต่อไป ให้เลือกแต่ละบรรทัดในคุณสมบัติ FieldName สำหรับบรรทัดแรกเราจะเขียน - ชื่อเต็มตั้งแต่ใน เอ็กเซล-file นี่คือวิธีที่ฉันเขียนชื่อคอลัมน์ในบรรทัดแรก (สำหรับเซลล์ A1ฉันเขียนแบบนี้) และโดยเน้นบรรทัดที่สองที่สร้างขึ้นมา TDBGrid, ในทรัพย์สิน ชื่อฟิลด์มาเขียนกันเถอะ - ระดับเนื่องจากฉันเป็นคนเขียนชื่อคอลัมน์นี้ (ในเซลล์ A2ฉันเขียนแบบนั้น) ตอนนี้เราสามารถเปิดใช้งานข้อมูลของเราได้แล้ว สำหรับงานนี้ แบบฟอร์มหลักOnCreateมาเขียนสิ่งต่อไปนี้กัน

อย่างที่คุณเห็น แบบสอบถามเดียวกัน แทนที่จะเป็นชื่อของตารางเท่านั้น ตามที่เรามี เอ็มเอส แอคเซสเราระบุชื่อแผ่นงานของเรามา เอ็กเซลโดยปิดไว้ในวงเล็บเหลี่ยมและลงท้ายด้วย $ - อย่างที่คุณเห็นไม่มีอะไรซับซ้อน ในบทความถัดไปเกี่ยวกับฐานข้อมูล เอ็มเอส เอ็กเซลฉันจะบอกวิธีแทรกข้อมูล แก้ไข และอื่นๆ

ฉันอยากจะทราบว่าหากคุณเป็นแฟนฟุตบอลตัวจริงและโดยเฉพาะอย่างยิ่งการแข่งขันชิงแชมป์อังกฤษที่กำลังดำเนินอยู่ ในขณะนี้เป็นหนึ่งในผู้ที่แข็งแกร่งที่สุด แล้วคุณคงจะสนใจอ่านเกี่ยวกับสโมสรฟุตบอลเป็นอย่างมาก

เราดูในนิกาย 6.4.2 การดำเนินงานขั้นพื้นฐานที่เกี่ยวข้องกับหนังสือ ตอนนี้เรามาดูการดำเนินการกับแผ่นหนังสือกันดีกว่า คอลเลกชันของแผ่นงานมีอยู่ในคุณสมบัติแผ่นงานของออบเจ็กต์หนังสือ คอลเลกชันนี้มีคุณสมบัติคล้ายคลึงกับคอลเลกชันสมุดงานที่กล่าวถึงก่อนหน้านี้ สามารถเข้าถึงแผ่นงานได้โดยดัชนีหรือตามชื่อ ตัวอย่างเช่น ข้อความต่อไปนี้เมื่อทำงานกับเซิร์ฟเวอร์ COM ให้เปิดและเปิดใช้งานแผ่นงานแรกของสมุดงานที่แสดงโดยวัตถุ Excel Workbook 1 ส่งตัวชี้ไปยังแผ่นงานนี้ไปยังตัวแปรแผ่นงาน Excel 1 และเปิดใช้งานแผ่นงาน เช่น ไฮไลต์ในหน้าต่าง Excel:

ExcelWorksheetl:= ExcelWorkbookl.Worksheets เป็น ExcelWorksheet; ExcelWorksheetl.เปิดใช้งาน(LOCALE_USER_DEFAULT);

ExcelWorksheetl:= ExcelWorkbookl.แผ่นงาน; ExcelWorksheetl.เปิดใช้งาน;

คุณสมบัติแผ่นงานยังมีอยู่บนวัตถุเซิร์ฟเวอร์ด้วย คุณสมบัตินี้ใช้กับสมุดงานที่ใช้งานอยู่ ดังนั้นคำสั่งต่อไปนี้เมื่อทำงานกับเซิร์ฟเวอร์ COM ให้ดำเนินการกับสมุดงานที่ใช้งานอยู่โดยการเปิดและเปิดใช้งานแผ่นงานในนั้นซึ่งมีการระบุชื่อ (เช่น "Sheet1") ในหน้าต่างแก้ไข Editl:

แผ่นงานเป็น ExcelWorksheet; ExcelWorksheetl.Activate (ค่าเริ่มต้นของผู้ใช้ท้องถิ่น);

เมื่อทำงานกับเซิร์ฟเวอร์อัตโนมัติของ OLE คำสั่งที่คล้ายกันจะมีลักษณะดังนี้:

ExcelWorksheetl:= ExcelApplicationl.แผ่นงาน; ExcelWorksheetl.เปิดใช้งาน;

ถ้าเป็นแผ่นด้วย ชื่อที่กำหนดไม่มีอยู่ในหนังสือ จะมีการยกเว้นไว้ ดังนั้นหากมีอันตรายดังกล่าวควรจับข้อยกเว้นนี้ไว้ เช่น

ExcelWorksheetl:= แอปพลิเคชัน Excel

แผ่นงานเป็น ExcelWorksheet; ExcelWorksheetl.เปิดใช้งาน(LOCALE_USER_DEFAULT); ยกเว้น

ShowMessage("เราไม่สามารถเปิดแผ่นงาน "" + Editl.Text + """); จบ;

เพิ่ม ใบใหม่ลงในสมุดงานโดยใช้วิธีเพิ่มของวัตถุแผ่นงาน:

เพิ่มฟังก์ชัน (ก่อน: OleVariant; หลัง: OleVariant; จำนวน: OleVariant; Type_: OleVariant; lcid: จำนวนเต็ม): IDispatch;

พารามิเตอร์ก่อนหรือหลังคือวัตถุแผ่นงานก่อนหรือหลังการแทรกเกิดขึ้น โดยปกติแล้ว การตั้งค่าเพียงหนึ่งพารามิเตอร์เหล่านี้และตั้งค่าอีกพารามิเตอร์หนึ่งเป็น EmptyParam ก็เพียงพอแล้ว หากพารามิเตอร์ทั้งสองเท่ากับ EmptyParam แผ่นงานใหม่จะถูกแทรกก่อนแผ่นงานที่ใช้งานปัจจุบัน พารามิเตอร์ Count ระบุจำนวนแผ่นงานที่จะแทรก หากพารามิเตอร์นี้เท่ากับ EmptyParam แสดงว่ามีการแทรกหนึ่งแผ่นงาน พารามิเตอร์ Type__ กำหนดประเภทการแทรก เมื่อตั้งค่าเป็น EmptyParam แผ่นงานเปล่าใหม่จะถูกแทรก

ตัวอย่างเช่น รหัสต่อไปนี้ เมื่อทำงานกับเซิร์ฟเวอร์ COM ให้แทรกแผ่นงานใหม่หนึ่งแผ่นก่อนแผ่นงานที่ใช้งานอยู่ของสมุดงานที่ใช้งานอยู่ และส่งตัวชี้ไปยังตัวแปร ExcelWorksheetl:

EmptyParam, EmptyParam, EmptyParam, EmptyParam, LOCALE_USER_DEFAULT) เป็น ExcelWorksheet;

และโค้ดต่อไปนี้จะแทรกแผ่นงานใหม่สองแผ่นหลังแผ่นงานที่สามของสมุดงานที่ใช้งานอยู่:

ภายหลัง, หมายเลข: OleVariant; หลัง:= ExcelApplicationl.Worksheets; หมายเลข:= 2;

ExcelWorksheetl:= ExcelApplicationl.Worksheets.Add(

EmptyParam,After,Num,EmptyParam, LOCALE_USER_DEFAULT) เป็น ExcelWorksheet;

เมื่อทำงานกับเซิร์ฟเวอร์อัตโนมัติของ OLE คำสั่งที่คล้ายกันจะมีลักษณะดังนี้:

ExcelWorksheetl:= ExcelApplicationl.Worksheets.Add;

ExcelWorksheetl:= ExcelApplicationl.Worksheets.Add(

หลัง:= ExcelApplicationl.Worksheets, จำนวน:= 2);

ชื่อของแผ่นงานที่แทรกหรือแผ่นงานที่มีอยู่สามารถเปลี่ยนแปลงได้โดยใช้คุณสมบัติชื่อ ตัวอย่างเช่น:

ExcelWorksheetl.Name:= "ใบแจ้งหนี้"; คุณสามารถลบแผ่นงานออกจากสมุดงานโดยใช้วิธีการลบ:

ExcelWorksheetl.Delete(LOCALE_USER_DEFAULT);

คุณสามารถพิมพ์แผ่นงานโดยใช้วิธีการพิมพ์ ซึ่งไม่แตกต่างจากวิธีการที่คล้ายกันที่อธิบายไว้ก่อนหน้านี้สำหรับหนังสือ เช่น การพิมพ์ หน้าปัจจุบันเมื่อทำงานกับเซิร์ฟเวอร์ COM สามารถออกแบบได้ดังนี้:

ExcelWorksheetl:= ExcelApplicationl.ActiveSheet เป็น ExcelWorksheet; ExcelWorksheetl.Printout (EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, LOCALE_USER_DEFAULT);

เมื่อทำงานกับเซิร์ฟเวอร์อัตโนมัติ OLE มันจะง่ายกว่า:

ExcelWorksheetl:= ExcelApplicationl.ActiveSheet; ExcelWorksheetl.งานพิมพ์;

คุณสามารถดูตัวอย่างแผ่นงานก่อนที่จะพิมพ์โดยใช้วิธี PrintPreview:

ขั้นตอน PrintPreview (เปิดใช้งานการเปลี่ยนแปลง: OleVariant; leid: Integer);

พารามิเตอร์ EnableChanges ระบุว่าสามารถทำการเปลี่ยนแปลงในขณะที่ดูได้หรือไม่ ตัวอย่างเช่น ข้อความต่อไปนี้ระบุเมื่อทำงานกับเซิร์ฟเวอร์ COM ดูตัวอย่างแผ่นงานที่ใช้งานอยู่ของหนังสือ:

(ExcelApplicationl.ActiveSheet เป็น ExcelWorksheet)

PrintPreview (จริง, LOCALE_USER_DEFAULT);

สำหรับเซิร์ฟเวอร์ OLE คำสั่งที่คล้ายกันจะมีลักษณะดังนี้:

ExcelApplicationl.ActiveSheet;PrintPreview(จริง);

คุณสามารถหยุดในแต่ละขั้นตอนของโมเดลนี้และศึกษาได้เป็นเวลาหลายเดือน หากมีความจำเป็นต้องศึกษาคุณสมบัติและวิธีการเพิ่มเติมเป็นพิเศษเราจะกลับมาศึกษาอย่างแน่นอน ตอนนี้เรามาเริ่มต้นทำงานใน 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) ในคอลเลกชัน

เอ็กเซลของฉัน ActiveWorkBook. ชีต รายการ[i] เปิดใช้งาน ;

ตอนนี้เรามาดูวิธีการที่วัตถุใช้ให้ละเอียดยิ่งขึ้น แผ่นงาน.

3. วิธีการแผ่นงาน Excel

ตอนนี้เรามาดูวัตถุโดยละเอียดมากขึ้น แผ่นงาน.

รูปนี้แสดงวิธีการต่างๆ ที่ผมเคยใช้ในการทำงาน

วัตถุทั้งหมด แผ่นงานผลรวม 30 วิธีการต่าง ๆ ที่คุณสามารถใช้ได้

วิธี คำอธิบาย
เปิดใช้งาน ทำให้แผ่นงานปัจจุบันใช้งานได้ เราได้พูดคุยถึงวิธีการทำงานแล้ว
คำนวณทุกอย่าง เปิดหนังสือ, แผ่นงานเฉพาะในหนังสือหรือ ช่วงที่กำหนดเซลล์บนแผ่นงาน
ตรวจสอบการสะกดบนแผ่นงานที่เลือก
บันทึกการเปลี่ยนแปลงทั้งหมดในไฟล์
ลบแผ่นงานปัจจุบัน แผ่นงาน
การเลือกแผ่นงาน
คัดลอกแผ่นงานไปยังตำแหน่งอื่นในสมุดงาน
วางเนื้อหาของคลิปบอร์ดลงในแผ่นงาน
ส่งคืนวัตถุที่แสดงถึงไดอะแกรมเดียว (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 ) ;

เริ่มลองใช้ MyExcel ActiveWorkBook. ActiveSheet. บันทึกเป็น(AFileName, AFileFormat);

การเรียกวิธีการ:

ยกเว้นยกข้อยกเว้น สร้าง(rsESaveActiveSheet);

จบ ; จบ ; ลบวิธีการลบแผ่นงาน Excel MyExcel.ActiveWorkBook.WorkSheets.Item.Selectเลือกแผ่นงานที่สามของสมุดงาน

วิธีการคัดลอก

คัดลอกแผ่นงานไปยังตำแหน่งอื่นในสมุดงาน

expression.Copy (ก่อน, หลัง)

อย่างไรก็ตามหากคุณใช้พารามิเตอร์

ก่อน

การเรียกวิธีการ:

แล้วคุณไม่ควรใช้

หลังจาก

และในทางกลับกัน ฉันขอดึงความสนใจของคุณไปที่ข้อเท็จจริงที่ว่านี่คือ SHEET ที่ระบุไม่ใช่ดัชนีชีต

วิธีคัดลอกแผ่นงาน Excel ไปยัง Delphi MyExcel.ActiveWorkBook.WorkSheets.Item.Copy (หลัง:= MyExcel.ActiveWorkBook.WorkSheets.Item).

ในกรณีนี้ แผ่นงานแรกจะถูกคัดลอกและวางหลังจากแผ่นงานที่สาม ChartObjects

วิธีการวาง ChartObjectวางเนื้อหาของคลิปบอร์ดลงในแผ่นงาน Excel ChartObjects expression.Paste(ปลายทาง, ลิงก์)

การเรียกวิธีการ:

วิธีวางเนื้อหาคลิปบอร์ดลงในแผ่นงาน Excel ใน Delphi

MyExcel.ActiveWorkBook.ActiveSheet.Paste(Destination:=MyExcel.ActiveWorkBook.ActiveSheet.Range("D1:D5"))

ในกรณีนี้ เนื้อหาของบัฟเฟอร์จะถูกแทรกลงในคอลัมน์ D ในแถวที่ 1 ถึง 5 ควรสังเกตว่าหากเนื้อหาของบัฟเฟอร์ไม่ตรงตามเงื่อนไข เช่น มีเพียง 1 หมายเลขในบัฟเฟอร์ แล้ว

สถานการณ์พิเศษ

วิธี

การย้ายแผ่นงาน วิธีการนี้คล้ายกับ. ข้อแตกต่างเพียงอย่างเดียวคือหลังจากวาง แผ่นงานที่คัดลอกจะถูกลบออกจากหนังสือ

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