AI muốn lập trình DLL cho Excel và các loại bằng Delphi thì xem video này nhé!

Liên hệ QC

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia
13/6/06
Bài viết
4,649
Được thích
10,138
Giới tính
Nam
Nghề nghiệp
Giáo viên, CEO tại Bluesofts
Lần chỉnh sửa cuối:
Duyệt mảng thì bạn biết mà.
Còn nếu nói về hàm Array của VBA thì tôi không biết trong các phiên bản Delphi mới có hàm giống hoặc gần giống thế hay không. Tôi linh cảm là có cái gì đó gần giống Array của VBA.
Còn trong Delphi 5 thì nếu tôi không lầm thì không có. Nhưng với trường hợp như bạn nêu thì dùng CONST thôi.
Mã:
procedure TForm1.Button2Click(Sender: TObject);
const
  b: array[1..2] of string = ('Data_Nhap', 'Data_Ban');
  d: array[1..2, 1..3] of string = (('hic hic', 'hi hi', 'he he'),
                                    ('bla bla', 'ble ble', 'bli blu'));
var
  r, c: Integer;
begin
  for r := low(b) to high(b) do
    showmessage(b[r]);
  for r := low(d) to high(d) do
    for c := low(d[r]) to high(d[r]) do
      showmessage(d[r, c]);
end;
Em chưa hiểu dòng sau lắm
Mã:
b: array[1..2] of string = ('Data_Nhap', 'Data_Ban');
Vậy nếu ta có 4 SheetName thì khai báo như sau Phải không Anh
Mã:
b: array[1..2, 1..3,1..4] of string = ('Data_Nhap', 'Data_Ban' , 'Data_Ban_3', 'Data_Ban_4');
 
Upvote 0
Mã:
b: array[1..4] of string = ('Data_Nhap', 'Data_Ban' , 'Data_Ban_3', 'Data_Ban_4');

b - mảng 1 chiều
d - mảng 2 chiều
array[1..2, 1..3,1..4] of string - mảng 3 chiều

VBA bạn hiểu thì tại sao Delphi lại không hiểu?

Trong VBA thì b(1 To 2, 1 To 3,1 To 4) là mảng mấy chiều?
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
b: array[1..4] of string = ('Data_Nhap', 'Data_Ban' , 'Data_Ban_3', 'Data_Ban_4');

b - mảng 1 chiều
d - mảng 2 chiều
array
Mã:
[1..2, 1..3,1..4]
of string - mảng 3 chiều

VBA bạn hiểu thì tại sao Delphi lại không hiểu?

Trong VBA thì b(1 To 2, 1 To 3,1 To 4) là mảng mấy chiều?
thì em thấy cái chấm chấm đó mới nhìn chưa hiểu sao ... sau coi kỹ mấy dòng For kia ở dưới xong mới ngờ ngợ ra :D
Em cố giắng học bước qua mấy cái khai báo và sử dụng trong Delphi là em viết code Delphi tạm ok
Mã:
[1..2, 1..3,1..4]
 
Upvote 0
đang viết cái này nó lại liên quan cái khác trong cái mớ bòng bong code rối như tơ vò ...
lang thang kiếm tài liệu học ... thấy link sau có code hay (theo chủ quan của Mạnh)
Nếu bạn nào yêu thích Delphi và dấn thân vào con đường đau khổ chinh phục đỉnh cao của Delphi thì vô linh sau coi he ...
Composants libres/Free Software Components
http://tcoq.free.fr/composants.html
Coi thấy trên Delphi nó cũng viết quicksort na ná như VBA
Mã:
uses Dos;

(* Quicksort: *)

type

OrderPredicate = function (i, j : Integer) : Boolean;
SwapProc = procedure (i, j : Integer);

