|
|
Delphi - Sử dụng công cụ nào để nhập dữ liệu dạng bảng như excel ?
Hỏi đáp, trao đổi về lập trình Delphi. Chú ý: Pascal/Delphi FAQs
| Sử dụng công cụ nào để nhập dữ liệu dạng bảng như excel ? |
|
Member
Member since
12:34 05-05-2009
Posts:
26
Fantasy Points:
101
|
Mình muốn tìm công cụ để nhập dữ liệu dạng bảng như excel sau đó save ra file text. Mình thử sử dụng StringGrid như công cụ này không cho nhập trực tiếp (mình dùng một textbox để nhập) và không cho chèn, xoá dòng nên khi dữ liệu lớn việc xoá dòng và chèn dòng bằng cách dời dữ liệu hơi chậm. Công cụ F1book (trên dp7) thì số dòng hạn chế. Sử dụng DBGrid (với dbclient) thì không cho chọn vùng để copy và xoá. Do kiến thức của mình có hạn chế nên không biết có công cụ nào cho nhập như kiểu excel, cho nhập trực tiếp, cho chọn vùng để xoá và copy, chèn dòng, xoá dòng và số dòng tối đa cũng phải trên 20000 dòng. Bạn nào biết xin chỉ giúp. Cám ơn nhiều.
This post has been viewed
1,786
time(s).
2 direct repli(es)
and
3 indirect repli(es).
|
Title
|
Poster
|
 |
 |
Sử dụng công cụ nào để nhập dữ liệu dạng bảng như excel ? |
| |
|
|
elleHCSC
|
|
|
freeman
|
|
| Re: Sử dụng công cụ nào để nhập dữ liệu dạng bảng như excel ? |
|
Member
Member since
11:39 29-09-2001
Posts:
251
Fantasy Points:
3,861
|
 Posted at
