Bagaimana untuk membuat excel sheet aktif delphi xe5. Mengakses Excel daripada Delphi

Bertukar data dengan MS Excel V Delphi dengan bantuan OLE.

Rakan-rakan yang dihormati!

Kita semua lambat laun menghadapi tugas menukar data dengan aplikasi pakej MS Office. Salah satunya ialah MS Excel. Dan khususnya mengenai interaksi dengan produk ini MS Office akan dibincangkan dalam artikel ini.

Satu cara untuk berinteraksi Delphi c MS Excel- adalah untuk menyambung kepadanya sebagai OLE objek.

Jadi.
Pertama sekali, untuk bekerja dengan MS Excel Dan OLE tambah pada bahagian Kegunaan modul ComObj Dan ActiveX.

Dan perkara pertama yang perlu kita semak ialah sama ada ia dipasang MS Excel pada komputer pengguna pada dasarnya.
Untuk melakukan ini, kami akan menggunakan fungsi CLSIDFromProgID, yang kelihatan dalam pendaftaran CLSID untuk yang dihantar ProgID:
Bantuan daripada MSDN: Kaedah CLSIDFromProgID
Pilihan:
pszProgID: PoleStr— Rentetan dengan nama objek
clsid: TCLSID- Penunjuk kepada struktur TGUID ke mana objek yang ditemui dipindahkan;
Pulangan:
HRESULT— Keputusan, yang boleh mengambil nilai berikut:
S_OK— objek ditemui;
CO_E_CLASSSTRING— Berdaftar CLSID Untuk ProgID tidak sah;
REGDB_E_WRITEREGDB- Ralat tulis CLSID kepada daftar.
Daripada keputusan yang disenaraikan yang kami perlukan S_OK.
Mari kita tulis fungsi untuk menentukan kehadiran Excel daripada pengguna:

Fungsi IsXlsInstall: boolean; var CLSID: TCLSID; mulakan Keputusan:= (CLSIDFromProgID("Excel.Application", CLSID) = S_OK); akhir;

Jika Excel dipasang, kemudian mari sambung kepadanya. Anda boleh melakukan ini dalam dua cara: GetActiveOleObject— Dapatkan pautan ke contoh yang sudah berjalan Excel atau CreateOleObject— Buat contoh baharu Excel.
Jika kita mempunyai tugas untuk menerima data daripada larian Excel, maka kita harus menggunakan pilihan pertama sahaja, dalam kes lain kita cuba menyambung dan jika itu tidak berjaya, maka kita menciptanya.
Mari kita tulis 2 fungsi untuk menyambung XlsConnect dan melancarkan yang baharu XlsStart:
Mari tambah pembolehubah FXlsApp dengan jenis Pelbagai, yang akan mengandungi rujukan kepada objek Excel.

FXlsApp Peribadi: varian; *** fungsi XlsConnect: boolean; begin Result:= False; cuba FXlsApp:= GetActiveOleObject("Excel.Application"); Keputusan:= Benar; kecuali hujung; akhir; prosedur XlsStart; mulakan FXlsApp:= CreateOleObject("Excel.Application"); akhir;

Kini anda boleh menambah butang, apabila diklik kami akan menyambung ke MS Excel menggunakan fungsi bertulis:

Prosedur btnConnectClick(Penghantar: TObject); mulakan jika bukan IsXlsInstall kemudian naikkan Exception.Create("Aplikasi MS Excel tidak ditemui pada komputer ini!"); jika bukan XlsConnect maka XlsStart; FXlsApp.Visible:= True; end;

Tetingkap lalai Excel bermula dalam latar belakang. Talian FXlsApp.Visible:= Benar; membuat tetingkap latar belakang Excel nampak.

Tingkap Excel ia bermula kosong dan perlu ditambah kepadanya buku kerja. Ini dilakukan menggunakan kaedah Buku Kerja.Tambah, yang menambah buku baharu atau membuka buku yang disimpan sebelum ini jika anda menentukan laluan ke fail tersebut.
Mari tambahkan prosedur yang akan melakukan ini:

Prosedur XWorkbookAdd(const FilePath: string = ""); mulakan FXlsApp.WorkBooks.Add(FilePath); akhir;

Buku itu telah ditambah, sekarang mari kita cuba menulis sesuatu di dalamnya.

FXlsApp.Cells := "Uji rentetan";

di mana baris ialah indeks baris, dan Kol— indeks lajur yang bermula dengan satu.

FXlsApp.Range["A1"] := "Sel A1";

di mana Julat ialah susunan sel, dan A1- biasa kepada Excel koordinat sel.
Julat boleh ditentukan sebagai koordinat. Contohnya, kod

FXlsApp.Range["A3:A10"] := 5;

akan mengisi semua sel dengan nombor 5 A3 Oleh A10, dan kod

FXlsApp.Range["A3:A10"].Warna Dalaman:= clMoneyGreen;

akan menyerlahkan julat yang sama dalam warna hijau muda.
DALAM sisi terbalik, iaitu untuk mendapatkan data daripada Excel, berfungsi sama. Talian

ShowMessage(FXlsApp.Cells);

Akan memaparkan mesej dengan kandungan sel dengan koordinat: Row=5, Column=1.

Selepas kami telah melakukan manipulasi yang diperlukan dengan Excel, kita boleh menyimpan buku yang terhasil ke fail dengan arahan berikut:

FXlsApp.ActiveWorkbook.SaveAs("C:\Test.xlsx");

di mana ActiveWorkbook- buku semasa.
Dan tutup aplikasi Excel perintah:

FXlsApp.Berhenti;

Bagaimanakah anda memahami pilihan kawalan ini? Excel daripada Delphi tidak terhad. Dan terdapat satu cara yang agak mudah untuk mengetahui cara melakukan tindakan yang diperlukan Excel daripada Delphi.
Ia dipanggil Macros.

Mari kita bayangkan bahawa kita perlu menggabungkan beberapa sel menjadi satu dan kita tidak tahu bagaimana untuk melakukannya. Tetapi kami ingin mengetahui. Untuk melakukan ini, kami melakukan langkah berikut:
1. Pelancaran Excel dan buat buku kosong.
2. Jalankan arahan "Rekod Makro", secara lalai, nama makro ialah "Macro1". (Dalam versi yang berbeza Excel perintah ini terletak dalam item menu yang berbeza).
3. Pilih julat sel tertentu dan klik butang "Gabung dan Letakkan di Tengah".
4. Berhenti merakam makro.
5. Panggil senarai makro dan pilih makro rakaman anda di sana.
6. Klik butang "Tukar".
Editor bermula Microsoft Visual Basic untuk Permohonan di mana kita melihat kod tindakan yang diambil:

