2012-08-17 28 views
5

Tôi đang xuất dữ liệu từ CxDBGrid sang tệp Excel. Tôi có thể tạo tệp và sao chép dữ liệu trong đó, nhưng tôi đang gặp sự cố thực sự với định dạng cột. Vì tôi đang lấy dữ liệu từ DB nên tôi muốn bảng tính phản ánh loại: NUMBER, VARCHAR2, DATE và v.v. tôi trực quan tạo ra một vĩ mô, đi để tìm kiếm mã VBA, và lặp lại nó trong dự án Delphi:Làm cách nào để đặt loại và định dạng cột Excel?

sheet.Columns[K+2].NumberFormat := '0,000'; //Number 
sheet.Columns[K+2].NumberFormat := '@'; //Text 
sheet.Columns[K+2].NumberFormat := 'm/d/yyyy'; //Date 

Số định dạng công trình ok nhất của thời đại, nhưng hai người kia thì không. Khi tôi mở tệp được tạo, các cột văn bản sẽ hiển thị dưới dạng "Tùy chỉnh" và mỗi ô hiển thị "-64". Nếu tôi đi chỉnh sửa ô, giá trị chính xác thực sự ở đó. Ngày là một vấn đề khác: định dạng của DB là dd/mm/yyyy và nếu tôi nạp nó vào Excel, nó sẽ bị rối tung lên. Tôi đã thử thiết lập định dạng đúng, nhưng sau đó Excel không nhận ra nó.

Bất kỳ manh mối nào?

Tôi cũng đang đặt chiều rộng cột. Điều đó hoạt động hoàn hảo.

+0

Tôi giả sử khi bạn nói cxDbGrid bạn đang đề cập đến các thành phần của Express Express. Nếu vậy, bạn có đang xuất sang Excel bằng cách sử dụng thủ tục ExportGridToExcel() do Nhà phát triển Express cung cấp không? –

+0

Tôi đã thử nhưng nó có vấn đề với thiết lập kiểu dữ liệu. Đó là lý do tại sao tôi muốn làm những việc thủ công – asg2012

+0

Tôi sử dụng ExportGridToExcel() một số địa điểm mà không có bất kỳ vấn đề nào liên quan đến loại dữ liệu hoặc định dạng khi xuất. Nếu không nhìn thấy mã của bạn, thật khó để tìm ra lý do tại sao nó không hoạt động cho bạn. Thay vì gặp rắc rối khi viết xuất của riêng bạn, tôi sẽ hỏi trong trang web hỗ trợ của Nhà phát triển Express nếu họ có thể giúp bạn. Hỗ trợ của họ rất tuyệt và thường họ có thể giúp bạn giải quyết khá nhanh chóng. –

Trả lời

3

Bạn chưa từng nói "cách bạn đang làm việc theo cách thủ công" có nghĩa là mọi người phải hoàn toàn đoán những gì bạn đang làm. Vì vậy, đây là suy đoán hoang dã của tôi:

  1. Nếu tôi giả sử bạn đang sử dụng các thành phần Spreadsheet Express từ Developer Express Tôi có kinh nghiệm estensive với thành phần này. Nó không hỗ trợ các định dạng số tùy ý. Nó hỗ trợ định dạng "tiền" (0.00) với chính xác hai chữ số thập phân. Nó không hỗ trợ ba hoặc một hoặc bất kỳ số thập phân nào khác. Nếu vậy, đây là sự cố do thiết kế đã biết trong bảng tính Express. Nếu bằng tay bạn có nghĩa là "tờ" như bạn hiển thị ở trên là một đối tượng OLE và bạn đang giao tiếp thông qua OLE Automation cho Excel, thì bạn nên định dạng CELLS riêng lẻ hoặc dưới dạng phạm vi và không phải cột các đối tượng. Tôi không chắc chắn như thế nào các định dạng đối tượng cột sẽ bao giờ ghi đè lên các giá trị tế bào, nếu họ làm gì cả. Định dạng ô thường là ô theo ô và phải được xử lý như vậy.

  2. Nếu bạn thực sự muốn điều này hoạt động đúng, bạn sẽ không sử dụng Excel thông qua tự động hóa OLE, bạn sẽ nhận được thư viện văn bản có khả năng định dạng Excel XLS thích hợp. Tôi đã khá chắc chắn rằng bạn có thể nhận được kết quả thích hợp trực tiếp từ CX (DevEx) lưới db, nhưng tôi sẽ yêu cầu trên diễn đàn của họ, không phải ở đây. Với một DB Grid thông thường, tôi chỉ sử dụng TJvDBGridExcelExport có trong Jedi JVCL, và làm việc với VCL DB Grid thông thường.

4

Vấn đề là giá trị được gán là chuỗi Unicode. Hãy thử điều này:

sheet.Columns[K+2].NumberFormat := AnsiChar('@'); 
sheet.Columns[K+2].NumberFormat := AnsiString('m/d/yyyy'); 
Các vấn đề liên quan