01:34 02-07-2009
Reply to
Sử dụng công cụ nào để nhập dữ liệu dạng bảng như excel ?
( tdvn)
Nếu dùng F1book (trên dp7) thì cũng được khoảng 32635 dòng đấy chứ bác (còn excel thì cũng chỉ cho dùng tới khoảng 65.xxx dòng mà thôi.
Chỉ để dùng để save ra text file thì bạn nên dùng StringGrid
Dùng StringGrid nếu muốn nhập trực tiếp số liệu vào thì tại ObjecInspecter mục Option bạn chọn goEditing là true là nhập vào được mà. Ngoài ra nếu muốn dùng thêm các chức năng tạo thêm dòng, cột hay xoá dòng, cột thì bạn phải gia công viết thêm 1 chút để nó làm được việc này. Nếu muốn nhanh nữa mà không muốn viết thì bạn có thể qua Torry.net kiếm lấy 1 cái Component nào free về mà dùng...trên đó nhiều lắm. Tôi cũng đã thử nhưng như vậy nhưng sau đó thấy mình tự viết lấy 1 vài thử tục thêm vào cái StringGrid có sẵn của D7 để làm đc các yêu cầu trên vẫn khoái hơn, dù sao tự làm thì kiến thức của mình đc mở mang hơn.
This post has been viewed
1,699
time(s).
1 direct repli(es)
and
1 indirect repli(es).
|
Title
|
Poster
|
 |
 |
Re: Sử dụng công cụ nào để nhập dữ liệu dạng bảng như excel ? |
| |
|
|
tdvn
|
|
| Re: Sử dụng công cụ nào để nhập dữ liệu dạng bảng như excel ? |
|
Member
Member since
12:34 05-05-2009
Posts:
26
Fantasy Points:
101
|
 Posted at
12:29 06-07-2009
Reply to
Re: Sử dụng công cụ nào để nhập dữ liệu dạng bảng như excel ?
( elleHCSC)
Cám ơn bạn đã chỉ dẫn. Nhưng mình thử F1Book (trên DP7) chỉ đc 16384 dòng (hình như trên DP2009 kg có công cụ này) Nếu dùng StringGrid với goEditing=true thì không cho chọn vùng. Hơn nữa trên StringGrid không có phương thức delete và insert. Mình viết theo kiểu vòng lặp nên nếu số liệu khá lớn thì việc chèn hoặc xoá dòng thực hiện khá lâu. Xoá thì chuyển dl từ dòng i+1 đến dòng i, lặp cho đến hết dòng có dữ liệu. Nếu chèn thì cũng làm tương tự. Mình cũng thấy công cụ StringGrid khá tiện vì nó là của DP, có thể lưu dữ liệu rất lớn, biên dịch chung với file exe, nhưng chưa viết đc cách xử lý chèn và xoá cho nhanh, bạn có thể gợi ý cách nào nhanh hơn đc không. Để tránh phiền phức về sau, có lẽ mình vẫn chọn StringGrid. Một lần nữa cám ơn bạn
This post has been viewed
1,668
time(s).
1 direct repli(es)
and
0 indirect repli(es).
|
Title
|
Poster
|
 |
 |
Re: Sử dụng công cụ nào để nhập dữ liệu dạng bảng như excel ? |
| |
|
|
freeman
|
|
| Re: Sử dụng công cụ nào để nhập dữ liệu dạng bảng như excel ? |
|
Member
Member since
19:48 04-06-2005
Posts:
332
Fantasy Points:
2,609
|
 Posted at
21:16 06-07-2009
Reply to
Re: Sử dụng công cụ nào để nhập dữ liệu dạng bảng như excel ?
( tdvn)
Tôi chưa dùng StringGrid nên không biết rõ lắm. Tôi thường dùng 2 hàm Begin/EndUpdate() để thao tác nhanh với ListView. Gọi BeginUpdate() để ngăn không cho Delphi làm tươi lại ListView trước khi bạn xử lý xong dữ liệu. Khi kết thúc thì gọi EndUpdate(). Thông thường tốc độ sẽ nhanh hơn khoảng 3 lần...
Unit1.pas:
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, Spin, ExtCtrls;
type TForm1 = class(TForm) ListView1: TListView; Button1: TButton; SpinEdit1: TSpinEdit; RadioGroup1: TRadioGroup; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var i: Integer; OptimizeTime: Boolean; TickCount: Cardinal; begin OptimizeTime := RadioGroup1.ItemIndex = 0; with ListView1.Items do begin if OptimizeTime then BeginUpdate; TickCount := GetTickCount(); for i := 0 to SpinEdit1.Value do begin Add.Caption := Format('%.2d', [i]); end; TickCount := GetTickCount() - TickCount; if OptimizeTime then EndUpdate; end;
MessageBox(Handle, PAnsiChar(Format('TimeCount = %.2n', [TickCount / 1000])), 'TimeCount', MB_OK or MB_ICONINFORMATION); end;
procedure TForm1.Button2Click(Sender: TObject); var OptimizeTime: Boolean; TickCount: Cardinal; begin OptimizeTime := RadioGroup1.ItemIndex = 0; with ListView1.Items do begin if OptimizeTime then BeginUpdate; TickCount := GetTickCount(); while Count > 0 do begin Delete(0); end; TickCount := GetTickCount() - TickCount; if OptimizeTime then EndUpdate; end;
MessageBox(Handle, PAnsiChar(Format('TimeCount = %.2n', [TickCount / 1000])), 'TimeCount', MB_OK or MB_ICONINFORMATION); end;
end.
Unit1.dfm:
object Form1: TForm1 Left = 192 Top = 114 Width = 417 Height = 248 Caption = 'Form1' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object ListView1: TListView Left = 8 Top = 8 Width = 250 Height = 193 Columns = < item Width = 200 end> TabOrder = 0 ViewStyle = vsReport end object Button1: TButton Left = 272 Top = 128 Width = 121 Height = 25 Caption = 'CreateItems' TabOrder = 1 OnClick = Button1Click end object SpinEdit1: TSpinEdit Left = 272 Top = 8 Width = 121 Height = 22 Increment = 1000 MaxValue = 0 MinValue = 0 TabOrder = 2 Value = 10000 end object RadioGroup1: TRadioGroup Left = 272 Top = 40 Width = 121 Height = 81 Caption = 'Begin/Endupdate()' ItemIndex = 0 Items.Strings = ( 'Use' 'Do not use') TabOrder = 3 end object Button2: TButton Left = 272 Top = 160 Width = 121 Height = 25 Caption = 'DeleteItems' TabOrder = 4 OnClick = Button2Click end end
Trong StringGrid không thấy hỗ trợ Begin/EndUpdate(). Với ListView thì thao tác thuận tiện hơn: có thể thêm icon (icon tự tạo hoặc icon của tập tin hệ thống- như kiểu WinRAR), sắp xếp items, chuyển đổi nhiều kiểu hiển thị (vsIcon, vsReport, vsList...), thay đổi màu sắc item... Bạn có thể chuyển sang ListView không?
___________________________ sorry for my bad En...
This post has been viewed
1,658
time(s).
0 direct repli(es)
and
0 indirect repli(es).
|
| Re: Sử dụng công cụ nào để nhập dữ liệu dạng bảng như excel ? |
|
Member
Member since
19:48 04-06-2005
Posts:
332
Fantasy Points:
2,609
|
 Posted at
21:22 06-07-2009
Reply to
Sử dụng công cụ nào để nhập dữ liệu dạng bảng như excel ?
( tdvn)
tdvn: (...) có công cụ nào cho nhập như kiểu excel, cho nhập trực tiếp, cho chọn vùng để xoá và copy, chèn dòng, xoá dòng và số dòng tối đa cũng phải trên 20000 dòng. Bạn nào biết xin chỉ giúp. Cám ơn nhiều. ListView có thể: - Cho nhập trực tiếp (thuộc tính ReadOnly = False); - Chọn theo hàng. - Chèn dòng, xóa dòng. - Số dòng tối đa tùy theo hệ đều hành. Các thao tác xóa, sao chép dòng thì bạn chịu khó Google vậy. ListView được sử dụng rất nhiều, chắc cũng dễ tìm thôi.
___________________________ sorry for my bad En...
This post has been viewed
1,655
time(s).
1 direct repli(es)
and
0 indirect repli(es).
|
Title
|
Poster
|
 |
 |
Re: Sử dụng công cụ nào để nhập dữ liệu dạng bảng như excel ? |
| |
|
|
tdvn
|
|
| Re: Sử dụng công cụ nào để nhập dữ liệu dạng bảng như excel ? |
|
Member
Member since
12:34 05-05-2009
Posts:
26
Fantasy Points:
101
|
 Posted at
11:07 07-07-2009
|
|
Permissions:
Create Topic:
No
|
Reply Topic:
No
|
Attach File:
No
|
Make Poll:
No
|
|