procedure quicksort(lo, hi: Integer;
                    less : OrderPredicate;
                    swap : SwapProc);
  (* derived from the quicksort routine in QSORT.PAS in the Turbo Pascal
     distribution *)
  procedure sort(l, r: Integer);
    var i, j, k : Integer;
    begin
      i := l; j := r; k := (l+r) DIV 2;
      repeat
        while less(i, k) do inc(i);
        while less(k, j) do dec(j);
        if i<=j then
          begin
            swap(i, j);
            if k=i then k := j (* pivot element swapped! *)
            else if k=j then k := i;
            inc(i); dec(j);
          end;
      until i>j;
      if l<j then sort(l,j);
      if i<r then sort(i,r);
    end(*sort*);
  begin
    if lo<hi then sort(lo,hi);
  end(*quicksort*);
Vui lòng Không Trích dẫn mấy dòng sau Nha ... Vì sẻ phát sinh nhiều vấn đề rối dắm ............... ??!!

Mà sao thấy toàn có vô đây dòm mà ko thấy bạn trẻ nào tham gia khóa học này hết trơn vậy ... phải chăng nó khó quá ... hay muốn học lắm nhưng lãng tránh cái Tôi tiền ẩn của chính mình sao ..vvv -0-0-0-===\.

Mạnh rất mong có nhiều Bạn tham gia thớt này vì sẻ có nhiều câu hỏi phát sinh .... thì sẻ có nhiều câu trả lời hay mà học ....

Kiếm thức đám đông sẻ quy tụ lại và hình thành nên cái triết lý sâu xa, kiến thức đỉnh cao của code .................... vvv
 
Upvote 0
Coi thấy trên Delphi nó cũng viết quicksort na ná như VBA
Bạn có lẽ không hiểu kỹ lắm.
Mỗi một bài toán có thể có nhiều cách giải. Mỗi cách giải nó có từng bước chính. Đó là thuật toán ***. Thuật toán là thuật toán, nó chả phụ thuộc vào ngôn ngữ lập trình nào cả. Cũng cùng một thuật toán giao cho nhiều người thì anh dùng Delphi sẽ implement nó dùng các cấu trúc, câu lệnh của Delhi. Anh dùng VB thì sẽ dùng cấu trúc và câu lệnh của VB để thực hiện cái thuật toán đó. Mà các cấu trúc câu lệnh chính thì trong các ngôn ngữ có triết lý như nhau, cái khác chỉ là chi tiết, vd. cú pháp và những chi tiết khác. Vd. trong VBA sau FOR thì biến điều khiển xác định còn Delphi không đảm bảo nó là xác định.
Khó có thể mong đợi là Quick sort trong Delphi khác với trong VBA, vì thuật toán Quick sort là thuật toán kinh điển, nó có triết lý cụ thể, nên ai implement Quick sort cũng lấy cùng một thuật toán đó để thực hiện. Vì thế mà "giống nhau".

***: Thuật toán thường được biểu diễn dưới dạng liệt kê các điểm chính (1, 2, 3 ...) hoặc sơ đồ khối.
 
Lần chỉnh sửa cuối:
Upvote 0
To @giaiphap
Hôm qua kẹt quá nay mới rảnh chút úp cho he

Mô tả sở qua như sau:
1/ Mạnh xài Windows10_x64 + Office2016_x32

2/ Mạnh có Build Thành 2 bản một bản cho Officex32 và 1 bản cho Officex64

3/ Trên máy mạnh thì nó chạy được file *.dll trong Folder Win32 còn File trong Folder Win64 là lỗi code ... Vì vậy khẳng định Officex32 thì chỉ chạy *.dll Win32

4/ Phiền Bạn nào có xài Officex64 tải về chạy thử File trong Folder Win64 xem nó có chạy tốt ko nhé

5/ Trong File Excel có ghi chi tiết trong đó Mình làm Load File *.dll trong Folder Build nó cho tiện khi build xong mở file Excel lên test code luôn khỏi mất công copy file vào C:\Windows\System32\ *.dll ... Nếu sau này làm thành thư viên rồi thì copy vô đó xóa hết code cho gọn

6/ Có 1 hàm Linktinh đó mục đích là mình thử xem cái *.dll kia nó có chạy hay ko chứ hàm đó ko có giá trị chi cả he :p:D