Sub Macro1() " " Makro1 Makro " Dengan Pemilihan .Penjajaran Mendatar = xlCenter .Penjajaran Menegak = xlBottom .WrapText = Palsu .Orientasi = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ContextShrinkToFit = False .Orientation = 0 .AddIndent = Palsu .Gabung End Sub

Mari kita lihat lebih dekat apa yang dia tulis kepada kita di sini:
Dengan Pemilihan— Untuk julat sel yang dipilih, tetapkan sifat:
Penjajaran Mendatar = xlCenterOrientasi mendatar= berpusat.
Penjajaran Menegak = xlBottom— Orientasi menegak — sepanjang tepi bawah.
WrapText = Salah— Pembalut teks dengan perkataan dilumpuhkan.
Orientasi = 0- Orientasi 0 darjah.
AddIndent = Salah- Penggunaan lekukan automatik on off.
Tahap Inden = 0— Tahap inden 0.
ShrinkToFit = Palsu— Mampatkan teks untuk memuatkan lajur hidup/mati.
ReadingOrder = xlKonteks— Urutan bacaan mengikut konteks.
MergeCells = Palsu— Sel bercantum hidup/mati
Tamat Dengan— Tamat bahagian kerja dengan julat yang dipilih.
Pemilihan.Gabung— Gabungkan julat yang dipilih.

Sekarang mari cuba menggabungkan sel dari Delphi:

Kami memilih julat yang kami perlukan.

FXlsApp.Selection.MergeCells:= Benar;

Kami menggabungkan sel dengan menetapkan harta. Atau menggunakan kaedah:

FXlsApp.Selection.Merge;

Dengan cara ini anda boleh mendapatkan kod untuk hampir semua manipulasi yang diperlukan.
Dan jika beberapa sifat atau kaedah menimbulkan persoalan, anda boleh menggunakan bantuan pada MSDN.

Sila ambil perhatian keanehan bekerja dengan tatasusunan dalam VBA. Indeks dalam tatasusunan dalam Delphi dibalut dalam kurungan segi empat sama, manakala dalam VBA mereka akan berada dalam pusingan. Dan kod masuk Delphi

FXlsApp.Range["B5:C8"].Pilih;

V VBA akan kelihatan seperti

Julat("D5:H14").Pilih;

Di bawah saya akan berikan sedikit Soalan Lazim mengenai isu interaksi dengan Excel daripada Delphi

Bagaimana untuk menentukan nilai malar dalam Excel untuk digunakan dalam Delphi?

Dalam editor VBA Kami menetapkan titik perhentian bertentangan dengan pemalar minat. Klik laksana dan apabila pelaksanaan berhenti, tuding kepada pemalar minat:

Bagaimana untuk melumpuhkan output mesej dalam Excel?

FXlsApp.DisplayAlerts:= Palsu;

Bagaimana untuk mendapatkan senarai buku daripada Excel?

Untuk i:= 1 hingga FXlsApp.Workbooks.Count do ListBox1.Items.Add(FXlsApp.Workbooks.Item[i].Name);

Bagaimana untuk melumpuhkan paparan grid?

FXlsApp.ActiveWindow.DisplayGridlines:= False;

Bagaimana untuk memaparkan helaian semasa sebagai pratonton cetakan?

FXlsApp.ActiveWindow.SelectedSheets.PrintPreview;

Bagaimana untuk membuat beberapa teks dalam sel tebal?

Baris Var: integer; // String index Col: integer; // Indeks sel TextSelStart: integer; // Bermula daripada aksara TextSelLength: integer; // Bilangan aksara yang dipilih bermula FXlsApp.Cells.Characters(TextSelStart, TextSelLength).Font.Bold:= True; akhir;

Bagaimana untuk menyesuaikan ketinggian baris secara automatik untuk sel terpaku?

Var merge_area: variant; cell_width, cells_width, i: integer begin // Simpan julat sel yang digabungkan ke dalam kawasan merge_variable:= FXlsApp.Range["D5"].MergeArea; // Simpan lebar sel yang mana kita akan pilih ketinggian cell_width:= FXlsApp.Range["D5"].ColumnWidth; sel_lebar:= 0; untuk i:= 1 kepada merge_area.Columns.Count do // Dapatkan jumlah lebar semua lajur julat gabungan cells_width:= cells_width + merge_area.Columns[i].ColumnWidth; // Nyahcantumkan sel merge_area.UnMerge; // Tetapkan lebar sel yang diminati sama dengan jumlah lebar FXlsApp.Range["D5"].ColumnWidth:= cells_width; // Panggil kaedah piawai autofit ketinggian baris FXlsApp.Rows.EntireRow.AutoFit; // Kembalikan lebar asal sel yang diminati FXlsApp.Range["D5"].ColumnWidth:= cell_width; // Gamkan julat kembali bersama merge_area.Merge; akhir;

Bagaimana untuk mendapatkan julat sel yang digunakan?

Keputusan:= exApp.ActiveSheet.UsedRange;

Bagaimana untuk mendapatkan huruf lajur mengikut indeks?

Menggunakan Matematik; *** fungsi ColIdxToStr(const Col: integer): string const CharsCount: integer = 26; Offset: integer = 64; var Kedudukan: bait; Kol, Tmp: integer; mulakan Keputusan:= ""; manakala Kol > 0 mula Kedudukan:= 0; Tmp:=Col; manakala Tmp > CharsCount mula Tmp:= Ceil(Tmp / CharsCount - 1); Inc(Pangkat); akhir; Keputusan:= Keputusan + Chr(Tmp + Offset); Col:= Col - Trunc(Kuasa(CharsCount,Rank)) * Tmp; akhir; akhir;

DALAM ulasan ini Pembinaan asas yang membolehkan anda mengakses buku kerja Excel daripada Delphi dibincangkan.

Mengatur akses kepada buku EXCEL

Untuk berinteraksi dengan MS Excel dalam program, anda mesti menggunakan modul ComObj dan mengisytiharkan pembolehubah untuk mengakses jenis varian MS Excel.

