2009-04-07 28 views
11

Một khách hàng muốn "Web-enable" tính toán bảng tính - người dùng chỉ định giá trị của các ô nhất định, sau đó hiển thị cho họ giá trị kết quả trong các ô khác.Làm thế nào để bạn sử dụng phía máy chủ Excel?

(họ không muốn để hiển thị cho người dùng một giao diện "bảng tính giống như". Đây không phải là một câu hỏi UI.)

Họ có một bảng tính khổng lồ với rất nhiều tính toán hơn nhiều, rất nhiều tờ. Nhưng, cuối cùng, chỉ có hai điều quan trọng - (1) bạn đặt số trong một vài ô trên một trang tính, và (2) bạn nhận được số tương ứng trong một vài ô trong một trang tính khác. Phần còn lại của nó là một hộp đen.

Tôi muốn trình bày giao diện người dùng cho người dùng nhập số mà họ muốn, sau đó tôi muốn mở tệp Excel một cách có lập trình, đặt số, yêu cầu nó tính lại và đọc kết quả.

Điều này có thể thực hiện được không? Có một thành phần thương mại nào giúp việc này dễ dàng hơn không? Là những cạm bẫy của họ tôi không xem xét?

(Tôi biết tôi có thể sử dụng Office Automation để làm điều này, nhưng tôi biết nó không được khuyến khích để làm điều đó server-side, vì nó cố gắng chạy trong bối cảnh của một người sử dụng, vv)

Sửa : Rất nhiều người đang nói rằng tôi cần phải tạo lại các công thức trong mã. Tuy nhiên, điều này sẽ rất phức tạp. Có vẻ như đây có thể là một vấn đề được giải quyết - có ai biết về một thành phần thuộc loại nào đó sẽ làm điều đó cho tôi không? Ai đó đã tạo ra một số hệ thống thế hệ "Excel-công thức-mã". Tôi sẵn sàng trả tiền cho nó.

Chỉnh sửa/Giải pháp:SpreadsheetGear là những gì tôi đang tìm kiếm. Trong số những thứ khác, nó cho phép bạn sử dụng một XLS như một máy tính. Bạn có thể đặt giá trị thô của các ô đã chọn và sau đó đọc các giá trị của các ô được tính toán. Chính xác những gì tôi đang tìm kiếm.

Trả lời

5

Bạn chắc chắn không muốn sử dụng interop ở phía máy chủ, nó đủ tệ khi sử dụng nó như một kludge ở phía máy khách.

Tôi có thể thấy hai tùy chọn:

Tìm ra logic bảng tính. Điều này có thể mang lại lợi ích cho bạn trong dài hạn bằng cách làm cho logic kinh doanh trở thành số lượng đã biết, và trong ngắn hạn bạn có thể thấy rằng thực sự có lỗi trong bảng tính (tôi đã gặp phải rất nhiều bảng tính quái vật được sử dụng trong nhiều năm. lỗi trong chúng - tất cả mọi người chỉ giả định câu trả lời phải đúng)

Đánh giá SpreadSheetGear.NET, về cơ bản là thay thế cho interop làm tất cả mà không có Excel (nó sao chép một đoạn rất lớn của Excel không trực quan và IO trong .NET.)

+0

Thành phần từ SpreadsheetGear hoạt động hoàn hảo, cảm ơn. – Deane

+0

Rất vui khi nghe, tôi chưa thực sự sử dụng nó nhiều cho tính toán Excel. Chúng tôi chủ yếu sử dụng nó để nhập và xuất các tệp Excel cho các ứng dụng mạng nội bộ, mà nó trở nên cuồng tín (tốt hơn nhiều so với công cụ trên máy tính để bàn của chúng tôi vẫn có mã kế thừa tương tác) – David

0

Có vẻ như bạn đang nói rằng người dùng có bảng tính mở trên hệ thống cục bộ của họ và bạn muốn trang web thao tác bảng tính cục bộ đó?

Nếu đúng như vậy, bạn không thể thực sự làm điều đó. Ngay cả tự động hóa Office cũng không giúp được gì, trừ khi bạn muốn yêu cầu họ tải trang tính lên máy chủ và tải xuống phiên bản mới thay đổi.

Những việc bạn có thể làm là tạo một dịch vụ web để thực hiện các phép tính và thêm một số mã vba hoặc vsto vào trang tính Excel để nói chuyện với dịch vụ đó.

+0

Không, không có gì để làm với phía máy khách. Về cơ bản, tôi muốn sử dụng bảng tính như một máy tính giao dịch trên máy chủ - một công thức lớn, phức tạp. – Deane

+0

Được rồi, tôi nhận được bạn ngay bây giờ. Trong trường hợp đó Randolpho bảo vệ nó khá tốt. –

4

Mặc dù điều này chắc chắn có thể sử dụng ASP.NET, nhưng rất khó có thể sử dụng được. Đó là không thể mở rộng và dễ bị lỗi đồng thời.

Đặt cược tốt nhất của bạn là phân tích tính toán bảng tính và sao chép chúng. Bây giờ, được cấp, doanh nghiệp của bạn sẽ không thích thời gian cần thiết để làm điều này, nhưng nó sẽ (có lẽ) cung cấp cho họ một hệ thống dễ sử dụng hơn.

Ngoài ra, bạn có thể chỉ cần phân phối bảng tính cho người dùng từ trang web của mình, trong trường hợp đó bạn hầu như không làm gì cả.