7/ File VBLibrary.dpr là code đó he ... Chuột Phải\Edit nó mà coi

8/ Tài liệu mạnh có đầy yêu khúc nào mai mốt rảnh coi lại xem cái nào thuận tiện nhất cho người mới nhập môn mạnh úp cho

Cứ từ từ thong thả ta chinh phục nó ... có nhiều tay giáo sư làm 10 mấy năm chưa ra 1 cái đề TÀI khoa học mà mình mới bắt đầu lo chi

9/ Làm phiền @befaint có Officex64 chạy test dùm code trong Folder Win64 và ngược lại xem sao

Học mà chơi ... chơi mà học .... vui vẻ khí thế là tốt
Chào Anh Mạnh !
Thấy chủ đề này hay quá em cũng định học Delphi thử xem. Em download file của Anh về giả nén bị báo lỗi không biết vì sao, Anh kiểm tra lại giúp em với.
Cám ơn Anh !
 

File đính kèm

  • 20-10-2018 12-49-53 PM.png
    20-10-2018 12-49-53 PM.png
    12.6 KB · Đọc: 11
Upvote 0
Chào Anh Mạnh !
Thấy chủ đề này hay quá em cũng định học Delphi thử xem. Em download file của Anh về giả nén bị báo lỗi không biết vì sao, Anh kiểm tra lại giúp em với.
Cám ơn Anh !
bạn tải lại xem nhiều lúc mình cũng bị vậy ... nó lỗi tải file đó
 
Upvote 0
các Bạn cho Mình hỏi 1 chút
khi mình sử dụng Hàm trong trong Delphi Thì khai báo Uses là : comobj rồi mà sao cái Select
Nó báo màu đỏ ... vậy phải khai báo sao khi sử dụng hàm sau
Mã:
Function ExcelEnd(Excel: OleVariant): Boolean;stdcall;
Begin
  Result := True;
  Try
    Excel.Selection.End[xlDown].Select;
    Excel.Selection.End[xlToRight].Select;
  Except
    Result := False;
  End;
End;
 
Upvote 0
Các anh chị nào biết cho em hỏi trong Delphi có control Combobox nào thể hiện được nhiều cột không ?
 
Upvote 0
các Bạn cho Mình hỏi 1 chút
khi mình sử dụng Hàm trong trong Delphi Thì khai báo Uses là : comobj rồi mà sao cái Select
Nó báo màu đỏ ... vậy phải khai báo sao khi sử dụng hàm sau
Mã:
Function ExcelEnd(Excel: OleVariant): Boolean;stdcall;
Begin
  Result := True;
  Try
    Excel.Selection.End[xlDown].Select;
    Excel.Selection.End[xlToRight].Select;
  Except
    Result := False;
  End;
End;
Mời bác xơi!
https://docs.microsoft.com/en-us/office/vba/api/Excel.XlDirection
 
Upvote 0
các Bạn cho Mình hỏi 1 chút
khi mình sử dụng Hàm trong trong Delphi Thì khai báo Uses là : comobj rồi mà sao cái Select
Nó báo màu đỏ ... vậy phải khai báo sao khi sử dụng hàm sau
Mã:
Function ExcelEnd(Excel: OleVariant): Boolean;stdcall;
Begin
  Result := True;
  Try
    Excel.Selection.End[xlDown].Select;
    Excel.Selection.End[xlToRight].Select;
  Except
    Result := False;
  End;
End;