menggunakan ComObj;
var Excel: Varian;

Dalam kes paling mudah, anda boleh memulakan pembolehubah Excel seperti ini:

Excel:= CreateOleObject("Excel.Application");

Mencipta buku baharu:

Excel.Buku Kerja.Tambah;

Pembukaan buku sedia ada(di mana laluan ialah laluan ke fail dengan sambungan xls.):

Excel.Buku Kerja.Buka;

Untuk membuka buku kerja sedia ada untuk baca sahaja:

Excel.Buku Kerja.Buka;

Menutup Excel:

Excel.ActiveWorkbook.Close;
Excel.Application.Quit;

Menyekat permintaan Excel (pengesahan, pemberitahuan), contohnya, menyekat permintaan untuk menyimpan fail:

Excel.DisplayAlerts:=False;

Tunjukkan atau sembunyikan Excel pada skrin:

Excel.Visible:= Benar;
Excel.Visible:= Salah;

Mencetak kandungan lembaran kerja Excel yang aktif:

Excel.ActiveSheet.PrintOut;

Membaca/menulis data dalam EXCEL

Anda boleh mengakses sel dalam buku kerja Excel semasa seperti berikut:

Excel.Range["b2"]:="Hello!"; // tulis nilai pada sel
s:=Excel.Julat["b2"]; // membaca nilai dari sel

Di mana b2 ialah alamat sel.

Atau menggunakan gaya pautan R1C1:

Excel.Range]:="Hello!";

Di manakah koordinat sel.

sama sekali, sel Excel Anda boleh menetapkan sebarang nilai (aksara, integer, pecahan, tarikh) dan Excel akan menetapkan pemformatan lalai dalam sel.

Formatkan sel dalam EXCEL

Anda boleh memilih (memilih) sekumpulan sel untuk kerja seterusnya seperti ini:

Excel.Range, Excel.Cells].Pilih;
// sama ada
Excel.Julat["A1:C5"].Pilih;

Dalam kes ini, kawasan yang terletak di antara sel A1 dan C5 akan dipilih.

Selepas membuat pemilihan, anda boleh menetapkan:
1) Menggabungkan sel:

Excel.Selection.MergeCells:=Benar;

2) Pembalut perkataan:

Excel.Selection.WrapText:=Benar;

3) Penjajaran mendatar:

Excel.Selection.HorizontalAlignment:=3;

Apabila ditetapkan kepada 1, penjajaran lalai digunakan, apabila ditetapkan kepada 2, penjajaran di kiri, 3 di tengah dan 4 di kanan. 4) Penjajaran menegak

Excel.Selection.VerticalAlignment:=1;

Nilai yang diberikan adalah sama dengan penjajaran mendatar.
5) Sempadan untuk sel:

Apabila ditetapkan kepada 1, sempadan sel dilukis dengan garis pepejal nipis.
Di samping itu, anda boleh menentukan nilai untuk sifat Borders, contohnya, sama dengan 3. Kemudian hanya sempadan atas untuk blok pemilihan akan ditetapkan:

Excel.Selection.Borders.LineStyle:=1;

Nilai sifat Borders ditentukan kombinasi berbeza tepi sel.
Dalam kedua-dua kes, anda boleh menggunakan nilai dalam julat dari 1 hingga 10.

Menggunakan kata laluan dalam EXCEL

Menetapkan kata laluan untuk buku kerja aktif boleh dilakukan seperti berikut:

cubalah
// cuba untuk menetapkan kata laluan
Excel.ActiveWorkbook.protect("lulus");
kecuali
// tindakan jika percubaan untuk menetapkan kata laluan gagal
akhir;

Di mana pas ialah kata laluan untuk ditetapkan untuk buku.

Mengalih keluar kata laluan daripada buku adalah serupa, gunakan arahan

Excel.ActiveWorkbook.Unprotect("lulus");

Menetapkan atau mengalih keluar kata laluan untuk helaian aktif Buku kerja Excel dihasilkan oleh pasukan

Excel.ActiveSheet.protect("lulus"); // tetapkan kata laluan
Excel.ActiveSheet.Unprotect("lulus"); // alih keluar kata laluan

Di mana pas ialah kata laluan yang ditetapkan untuk melindungi buku.

Operasi tambahan dalam EXCEL

Memadamkan baris dengan anjakan ke atas (apabila melakukan tindakan ini, baris 5 hingga 15 akan dipadamkan):

Excel.Rows["5:15"].Pilih;
Excel.Selection.Delete;

Untuk menetapkan kawasan beku pada lembaran kerja Excel yang aktif:

// nyahbeku kawasan jika ia telah ditetapkan
Excel.ActiveWindow.FreezePanes:=False;
// pilih sel yang dikehendaki, V dalam kes ini D3
Excel.Julat["D3"].Pilih;
// tetapkan kawasan untuk dibekukan
Excel.ActiveWindow.FreezePanes:=Benar;


Bekerja dengan EXCEL dari Delphi

Dalam artikel ini saya akan menunjukkan kepada anda cara bekerja dengannya MS Excel daripada Delphi. Artikel ini mungkin berguna kepada orang yang ingin belajar cara mencipta pelbagai Laporan Excel daripada program yang ditulis dalam Delphi. Artikel mengandungi data rujukan yang diperlukan untuk bekerja dengan MS Excel. Di sini anda akan mendapat maklumat tentang cara:

Sambung dan putuskan sambungan antara muka Excel dengan betul;
- Cara menukar saiz, warna dan jenis fon;
- Bagaimana untuk memilih, menggabungkan, mengisi dan membiak julat sel;
- Cara memutar dan memusatkan teks;
- Cara melukis sempadan sel;
- Bagaimana untuk memasukkan formula ke dalam sel dan banyak lagi...

Jadi, mari kita mulakan...

Kami akan bekerja melalui modul ComObj, untuk ini dalam kegunaan perlu tambah modul ComObj dan modul Excel_TLB(Untuk MS Excel 2007).

Kegunaan……, ComObj, Excel_TLB;

