2010-01-11 32 views
9

Tôi đang sử dụng VSTO để tạo một Tiện ích bổ sung Excel. Tiện ích này truy xuất và hiển thị nhiều dữ liệu từ máy chủ sql. Điều này làm việc tuyệt vời, nhưng sau này tôi dự định truy cập một số dữ liệu bên trong excel và sửa đổi nó theo một số cách. Vấn đề của tôi là tôi cần một cách phân loại các ô mà tôi muốn sửa đổi. Có cách nào để thêm siêu dữ liệu vào một tế bào để biết nếu nó là một tế bào cần được sửa đổi? Ví dụ. thêm thuộc tính vào ô, ví dụ: "editable_cell", và làm một cái gì đó như Excel.FindCellsWithAttribute ("editable_cell") để tìm các tế bào sau khi tìm?VSTO: Đính kèm siêu dữ liệu vào một ô trong Excel?

Cảm ơn! /Gustav

Trả lời

0

Tôi không nhớ một cách để làm chính xác những gì bạn đang yêu cầu. Những gì tôi đã thấy trong quá khứ đã đặt tên dải ô dựa trên những gì bạn có thể muốn tra cứu. Một tùy chọn khác là ẩn một ô bên cạnh hoặc một số ô được xác định trước khác (ví dụ: luôn luôn có 3 ô ở bên phải hoặc cùng một vị trí nhưng trên một trang ẩn). Ô/trang bị ẩn sẽ có dữ liệu bạn sẽ tìm kiếm.

Một điều dường như đã vô tình nổi lên ở công ty kế toán mà tôi từng làm là bạn nên đẩy tất cả dữ liệu của mình vào trang "xấu xí" bị ẩn và sử dụng công thức/tra cứu để tham khảo dữ liệu của bạn. Bằng cách đó bạn có thể cập nhật trang "xấu xí" và biết dữ liệu ở đâu trong khi có "trang đẹp" mà người dùng có thể cập nhật nội dung của họ.

8

Có một số cách để làm điều này. Tôi không biết các yêu cầu cụ thể của bạn, vì vậy tôi sẽ phác thảo một số giải pháp ngắn gọn.

  • Tạo phạm vi được đặt tên, nhưng việc thêm/xóa dữ liệu có thể ảnh hưởng đến Phạm vi đã đặt tên đã xác định nếu bạn không làm đúng. Đôi khi, tốt hơn là xác định một ô có tên là phạm vi hoạt động như một dấu trang thì "phạm vi chọn" sẽ đưa bạn tất cả dữ liệu.

  • Tạo kiểu. Áp dụng kiểu này cho từng ô dữ liệu bạn muốn "tìm". Xác định một phương thức trả về một cơ sở Range trên đó các ô có kiểu được chỉ định.

  • Tạo đối tượng PivotCache. Đối tượng này có khả năng tự cập nhật và giảm kích thước tệp, đặc biệt nếu bộ nhớ cache được sử dụng nhiều lần trong sổ làm việc. Nó cũng là một cách để làm việc xung quanh giới hạn trong số hàng trong một bảng tính.

  • Tạo danh sách. Điều này có nhiều lợi thế. Bạn có thể thêm/xóa dữ liệu theo ý muốn. Thêm/xóa cột. Hãy suy nghĩ về một danh sách như một bảng.

  • Sử dụng ánh xạ XML (http://msdn.microsoft.com/en-us/library/aa203737(office.11).aspx) dưới dạng đề cập "code4life".

  • Nếu sổ làm việc là XMLSS, sau đó xác định vùng tên mới và tô điểm cho các ô có thuộc tính từ không gian tên. Sau đó bạn có thể "truy vấn" bằng XPath. Điều này là rất mạnh mẽ bởi vì bạn có thể nhúng bất cứ điều gì là cần thiết vào một bảng tính.

Từng ưu điểm/nhược điểm của nó. Tôi đã sử dụng từng giải pháp nhiều lần.

2

AMissico liệt kê một số giải pháp rất tốt.Tôi muốn thêm một mà làm việc cho tôi:

Trong C# (ExcelDNA/VSTO) hoặc VBA bạn có thể làm một cái gì đó như:

var app = (Application) ExcelDnaUtil.Application; 
app.ActiveCell.AddComment("This is an editable cell"); 

Hạn chế hiển nhiên sẽ là người dùng có thể thấy nhận xét này - trong trường hợp của tôi, nó hoạt động rất tốt vì tôi có thể cung cấp các chẩn đoán hữu ích cho người dùng, và cũng phân tích cú pháp cùng một văn bản để lấy siêu dữ liệu mà tôi muốn.

Bạn cũng có thể ẩn các bình luận bằng:

app.DisplayCommentIndicator = XlCommentDisplayMode.xlNoIndicator; 

Tuy nhiên, lưu ý rằng đây giấu tất cả các ý kiến, không chỉ là một bạn đã thêm. Để lặp qua các nhận xét trong một trang tính, bạn có thể sử dụng các mục sau:

var comments = ((Worksheet)app.ActiveSheet).Comments; 
foreach(Comment comment in comments) 
{ 
    var text = comment.Text(); 
    // do something... 
} 
+1

Siêu dữ liệu được lưu trữ trong nhận xét quá dễ dàng được người dùng đọc quá hữu ích và có thể dẫn đến tài liệu bị "ngắt kết nối" – MickyD

0

Bạn có thể nhúng siêu dữ liệu ở cấp sổ làm việc bên trong CustomXMLPart. CustomXMLpart có thể lưu trữ một từ điển được tuần tự hóa. Từ điển có thể lưu trữ địa chỉ ô dưới dạng khóa và siêu dữ liệu tương ứng làm giá trị.

Thêm một phần tùy chỉnh xml: http://msdn.microsoft.com/en-us/library/bb608612.aspx

Lưu ý rằng điều này chỉ làm việc cho xls và các định dạng xlsx.

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