Bạn cần khai báo Unit có tên là "ExcelXP" trên cùng. (Có nhiều phiên bản Excel, nhưng ExcelXP đảm baoar tương thích với mọi phiên bản Excel cao hơn.
Bài đã được tự động gộp:

Các anh chị nào biết cho em hỏi trong Delphi có control Combobox nào thể hiện được nhiều cột không ?

Vụ này nếu tự lập trình phải biết API. Nếu chưa tìm đc component nào thì bạn dùng tạm code lập trình API ở đây
https://stackoverflow.com/questions/29366006/show-multiple-columns-contents-in-a-combobox
Bài đã được tự động gộp:

Tạo Combobox với nhiều cột hiển thị trong Delphi

combobox1.png
combobox2.png


Link tải (không biết có free không?)
http://www.rosinsky.cz/delphi/combobox.html
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn cần khai báo Unit có tên là "ExcelXP" trên cùng. (Có nhiều phiên bản Excel, nhưng ExcelXP đảm baoar tương thích với mọi phiên bản Excel cao hơn.
Bài đã được tự động gộp:



Vụ này nếu tự lập trình phải biết API. Nếu chưa tìm đc component nào thì bạn dùng tạm code lập trình API ở đây
https://stackoverflow.com/questions/29366006/show-multiple-columns-contents-in-a-combobox
Bài đã được tự động gộp:

Tạo Combobox với nhiều cột hiển thị trong Delphi

combobox1.png
combobox2.png


Link tải (không biết có free không?)
http://www.rosinsky.cz/delphi/combobox.html
Em cũng có tham khảo 2 cái này rồi, mà không thấy đẹp lắm hihihihihihi
 
Upvote 0
MÌnh có tập viết 1 Sub sau để chạy test xem sao ... thấy chạy tốt ....
tuy nhiên mình chưa hiểu lắm về cách sử dụng này keo là chi và sử dụng trong trường hợp nào là hiệu quả nhất ??!!
cách khai báo sử dụng vậy có điều chỉnh gì thêm ....

Mong các bạn chỉ dùm
Mã:
procedure ConnecTionExcel;stdcall;
var
  Excel    : TExcelApplication;
  wSheet   : TExcelWorksheet;
begin
  try
    Excel := TExcelApplication.Create (nil);
    Excel.Connect; 
    wSheet := TExcelWorksheet.Create(nil);
    wSheet.ConnectTo(Excel.WorkSheets[1] as _Worksheet); 
    wSheet.Range['C1',EmptyParam].Value2 := 'Kiều Văn Mạnh';
    wSheet.Range['C1',EmptyParam].Copy(wSheet.Range['A1',EmptyParam]);
    Excel.Disconnect;
    Excel.Destroy;
    Excel.Free;
    Excel := nil;
  except
    on e: exception do
      showmessage(e.message);
  end;
end;
 
Upvote 0
MÌnh có tập viết 1 Sub sau để chạy test xem sao ... thấy chạy tốt ....
tuy nhiên mình chưa hiểu lắm về cách sử dụng này keo là chi và sử dụng trong trường hợp nào là hiệu quả nhất ??!!
cách khai báo sử dụng vậy có điều chỉnh gì thêm ....

Mong các bạn chỉ dùm
Mã:
procedure ConnecTionExcel;stdcall;
var
  Excel    : TExcelApplication;
  wSheet   : TExcelWorksheet;
begin
  try
    Excel := TExcelApplication.Create (nil);
    Excel.Connect;
    wSheet := TExcelWorksheet.Create(nil);
    wSheet.ConnectTo(Excel.WorkSheets[1] as _Worksheet);
    wSheet.Range['C1',EmptyParam].Value2 := 'Kiều Văn Mạnh';
    wSheet.Range['C1',EmptyParam].Copy(wSheet.Range['A1',EmptyParam]);
    Excel.Disconnect;
    Excel.Destroy;
    Excel.Free;
    Excel := nil;
  except
    on e: exception do
      showmessage(e.message);
  end;
end;

code của bạn dùng theo cách gọi class/component tới Excel. Cách dùng này cần khi bạn muốn tường minh hơn (chấm là có danh sách propety...), và lập trình với các sự kiện của Excel như OnSheetChange() .

Code của bạn bị thừa. Chỉ cần Excel.Free thì nó đã bso hồm Disconnect và Destroy rồi.
 
Upvote 0
Anh tuân cho em hỏi xíu, em thấy trong cửa sổ lập trình delphi một số có cái ngoặc vuông để code dễ nhìn như trong cshap không biết cái đó phải cài thêm cái gì nữa anh
 
Upvote 0
Upvote 0
Web KT
Back
Top Bottom