Modul Excel_TLB mengandungi yang perlu pemalar untuk bekerja dengan Excel, anda tidak perlu menyambungkannya, tetapi kemudian anda perlu memasukkan nilai semua pemalar yang digunakan secara manual daripada modul ini. Nilai pemalar boleh didapati di dalam modul atau di Internet, tetapi untuk versi berbeza MS Excel mereka berbeza.
Perhatian!!! Modul Excel_TLB dalam versi lain MS Excel boleh dipanggil berbeza. Sebelum menyambung modul Excel_TLB, anda perlu mengimport perpustakaan Excel. Untuk melakukan ini, pilih Komponen->Import Komponen->Import Jenis Perpustakaan-> kita dapati MS Excel dan ikut arahan.

Dalam bahagian perihalan pembolehubah kita perlu menerangkan pembolehubah jenis Pelbagai atau OleVariant untuk menyambung antara muka Excel. Saya menerangkan pembolehubah cemerlang.

Borang1: TForm1;
cemerlang : pelbagai;// Pembolehubah di mana objek dicipta EXCEL

Mencipta dokumen

Perhatian!!! Setiap kali anda membuat objek antara muka, bungkus prosedur penciptaan dalam modul pengendalian ralat:
cubalah
buat antara muka;
menjana laporan;
lepaskan antara muka;
Kecuali
mengendalikan kesilapan;
lepaskan antara muka;
akhir;

cubalah
// buat objek EXCEL

// Supaya tidak bertanya soalan tentang menyimpan dokumen
excel.DisplayAlerts:= palsu;

// buat dokumen baharu buku kerja
excel.WorkBooks.Add;

//atau muatkannya daripada direktori program
excel.WorkBooks.Open(GetCurrentDir() + "\report.xls");

( GetCurrentDir() - mengembalikan laluan ke direktori dengan program)

// Jadikan ia kelihatan fungsi ini selepas penyahpepijatan dan ujian, lebih baik menggunakannya pada penghujungnya, selepas menjana laporan (ini mempercepatkan proses mengeluarkan data kepada laporan)
excel.Visible:= benar;

//tetapkan jenis formula dalam format R1C1
excel.Application.ReferenceStyle:= xlR1C1;

// tetapkan jenis formula dalam format A1
excel.Application.ReferenceStyle:= xlA1;

// Tetapkan nama helaian pertama dan kedua
excel.WorkBooks.WorkSheets.Name:= "Laporan1";
excel.WorkBooks.WorkSheets.Name:= "Laporan2";

//tetapkan format nombor untuk format nombor lajur pertama dan keempat
excel.WorkBooks.WorkSheets.Columns.NumberFormat:= "0.00";
excel.WorkBooks.WorkSheets.Columns.NumberFormat:= "0.0";

// tetapkan lebar lajur pertama dan kedua
excel.WorkBooks.WorkHelaian.Lajur.Lebar Lajur:= 10;
excel.WorkBooks.WorkHelaian.Lajur.Lebar Lajur:= 20;

// tetapkan gaya, warna, saiz dan jenis fon untuk baris pertama
excel.WorkBooks.WorkSheets.Rows.Font.Bold:= Benar; //berlemak
excel.WorkBooks.WorkSheets.Rows.Font.Color:= clRed; // warna merah
excel.WorkBooks.WorkHelaian.Rows.Font.Saiz:= 12; //saiz 12
excel.WorkBooks.Worksheets.Rows.Font.Name:= "Times New Roman"; //font

//tetapkan nilai sel 1.4 dan 2.4 (1 - baris, 4 - lajur)
excel.WorkBooks.WorkSheets.Cells := "Dan dengan cara ini anda boleh memasukkan nilai ke dalam sel";
excel.WorkBooks.WorkSheets.Cells := "Dan dengan cara ini anda boleh memasukkan nilai ke dalam sel";

//masukkan formula "=b5+c4" ke dalam sel "A12"
excel.WorkBooks.WorkHelaian.Julat["A12"].Formula:="=b5+c4";

// Jajarkan baris pertama ke tengah secara menegak
excel.WorkBooks.WorkSheets.Rows.VerticalAlignment:= xlCenter;

// Jajarkan baris pertama secara mendatar ke tengah
excel.WorkBooks.WorkHeets.Rows.HorizontalAlignment:= xlCenter;

// Jajarkan sel ke kiri
excel.WorkBooks.WorkHeets.Cells.HorizontalAlignment:= xlKiri;

// Jajarkan sel ke kanan
excel.WorkBooks.WorkSheets.Cells.HorizontalAlignment:= xlRight;

// Gabungkan sel "A1:A8"
excel.WorkBooks.WorkHelaian.Julat["A1:A8"].Gabung;

// Putar perkataan pada sudut 90 darjah untuk baris kedua
excel.WorkBooks.WorkHelaian.Rows.Orientasi:= 90;

// Putar perkataan pada sudut 45 darjah untuk julat sel "B3:D3"
excel.Buku Kerja.Helaian Kerja.Julat["B3:D3"].Orientasi:= 45;

//lukis sempadan julat yang dipilih ke kiri
excel.Selection.Borders.LineStyle:= xlBerterusan; // gaya garisan padat
excel.Selection.Borders.Weight:= xlMedium;// ketebalan garisan

//lukiskan sempadan julat yang dipilih di atas

excel.Selection.Borders.Weight:= xlSederhana;

//lukiskan sempadan julat yang dipilih lebih rendah

excel.Selection.Borders.Weight:= xlSederhana;

//lukiskan sempadan julat yang dipilih ke kanan

excel.Selection.Borders.Weight:= xlSederhana;

//lukis sempadan julat yang dipilih secara menegak di dalam

excel.Selection.Borders.Weight:= xlSederhana;

//lukis sempadan julat yang dipilih secara mendatar di dalam

excel.Selection.Borders.Weight:= xlSederhana;

//autoisi julat yang dipilih
//contohnya, isikan kawasan sel "A10:C10" dengan perkataan "hello"
//dan darabkannya dengan lima sel lagi "A10:C15"

excel.WorkBooks.WorkHelaian.Julat["A10:C10"].Nilai:="hello";

//pilih julat sel "A10:C10"
excel.WorkBooks.WorkHeets.Julat["A10:C10"].Pilih;

//autofill (salin) kawasan sel "A10:C15" dengan julat yang dipilih
excel.selection.autofill(excel.WorkBooks.WorkSheets.Julat["A10:C15"],xlFillDefault);

//lumpuhkan amaran supaya tidak bertanya soalan tentang menyimpan dan lain-lain
excel.DisplayAlerts:= Salah;

