2009-02-14 39 views
5

Tôi có ứng dụng MS-Access định dạng dữ liệu trong hai bảng tính lớn (20.000 hàng), nhập dữ liệu này vào bảng, chạy một số truy vấn so sánh dữ liệu và đầu ra kết quả dưới dạng tệp excel.Thay thế cho MS-Access/Excel để thao tác bảng tính

Vấn đề là khi ứng dụng (và mã VBA) phát triển nó trở nên đau đớn hơn khi sử dụng Access và tôi tự hỏi liệu có cách tiếp cận tốt hơn không?

Ưu điểm/nhược điểm của giải pháp .NET (C#) là gì, so với MS-Access và thư viện nào tốt nhất để sử dụng?

Chúc mừng,

Breandán

Chúc mừng cho các câu trả lời cho đến nay, tôi quên đề cập đến dù rằng ứng dụng này cần được đứng một mình, tôi cần để có thể gói lên các ứng dụng và và gửi nó để người dùng cuối cài đặt trên máy tính của họ. Điều này chỉ có (lưu ý) MS-Office và .Net Framework được cài đặt, vì vậy tôi không chắc chắn làm thế nào khả thi MySQL vv sẽ không có nơi để lưu trữ nó.

+0

nỗi đau mà bạn đang gặp phải khi sử dụng Access là gì? Có tốc độ thực thi không? Là nó nhập dữ liệu vào Access, thao tác nó và sau đó xuất ra các tập tin Excel? –

+0

Nó chủ yếu là IDE VBA khủng khiếp, xử lý ngoại lệ kém, tùy chọn ghi nhật ký và theo dõi thay đổi mã. Nó cảm thấy như một bước trở lại so với những gì tôi đã sử dụng trước đây (java/eclipse, C#/VS). Vào phút đó, ứng dụng này ổn định, nhưng có thể sẽ được mở rộng trong những tháng tới, vì vậy tôi đang tìm cách thay đổi ngay bây giờ. –

Trả lời

5

Chuyển sang .Net sẽ cho phép bạn có các công cụ tốt hơn theo ý của bạn để thao tác dữ liệu.

Bạn phải cẩn thận dù bạn đang làm gì vào lúc này với giải pháp Access của mình: nếu bạn đang xử lý rất nhiều trường hợp đặc biệt để xử lý dữ liệu từ và đến Excel, thì rất có thể bạn sẽ vẫn phải làm những thứ đó bằng bất kỳ ngôn ngữ hoặc khung mà bạn đã chọn.

Nếu bạn có nhiều mã được đầu tư vào kéo dữ liệu Excel vào Access thì bạn vẫn có thể giữ quyền truy cập cho phần đó và sử dụng .Net để giúp bạn thực hiện so sánh và tạo báo cáo Excel kết quả.

Hơi khó để thực sự đưa ra đề xuất mà không cần biết thêm về dự án của bạn.

Nếu bạn chỉ muốn sử dụng tự động hóa để kéo dữ liệu và tạo tệp Excel, thì .Net có thể không cung cấp cho bạn rất nhiều vì bạn vẫn phải thực hiện chính xác những điều bạn đã thực hiện trong Access . Thay vào đó, bạn có thể xem xét sử dụng thành phần Excel thương mại sử dụng mô hình khác nhau để mở/tạo bảng tính Excel một cách đẹp hơn.
Có một vài nhà cung cấp thành phần có những thứ này.

Một giải pháp cũng là sử dụng các công cụ báo cáo để trực tiếp lấy dữ liệu từ Excel và tạo báo cáo mà bạn có thể lưu lại Excel một cách đơn giản.

Lời khuyên của tôi sẽ là:

  • Nếu giải pháp truy cập của bạn ổn định và nó đang làm công việc của mình, sau đó bạn có thể xem xét giữ nó.
    Di chuyển sang một hệ thống mới sẽ khiến bạn tốn thời gian và tiền bạc và bạn phải kiểm tra xem kết quả có đáng để đầu tư hay không.
  • Nếu bạn cảm thấy bị hạn chế bởi khả năng truy cập, hãy dành thời gian thử nghiệm với các giải pháp và thành phần khác nhau cho phép bạn thao tác Excel, ví dụ bằng cách sử dụng nhà cung cấp LINQ Excel (1 hoặc 2). thử khác nhau commercial components cho đến khi bạn tìm thấy một phù hợp với nhu cầu của bạn.

Nếu bạn đang định tuyến .Net, bạn có thể kết thúc thậm chí không cần một cơ sở dữ liệu để xử lý dữ liệu.
Nếu bạn làm như vậy, bạn luôn có thể sử dụng Jet -or phiên bản mới của nó, ACE- như một back-end sẽ tạo ra cơ sở dữ liệu MSAccess.
Nó đã được cài đặt trên hầu hết các máy và được hỗ trợ tốt bởi các công cụ MS.
Các tùy chọn tốt khác là SQL Server Compact và SQLite vì không có tùy chọn nào trong số này yêu cầu thiết lập phức tạp, chỉ là một DLL để gửi cùng với dự án của bạn.

1

Thư viện Apache POI có thể được sử dụng cho bạn. Nó dựa trên java và có thể hoạt động trên các tệp excel.

Một lựa chọn khác có thể là sử dụng trình điều khiển ODBC trực tiếp để hoạt động trên tệp XLS. Có thể là rất nhiều hồ sơ mặc dù ..

http://poi.apache.org/

Dự án POI bao gồm các API cho các thao tác định dạng file khác nhau dựa trên OLE 2 định dạng tài liệu Compound của Microsoft, và văn phòng định dạng OpenXML, sử dụng Java thuần túy. Tóm lại, bạn có thể đọc và viết các tệp MS Excel bằng cách sử dụng Java. Ngoài ra, bạn có thể đọc và viết các tệp MS Word và MS PowerPoint bằng cách sử dụng Java. POI là giải pháp Java Excel của bạn (cho Excel 97-2007). Tuy nhiên, chúng tôi có một API hoàn chỉnh để chuyển các định dạng Tài liệu Hợp chất OLE 2 khác và chào đón những người khác tham gia.

OLE 2 Các tệp dựa trên định dạng tài liệu hỗn hợp bao gồm hầu hết các tệp Microsoft Office như XLS và DOC cũng như các định dạng tệp dựa trên API tuần tự hóa MFC.

Các tệp dựa trên định dạng OpenXML Office bao gồm định dạng tệp dựa trên xml mới (2007+), bao gồm tệp văn phòng Microsoft như XLSX, DOCX và PPTX.

Chỉnh sửa: Kiểm tra một công cụ như Monarch Pro, nó là tuyệt vời tại mỏ dữ liệu, vv

-2

Tôi tự hỏi nếu bạn đã phát triển nhanh hơn Access. Đây là những cơ sở dữ liệu mạnh mẽ hơn, như SQL Server, được sinh ra. 20.000 hàng không phải là một số lượng lớn cho SQL Server, nhưng tôi sẽ đặt cược nó có được cho truy cập. Bao nhiêu không gian đĩa là truy cập khi bạn chạy nó? Tốc độ dữ liệu tăng nhanh như thế nào?

Bạn biết rõ C# so với VB như thế nào? Nếu bạn không biết rõ C# thì đó có thể là cơ hội tốt để học hỏi. Đó là một vấn đề mà bạn đã biết rõ.

+0

Mọi người không thể đọc? Câu hỏi ban đầu nói rằng đó là CODE trở nên khó sử dụng. 20K hàng là số lượng dữ liệu hoàn toàn nhỏ cho Jet để xử lý. –

+0

Bên cạnh, 20000 hàng không có gì để truy cập. Bạn có thể truy vấn 100k hàng một cách dễ dàng. Nếu luôn luôn ngăn cản tôi làm thế nào ít người hiểu được những hạn chế thực sự của truy cập vs những người tưởng tượng. –

+0

Nếu Access thực sự là một cơ sở dữ liệu doanh nghiệp, sẽ không có lý do gì để Microsoft cộng tác với Sybase để họ có thể tìm ra SQL Server. Tôi không tin rằng Access là giải pháp tốt nhất cho nhiều người dùng đồng thời, bởi bất kỳ căng. – duffymo

0

Tôi sẽ xem xét một hệ thống sử dụng SQL Server Compact để bắt đầu. Bạn có thể sử dụng nó mà không cần cài đặt nếu bạn muốn (mặc dù tôi đề nghị bạn làm, nó dễ dàng hơn nhiều để chỉ giả định dll cần thiết là trong GAC). Nếu sau đó bạn tìm thấy bạn cần thêm chức năng (nói thủ tục được lưu trữ hoặc cột TEXT/BLOB, đó là loại điều) sau đó di chuyển đến SQL Server sẽ là tầm thường.

Nếu cơ sở dữ liệu của bạn được tạo lại mỗi lần thì việc thử những thứ khác nhau sẽ đơn giản như chỉ đến một tệp khác.

Nếu bạn có mã số đáng kể trong VBA, tôi khuyên bạn nên chuyển nó sang VB.Net (thực hiện chuyển đổi dễ dàng nhất, trước tiên và dễ xảy ra nhất) sau đó di chuyển sang C# nếu bạn muốn.

Để tạo/thay đổi bảng excel, bạn có ba tùy chọn.

Một là sử dụng VSTO mặc dù Wikipedia là mô tả tốt hơn nhiều. Điều này sẽ gần nhất với sự phát triển VBA cũ của bạn mặc dù nó có một bộ phức tạp khác.

Một cách khác là sử dụng một trong các thư viện đầu ra excel, có few cộng với nhiều thư mục thương mại khác. Tôi không thể giới thiệu bất kỳ cá nhân mặc dù other's here have.

Cuối cùng là chỉ cần loại bỏ csv và để cho excel đối phó với nó khi bạn mở nó.

+0

Một người khác không có khả năng đọc hiểu. Vấn đề là CODE, không phải quản lý dữ liệu. –

+0

FFS - hầu hết bài viết của tôi dành cho mã, hoặc bạn không bận tâm đọc qua máy chủ SQL nhỏ gọn để làm cho mã dễ dàng hơn (và cho phép chỉnh sửa của mình cũng sẽ dễ dàng triển khai hơn !!) – ShuggyCoUk

+0

Ah, tôi hiểu rồi. Bạn đang tức giận vì công việc của bạn là giải pháp truy cập và bạn không thích người gõ nó. Đọc bài đăng của tôi. bạn có thấy tôi gõ cửa không? Ông quan tâm đến việc chuyển sang C#, có một linq để cung cấp máy bay phản lực (chặn kẻ này làm việc http://www.codeproject.com/KB/linq/linqToSql_7.aspx)? – ShuggyCoUk

2

Tôi muốn nói về khối lượng dữ liệu của 20.000 hàng bạn đang làm việc, cơ sở dữ liệu máy chủ SQL không thực sự giúp bạn đạt được nhiều ngoại trừ việc chuyển sang các thủ tục được lưu trữ để thao tác dữ liệu. Về mặt này, nó được cho là tốt hơn so với VBA, vì vậy bạn có thể sẽ có được một cơ sở mã đó là dễ bảo trì hơn. Tuy nhiên, khối lượng dữ liệu bạn mô tả là rất nhỏ theo tiêu chuẩn cơ sở dữ liệu. Tôi sẽ không mong đợi hiệu suất là một vấn đề cho đến khi bạn có một hoặc hai đơn đặt hàng của cường độ dữ liệu nhiều hơn thế.

Nếu bạn muốn thực hiện công việc data munging, bạn có thể nên sử dụng ngôn ngữ kịch bản như Perl hoặc Python. Các ngôn ngữ này tốt hơn nhiều cho các thao tác xử lý dữ liệu hơn C# hoặc VB.Net. Tốt, các bản phân phối windows miễn phí của cả Perl và Python có thể được tìm thấy tại www.activestate.com.

Excel có thể được viết với Python thông qua giao diện python-com sử dụng cùng một API như VBA, nhưng đạt được một ngôn ngữ tốt hơn nhiều với nhiều loại libraies có sẵn. Tương tự, điều này cũng có thể được thực hiện với Perl thông qua Win32::OLE. Ngoài ra còn có một số thư viện tiện ích như pyexcelerator, xlrdxlwt, cho Python và Spreadsheet::WriteExcel/Spreadsheet::ParseExcel cho Perl. Ngoài ra còn có các mô-đun có sẵn để xây dựng các ứng dụng cửa sổ có thể cài đặt, chẳng hạn như Py2EXE hoặc Perl Dev Kit

This Stackoverflow posting thảo luận việc sử dụng Excel từ Python, bao gồm tạo trình bao bọc với MakePy, sâu hơn một chút.

Bạn đang làm việc với .Net, bạn cũng có thể thử IronPython - đó là bản thực thi .Net gốc của Python, sẽ chạy bất cứ nơi nào có thời gian chạy Net phù hợp được cài đặt. Bạn cũng có thể sử dụng plugin Visual Studio miễn phí có tên là IronPythonStudio).

Một giải pháp thay thế khác là R. R chủ yếu là một gói thống kê, nhưng ngôn ngữ cốt lõi có khả năng thao tác dữ liệu mạnh mẽ và nhiều thư viện giao diện (và các ngôn ngữ khác như đồ họa, các tính toán thống kê khác nhau và Excel interface.. Nó thực sự là một công cụ báo cáo và thao tác dữ liệu có mục đích chung mạnh mẽ)

0

Nghe có vẻ với tôi rằng Access không giúp bạn làm người trung gian. 20K hàng không có vẻ như nhiều với tôi. Bạn đã nói bạn chuyển từ Excel sang Access và sau đó quay lại Excel. Bạn có cần giữ dữ liệu Access xung quanh không?

Nếu không, tôi khuyên bạn nên sử dụng .Net và thư viện Excel của bên thứ ba như FlexCel và chuyển thẳng từ Excel sang Excel trong bộ nhớ. Ứng dụng bao bì .Net rất dễ dàng với trình cài đặt hoặc ClickOnce.

2

Tại SpreadsheetGear, đặc sản của chúng tôi là các thành phần bảng tính Excel tương thích với hiệu suất cao. Chúng tôi nghe mọi lúc (xem một vài trích dẫn của khách hàng trên this page) rằng SpreadsheetGear for .NET nhanh hơn và dễ sử dụng hơn các tùy chọn khác.

live ASP.NET samples với nguồn C# và VB.NET và free trial nếu bạn muốn dùng thử.

Tuyên bố từ chối trách nhiệm: Tôi sở hữu SpreadsheetGear LLC

+0

Joe - bạn đá !! –

1

SpreadsheetGear hoàn toàn đá! Bạn có được tốt nhất của cả hai thế giới, nơi mà tất cả các logic trong bảng tính có sẵn cho bạn để thực thi từ mã của bạn. Bạn thực sự có thể rút ngắn sự phát triển của bạn, vì bạn có thể có các đơn vị kinh doanh giúp định hình logic cho các quy trình kinh doanh của họ.