Chỉnh sửa: Nếu các bên liên quan của bạn thực sự nhấn mạnh vào việc sử dụng Excel phía máy chủ, tôi khuyên bạn nên xem xét kỹ các dịch vụ Excel như @John Saunders gợi ý. Nó có thể không giúp bạn có được tất cả mọi thứ bạn muốn, nhưng nó sẽ giúp bạn có một chút, và nên giải quyết một số vấn đề bạn sẽ kết thúc với việc cố gắng làm điều đó phía máy chủ với ASP.NET.

Đó không phải là để nói rằng đó là thuốc chữa bách bệnh; số dặm của bạn chắc chắn sẽ thay đổi. Và Sharepoint không phải là chính xác rẻ để mua hoặc duy trì. Trên thực tế, các chi phí ngắn hạn có thể dễ dàng bị chi phối bởi chi phí dài hạn nếu bạn sử dụng đường Sharepoint - nhưng nó có thể là lựa chọn tốt nhất để phù hợp với yêu cầu.

Tôi vẫn khuyên bạn nên ủng hộ việc mã hóa tất cả logic của bạn trong một mô-đun .NET riêng biệt. Bằng cách đó, bạn có thể sử dụng cả phía máy khách phía máy khách. Excel có thể dễ dàng chuyển các phép tính sang đối tượng COM, và bạn có thể dễ dàng xuất bản thư viện .NET của bạn thành các đối tượng COM. Cuối cùng, bạn sẽ có một kiến ​​trúc có thể duy trì và sử dụng được nhiều hơn.

+0

+1 Bạn cũng sẽ có khả năng để kiểm tra đơn vị tính toán của bạn. –

+0

Tuyệt đối. Nếu bạn có nhiều hơn một hoặc hai người dùng, thì bạn có thể dễ dàng gặp rắc rối. (Ít nhất, nó sẽ chậm). Tốt hơn để sử dụng một công nghệ có nghĩa là để truy cập web đồng thời. – andypaxo

+0

Tôi có gặp rủi ro về vấn đề tương tranh ngay cả khi tôi không lưu giữ bất cứ điều gì đối với tệp Excel không? Tôi không muốn cứu bất cứ điều gì trở lại - Tôi chỉ muốn nhập một số dữ liệu, recalc, đọc một số dữ liệu, sau đó từ bỏ. – Deane

7

Có thể, nhưng không được khuyến khích (và chính thức không được hỗ trợ).

Bạn có thể tương tác với Excel thông qua COM hoặc .NET Interop Assemblies, nhưng điều này có nghĩa là trở thành quy trình phía máy khách.

Ở phía máy chủ, không có màn hình hoặc máy tính để bàn và bất kỳ hộp thoại bất ngờ nào (ví dụ) sẽ khiến ứng dụng web của bạn treo – ứng dụng của bạn sẽ hoạt động không ổn định.

Ngoài ra, việc đính kèm quy trình Excel vào từng yêu cầu không chính xác là phương pháp tiếp cận tài nguyên thấp.

Làm việc trong hộp đen và triển khai lại nó bằng ngôn ngữ lập trình thích hợp rõ ràng là tùy chọn tốt hơn (như trong "đáng tin cậy hơn và nhanh hơn").

đọc liên quan: KB257757: Considerations for server-side Automation of Office

+0

Thảo luận tuyệt vời về các vấn đề. +1 – Randolpho

1

Bỏ cuộc thảo luận cho dù nó làm cho tinh thần để thao tác một tờ excel trên server-side, một trong những cách để thực hiện điều này có lẽ sẽ trông giống như áp dụng các Microsoft.Office.Interop

.Excel.dll

Sử dụng thư viện này, bạn có thể yêu cầu Excel mở Bảng tính, thay đổi và đọc nội dung từ .NET. Tôi đã sử dụng thư viện trong một ứng dụng WinForm, và tôi đoán rằng nó cũng có thể được sử dụng từ ASP.NET.

Tuy nhiên, xem xét các vấn đề đồng thời đã đề cập ... Tuy nhiên, nếu bảng được truy cập unfrequently, tại sao không ...

1

Cách đơn giản nhất để làm điều này có thể là để:

Tải lên Excel sổ làm việc tới Google Documents - điều này rất rõ ràng, theo kinh nghiệm của tôi

Sử dụng API dữ liệu bảng tính Google để cập nhật dữ liệu và trả về số.

Dưới đây là một liên kết để bạn bắt đầu về vấn đề này, nếu bạn muốn đi theo hướng đó:

http://code.google.com/apis/spreadsheets/overview.html

1

Hãy để tôi được cứng rắn hơn những người khác đã được: làm không sử dụng Excel server-side . Nó được thiết kế để được sử dụng như một ứng dụng máy tính để bàn, có nghĩa là nó không có ý định được sử dụng từ các luồng khác nhau ngẫu nhiên, có thể là nhiều luồng cùng một lúc. Bạn nên viết bảng tính của riêng mình hơn là cố gắng sử dụng Excel (hoặc bất kỳ sản phẩm máy tính để bàn Office nào khác) tạo thành một máy chủ.

Đây là một trong những lý do khiến Dịch vụ Excel tồn tại.Tìm kiếm nhanh trên MSDN đã bật liên kết này: http://blogs.msdn.com/excel/archive/category/11361.aspx. Đó là danh sách danh mục, do đó, chứa danh sách các bài đăng trên blog về chủ đề này. Xem thêm Microsoft.Office.Excel.Server.WebServices Namespace.

+1

Điểm tuyệt vời về Dịch vụ Excel. Quá xấu bạn cần Sharepoint ... – Randolpho

Các vấn đề liên quan