//simpan dokumen ke Format Excel 97-2003
excel.ActiveWorkBook.Saveas(GetCurrentDir() + "\report.xls",xlExcel8);

//simpan dokumen dalam format Excel 2007 semasa
excel.ActiveWorkBook.Saveas(GetCurrentDir() + "\report.xlsx");

//tutup semua buku
excel.Buku kerja.Tutup;

//tutup Excel
excel.Application.quit;

// bebaskan antara muka
excel:= Tidak ditugaskan;

//mengendalikan ralat

//tutup semua buku
excel.Buku kerja.Tutup;

//tutup Excel
excel.Application.quit;

// bebaskan antara muka
excel:= Tidak ditugaskan;
akhir;
akhir;

Apabila bekerja dengan Helaian Excel kita boleh menggunakan pilihan berikut:
- bekerja dengan kawasan Julat["B3:D3"];
- bekerja dengan sel Sel di mana 2 adalah baris, 4 adalah lajur;
- bekerja dengan baris Rows atau julat baris Rows["1:5"];
- bekerja dengan lajur Lajur atau julat lajur Lajur["A:I"];

Julat["A1"] dan Sel bermaksud perkara yang sama.

Selepas dokumen dijana atau ralat berlaku, anda mesti melepaskan antara muka dengan betul.
Lain bila tutup Excel ia hilang dari skrin, tetapi jika anda membuka pengurus tugas ia terus tergantung di sana dan jika proses ini tidak selesai, maka dengan setiap permulaan baru mereka akan terkumpul lebih dan lebih sehingga komputer mula membeku. Oleh itu, adalah penting untuk melepaskan semua antara muka yang dikaitkan dengan Excel dengan buku dan helaiannya.

Contohnya seperti ini:
//tutup semua buku
excel.Buku kerja.Tutup;

//tutup Excel
excel.Application.quit;

// bebaskan antara muka
helaian:=Tidak ditugaskan; // antara muka lembaran jika ia dicipta
Buku Kerja:= Tidak ditetapkan; // antara muka buku kerja jika ia telah dibuat
excel:= Unassigned; // antara muka cadangan itu sendiri jika ia dicipta

Di bawah adalah contoh output dalam Excel daripada Delphi jadual pendaraban dengan ulasan terperinci.

Unit Unit1;

Kegunaan
Windows, Mesej, SysUtils, Varian, Kelas, Grafik, Kawalan, Borang,
Dialog, comobj, StdCtrls, Excel_TLB;

taip
TForm1 = kelas(TForm)
Butang1: TButton;
prosedur Button1Click(Penghantar: TObject);
persendirian
(Pengisytiharan peribadi)
awam
(Pengisytiharan awam)
akhir;

Var
Borang1: TForm1;
excel:variant; // Pembolehubah di mana objek EXCEL dicipta
MyData: variant; // Pembolehubah di mana jadual pendaraban dibentuk
i,j:integer;
pelaksanaan

Prosedur TForm1.Button1Click(Penghantar: TObject);
bermula
cubalah
// Objek EXCEL
excel:= CreateOleObject("Excel.Application");
// Supaya tidak bertanya soalan tentang menyimpan dokumen
excel.DisplayAlerts:= palsu;
// dokumen baharu
excel.WorkBooks.Add;

//mengisytiharkan tatasusunan varian
MyData:= VarArrayCreate(,varVariant);
untuk saya:= 1 hingga 9 lakukan
untuk J:= 1 hingga 9 lakukan
MyData:=i*j;

// Gabungkan sel "A1:I1"
excel.WorkBooks.WorkSheets.Julat["A1:I1"].Gabung;
//Tulis tajuk
excel.WorkBooks.WorkSheets.Julat["A1"].Nilai:="Jadual pendaraban";
// Sejajarkan tajuk ke tengah
excel.WorkBooks.WorkSheets.Julat["A1"].Penjajaran Mendatar:= xlCenter;
// tetapkan lebar lajur A kepada I
excel.WorkBooks.WorkHeets.Columns["A:I"].Lebar Lajur:= 3;

//pilih kawasan jadual pendaraban ["A2:I10"] dan lukis sempadan
excel.WorkBooks.WorkHelaian.Julat["A2:I10"].pilih;
//lukis sempadan julat yang dipilih ke kiri
excel.Selection.Borders.LineStyle:= xlBerterusan; // gaya garis adalah padat
excel.Selection.Borders.Weight:= xlNipis; // ketebalan garisan
//lukiskan sempadan julat yang dipilih di atas
excel.Selection.Borders.LineStyle:= xlBerterusan;
excel.Selection.Borders.Weight:= xlNipis;
//lukiskan sempadan julat yang dipilih lebih rendah
excel.Selection.Borders.LineStyle:= xlBerterusan;
excel.Selection.Borders.Weight:= xlNipis;
//lukiskan sempadan julat yang dipilih ke kanan
excel.Selection.Borders.LineStyle:= xlBerterusan;
excel.Selection.Borders.Weight:= xlNipis;
//lukis sempadan julat yang dipilih secara menegak di dalam
excel.Selection.Borders.LineStyle:= xlBerterusan;
excel.Selection.Borders.Weight:= xlNipis;
//lukis sempadan julat yang dipilih secara mendatar di dalam
excel.Selection.Borders.LineStyle:= xlBerterusan;
excel.Selection.Borders.Weight:= xlNipis;

//tetapkan julat ["A2:I10"] kepada nilai tatasusunan varian MyData, ini mempercepatkan kerja dengan ketara daripada output //selari

Excel.WorkBooks.WorkHelaian.Julat["A2:I10"].Nilai:=Data Saya;

// Jadikan ia kelihatan
excel.Visible:= benar;
// bebaskan antara muka
MyData:= Tidak ditugaskan;
excel:= Tidak ditugaskan;
Kecuali
showmessage("Perhatian! Ralat berlaku semasa membuat aplikasi MS Excel");
//tutup Excel
excel.Application.quit;
// bebaskan antara muka
MyData:= Tidak ditugaskan;
excel:= Tidak ditugaskan;
akhir;
akhir;

Semasa menulis artikel ini, bahan dari tapak digunakan

Anda boleh berhenti pada setiap peringkat model ini dan mengkajinya selama berbulan-bulan. Sekiranya terdapat keperluan khusus untuk mengkaji apa-apa sifat dan kaedah tambahan, kami pasti akan kembali dan mengkaji. Sekarang, mari kita mula bekerja di Delphi dengan helaian buku kerja.

2. Bagaimana untuk mengaktifkan helaian buku kerja Excel?

Seperti yang anda ketahui semasa membuat buku kerja kosong Excel secara automatik menambah 3 pada buku ini lembaran kosong. Untuk bekerja dengan helaian tertentu ( Lembaran Kerja atau secara ringkas Lembaran) helaian ini mesti diaktifkan. Satu cara untuk mengaktifkan helaian buku kerja Excel V Delphi seperti berikut:

string sumber rsEInvalidSheetIndex = "Indeks tidak sah ditentukan untuk Buku Kerja. Pengaktifan helaian dibatalkan"; rsEInvalidSheetActivate = "Pengaktifan helaian selesai dengan ralat"; function ActivateSheet(WBIndex: integer ; SheetName: string ) : boolean ; var i: integer ; mulakan Keputusan : = false ; jika WBIndex › MyExcel. Buku Kerja. Kira kemudian naikkan Exception. Cipta (rsEInvalidSheetIndex) ; cuba untuk i : = 1 kepada MyExcel. Buku Kerja [WBIindex]. Lembaran. Kira lakukan jika AnsiLowerCase (MyExcel. WorkBooks [ WBIndex]. Helaian . Item [ i]. Nama ) = AnsiLowerCase (SheetName) kemudian mulakan MyExcel. Buku Kerja [WBIindex]. Lembaran. Perkara [i]. Aktifkan ; Keputusan: = benar; pecah; akhir ; kecuali menaikkan Exception. Cipta (rsEInvalidSheetActivate) ; akhir ; akhir ;

Di sini, parameter fungsi ditetapkan kepada indeks buku kerja (WBIndex) dalam koleksi Buku Kerja dan nama helaian.

Jika anda mahu, anda boleh mengaktifkan helaian yang sama mengikut indeks dalam koleksi Lembaran Kerja- pada masa yang sama, fungsi itu sendiri dipermudahkan sedikit (syarat untuk menyemak nama helaian tidak diperlukan).

Juga, jika anda pasti itu masa ini Memandangkan buku kerja yang anda perlukan aktif, anda boleh mengelak daripada menggunakan pembolehubah tambahan (indeks buku kerja WBIndex) dan mengaktifkan helaian seperti ini:

MyExcel. ActiveWorkBook. Lembaran. Perkara [i]. Aktifkan ;

Sekarang mari kita lihat dengan lebih dekat kaedah yang digunakan oleh objek Lembaran Kerja.

3. Kaedah lembaran kerja Excel

Sekarang mari kita lihat objek dengan lebih terperinci Lembaran Kerja.

Rajah menunjukkan kaedah yang pernah saya gunakan dalam kerja saya.

Jumlah objek Lembaran Kerja jumlah 30 kaedah berbeza yang boleh anda gunakan.

Kaedah Penerangan
Aktifkan Menjadikan helaian semasa aktif. Kami telah membincangkan bagaimana kaedah itu berfungsi.
mengira segala-galanya buka buku, helaian tertentu dalam buku, atau julat yang ditentukan sel pada helaian
semak ejaan pada helaian yang dipilih
menyimpan semua perubahan pada fail
memadam helaian semasa Lembaran Kerja
pemilihan helaian
menyalin helaian ke lokasi lain dalam buku kerja
menampal kandungan papan keratan ke dalam lembaran kerja
mengembalikan objek yang mewakili sama ada satu rajah (objek ChartObject ChartObjects) pada helaian
menggerakkan helaian. Kaedah ini serupa dengan kaedah Salinan. Satu-satunya perbezaan ialah selepas menampal, helaian yang disalin dipadamkan daripada buku

Sekarang mari kita pertimbangkan setiap kaedah yang dibentangkan di atas.

Di bawah, sebagai ungkapan helaian harus menonjol ( Lembaran Kerja), melainkan dinyatakan sebaliknya.

Kaedah pengiraan

Kira buku kerja, helaian atau julat sel.

Perlu diingat bahawa kaedah panggilan Kira adalah mungkin bukan sahaja untuk lembaran kerja tertentu dalam buku kerja Excel. Mari lihat pilihan untuk memanggil kaedah Kira.

var MyExcel: OleVariant; MyExcel. Kira

coretan kod di bawah mengira helaian aktif

MyExcel. ActiveWorkBook. ActiveWorkSheet. Kira

Mari kita hitung semua formula dalam lajur A, B dan C:

MyExcel. ActiveWorkBook. ActiveWorkSheet. UsedRange. Lajur("A:C"). Kira

Semak Kaedah Ejaan

Panggilan kaedah kelihatan seperti ini:

ungkapan. Semak Ejaan(Kamus Tersuai, Abaikan Huruf Besar, SentiasaCadangkan, SpellLang)

Pada masa yang sama, sebagai ungkapan helaian harus menonjol ( Lembaran Kerja).

Parameter taip Penerangan
Kamus Tersuai Pelbagai Dengan rentetan yang menyatakan nama fail kamus pengguna yang akan dipertimbangkan jika perkataan itu tidak ditemui dalam kamus utama. Jika hujah ini ditinggalkan, kamus lalai akan digunakan
Abaikan Huruf Besar Pelbagai betul, jika perlu, supaya Microsoft Excel melangkau perkataan yang ditulis dengan huruf besar. Salah untuk Microsoft Excel semak semua perkataan. Jika hujah ini ditinggalkan, maka tetapan semasa Excel.
SentiasaCadangkan Pelbagai betul, untuk Microsoft Excel memaparkan senarai cadangan untuk ejaan lain apabila perkataan yang dieja dengan salah telah dikesan. Salah, kepada Microsoft Excel sedang menunggu input ejaan yang betul. Jika hujah ini ditinggalkan, tetapan semasa digunakan.
SpellLang Pelbagai bahasa kamus. Boleh mengambil nilai salah satu pemalar MsoLanguageID , contohnya untuk bahasa Rusia SpellLang = 1049, untuk bahasa Inggeris (AS) SpellLang = 1033 dan lain-lain. Butiran lanjut tentang pengecam bahasa.

Bagaimana untuk menyemak tatabahasa pada helaian Excel dalam Delphi?

MyExcel. ActiveWorkBook. ActiveWorkSheet. CheckSpelling(CustomDictionary:=EmptyParam, IgnoreUppercase:=false, AlwaysSuggest:=EmptyParam, SpellLang:=1033)

dalam kes ini MS Excel akan menyemak helaian semasa, termasuk menyemak perkataan daripada huruf besar. Bahasa pengesahan adalah bahasa Rusia. Sila ambil perhatian bahawa untuk memanggil kaedah, kami secara eksplisit menyatakan parameter mana yang hendak diberikan nilai mana. Selain itu, untuk melangkau sebarang parameter, kami menggunakan EmptyParam(parameter kosong), iaitu dalam Delphi ialah pembolehubah jenis OleVariant.

Adalah jelas bahawa kaedah kaedah panggilan ini (dengan petunjuk jelas semua parameter) tidak sepenuhnya sesuai untuk anda dan tidak diamalkan secara meluas dalam pengaturcaraan dalam bahasa Inggeris. Delphi , tetapi bagaimanapun, ini adalah satu-satunya cara dan tiada cara lain untuk memanggil kaedah yang digunakan dalam Excel .

Kaedah SaveAs

Menyimpan lembaran kerja Excel.

Panggilan kaedah:

expression.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AddToMru, TextCodepage, TextVisualLayout, Local)
Parameter taip Penerangan
Nama fail Pelbagai rentetan yang mewakili nama fail yang akan disimpan. Mesti dinyatakan laluan penuh ke fail, jika tidak fail akan disimpan ke folder Excel .
Format fail Pelbagai Format fail yang digunakan semasa menyimpan. Secara lalai, fail disimpan dalam format yang anda pilih kali terakhir V Excel.
Kata laluan Pelbagai kata laluan untuk fail (tidak lebih daripada 15 aksara). Kata laluan adalah sensitif huruf besar-besaran.
WriteResPassword Pelbagai kata laluan yang akan digunakan untuk membuat perubahan pada buku kerja. Jika kata laluan tidak dinyatakan, buku akan dibuka dalam mod Baca Sahaja.
ReadOnlyRecommended Pelbagai jika parameter adalah sama betul, kemudian apabila membuka fail, mesej akan muncul pada paparan yang mengesyorkan agar fail dibuka untuk baca sahaja.
CreateBackup Pelbagai betul, untuk mencipta fail sandaran
AddToMru Pelbagai betul, untuk menambah nama fail yang disimpan pada senarai baru-baru ini buka fail dalam menu utama Excel
TextCodepage Dan TextVisualLayout Pelbagai tidak digunakan pada masa ini dan dikekalkan untuk keserasian ke belakang
Tempatan Pelbagai tidak parameter yang diperlukan, secara lalai adalah sama dengan Salah.Maknanya betul- menyimpan fail daripada bahasa Microsoft Excel (termasuk tetapan panel kawalan).

MyExcel.ActiveWorkBook.ActiveWorkSheet.SaveAs("C\:MyExcelFile.xls")

Dalam kes ini, tetapan lalai akan digunakan semasa menyimpan.

Jika anda perlu berjimat Fail Excel dalam format yang berbeza, kemudian dalam parameter Format fail anda boleh menggunakan salah satu nilai enumerator xlFileFormat . Beberapa makna xlFileFormat dibentangkan dalam jadual di bawah:

Nama Maknanya Penerangan Sambungan fail
xlCSV6 CSV*.csv
xlExcel856 Buku kerja Excel 97-2003*.xls
xlHtml44 format HTML*.htm; *.HTML
xlOpenDocumentSpreadsheet60 Hamparan OpenDocument*.ods
xlOpenXMLWorkbook51 Buka Buku XML*.xlsx

Mari tulis prosedur kecil yang membolehkan anda menyimpan helaian Excel dalam pelbagai format:

const xlCSV = 6 ; xlExcel8 = 56 ; xlHtml = 44 ; xlOpenDocumentSpreadsheet = 60 ; xlOpenXMLWorkbook = 51 ; resourcestring rsESaveActiveSheet = "Ralat menyimpan lembaran kerja aktif"; prosedur SaveAs(const AFileName: TFileName; AFileFormat: integer ); mula mencuba MyExcel. ActiveWorkBook. ActiveSheet. SaveAs(AFileName, AFileFormat); kecuali menaikkan Exception. Cipta(rsESaveActiveSheet); akhir ; akhir ;

Padam kaedah

Padamkan lembaran kerja Excel.

MyExcel.ActiveWorkBook.WorkSheets.Item.Select

Memilih helaian ketiga buku kerja

Kaedah salin

Salin helaian ke lokasi lain dalam buku kerja.

Panggilan kaedah:

ungkapan.Salin(Sebelum, Selepas)

Walau bagaimanapun, jika anda menggunakan parameter Sebelum ini, maka anda tidak sepatutnya menggunakan Selepas dan begitu juga sebaliknya. Biar saya menarik perhatian anda kepada fakta bahawa HELAIAN yang ditunjukkan, dan bukan indeks helaian.

Bagaimana untuk menyalin helaian Excel ke Delphi?

MyExcel.ActiveWorkBook.WorkSheets.Item.Copy(Selepas:=MyExcel.ActiveWorkBook.WorkSheets.Item)

Dalam kes ini, helaian pertama akan disalin dan ditampal selepas helaian ketiga.

Kaedah tampal

Tampalkan kandungan papan keratan ke dalam helaian Excel.

Panggilan kaedah:

ekspresi.Tampal(Destinasi, Pautan)

Bagaimana untuk menampal kandungan papan keratan ke dalam helaian Excel dalam Delphi?

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

Dalam kes ini, kandungan penimbal akan dimasukkan ke dalam lajur D dalam baris 1 hingga 5. Perlu diingatkan bahawa jika kandungan penimbal tidak memenuhi syarat, contohnya, terdapat hanya 1 nombor dalam penimbal, kemudian situasi yang luar biasa.

Kaedah ChartObjects

Mengembalikan objek yang mewakili sama ada satu rajah (objek ChartObject) atau koleksi semua gambar rajah (objek ChartObjects) pada helaian.

Panggilan kaedah:

ungkapan.ChartObjects

Bagaimana untuk mendapatkan carta dalam helaian Excel dalam Delphi?

MyExcel.ActiveWorkBook.ActiveSheet.ChartObjects

Dalam kes ini, yang pertama akan diterima.

Kaedah pindah

Menggerakkan helaian. Kaedah ini serupa dengan . Satu-satunya perbezaan ialah selepas menampal, helaian yang disalin dipadamkan daripada buku.

Berikut adalah sebahagian daripada kaedah yang pernah saya gunakan semasa bekerja Excel V Delphi . Secara umumnya boleh dikatakan bahawa dalam Delphi boleh dikawal MS Excel tidak lebih buruk daripada apabila bekerja secara langsung dengan aplikasi ini, perkara utama adalah tidak melupakan kaedah atau harta mana yang bertanggungjawab untuk apa :). Nah, untuk tidak lupa, saya mencipta MindMap kecil, yang akan saya tambah dan kemas kini secara berkala. Dengan mengklik pada pautan, anda boleh melihat objek Excel, kaedah yang mereka gunakan, parameter kaedah dan jenisnya mengikut Jenis Delphi. Secara umum, helaian curang grafik kecil untuk mereka yang suka bermain-main dengan Excel dalam Delphi.

Dalam artikel ini kita akan melihat binaan asas yang membolehkan anda mengakses buku kerja MS Excel daripada Delphi.

Mengatur akses kepada buku EXCEL

Untuk berinteraksi dengan MS Excel dalam program, anda mesti menggunakan modul ComObj

Menggunakan ComObj;

dan mengisytiharkan pembolehubah untuk mengakses MS Excel seterusnya jenis:

Var MsExcel: Varian;

Dalam kes yang paling mudah, memulakan pembolehubah Excel boleh dilakukan seperti ini:

MsExcel:= CreateOleObject("Excel.Application");

Mencipta buku baharu:

MsExcel.Workbooks.Add;

Membuka buku sedia ada (di mana laluan ialah laluan ke fail dengan sambungan xls.):

MsExcel.Workbooks.Open;

Untuk membuka buku kerja sedia ada untuk baca sahaja:

MsExcel.Workbooks.Open;

Menutup Excel:

MsExcel.ActiveWorkbook.Close; MsExcel.Application.Quit;

Menyekat permintaan (pengesahan, pemberitahuan) daripada Ms Excel, sebagai contoh, menyekat permintaan untuk menyimpan fail:

MsExcel.DisplayAlerts:=False;

Paparkan Excel pada skrin:

MsExcel.Visible:= Benar;

atau sembunyikan:

MsExcel.Visible:= Salah;

Mencetak kandungan helaian MS Excel aktif:

MsExcel.ActiveSheet.PrintOut;

Membaca/menulis data dalam EXCEL

Anda boleh mengakses sel dalam buku kerja Excel semasa seperti berikut:

Untuk menulis nilai pada sel:

MsExcel.Range["B2"]:="Hello!";

Untuk membaca nilai daripada sel:

S:=MsExcel.Julat["B2"];

di mana B2- alamat sel.

Atau menggunakan gaya pautan R1C1:

MsExcel.Range]:="Hello!";

di mana - koordinat sel.

Secara umum, anda boleh menetapkan sebarang nilai pada sel Excel (aksara, integer, pecahan, tarikh) dan Ms Excel akan menetapkan pemformatan lalai dalam sel.

Formatkan sel dalam EXCEL

Anda boleh memilih (memilih) sekumpulan sel untuk kerja seterusnya seperti ini:

MsExcel.Range, MsExcel.Cells].Pilih; // atau MsExcel.Range["A1:C5"].Pilih;

dalam kes ini, kawasan yang terletak di antara sel A1 dan C5 akan dipilih.

Selepas membuat pilihan, anda boleh menetapkan penggabungan sel, bungkus perkataan dan mendatar dan penjajaran menegak:

// menggabungkan sel MsExcel.Selection.MergeCells:=True; // bungkus mengikut MsExcel.Selection.WrapText:=True; // penjajaran mendatar MsExcel.Selection.HorizontalAlignment:=3; // penjajaran menegak MsExcel.Selection.VerticalAlignment:=1;

Untuk menegak dan penjajaran mendatar nilai berikut digunakan:

1 - penjajaran lalai digunakan
2 - penjajaran kiri
3 - di tengah
4 - di sebelah kanan.

Sempadan Sel

Apabila ditetapkan kepada 1, sempadan sel dilukis dengan garis pepejal nipis.

Di samping itu, anda boleh menentukan nilai untuk sifat Borders, contohnya, sama dengan 3. Kemudian hanya sempadan atas untuk blok pemilihan akan ditetapkan:

MsExcel.Selection.Borders.LineStyle:=1;

Nilai sifat Borders menentukan gabungan tepi sel yang berbeza. Dalam kedua-dua kes, anda boleh menggunakan nilai dalam julat dari 1 hingga 10.

Menggunakan kata laluan dalam EXCEL

Menetapkan kata laluan untuk buku kerja aktif boleh dilakukan seperti berikut:

Cuba // cuba untuk menetapkan kata laluan MsExcel.ActiveWorkbook.protect("lulus"); kecuali // tindakan jika percubaan untuk menetapkan kata laluan gagal ditamatkan;

di mana lulus- tetapkan kata laluan untuk buku.

Mengalih keluar kata laluan daripada buku adalah serupa, gunakan arahan

MsExcel.ActiveWorkbook.Unprotect("lulus");

di mana lulus

Menetapkan dan mengalih keluar kata laluan untuk helaian aktif buku kerja Excel dilakukan menggunakan arahan

MsExcel.ActiveSheet.protect("lulus"); // menetapkan kata laluan MsExcel.ActiveSheet.Unprotect("pass"); // alih keluar kata laluan

di mana lulus- kata laluan ditetapkan untuk melindungi buku.

Operasi tambahan dalam EXCEL

Mengalih keluar baris dengan anjakan ke atas:

MsExcel.Rows["5:15"].Pilih; MsExcel.Selection.;

Apabila melakukan tindakan ini, baris 5 hingga 15 akan dipadamkan.

Tetapkan kawasan beku pada lembaran kerja Excel yang aktif

// nyahbeku kawasan jika ia ditetapkan MsExcel.ActiveWindow.FreezePanes:=False; // pilih sel yang dikehendaki, dalam kes ini D3 MsExcel.Range["D3"].Pilih; // tetapkan kawasan pembekuan MsExcel.ActiveWindow.FreezePanes:=True;

Menyimpan buku kerja Excel yang aktif