2010-03-29 11 views
5

Tôi đang cố gắng lưu trữ siêu dữ liệu (về cơ bản là một id duy nhất) cùng với mỗi ô của một bảng trong tài liệu Word. Hiện tại, với add-in tôi đang phát triển, tôi đang truy vấn cơ sở dữ liệu và xây dựng một bảng bên trong tài liệu Word bằng cách sử dụng dữ liệu được lấy ra.Có thể lưu trữ thông tin siêu dữ liệu ẩn được gắn với một Bảng hoặc Ô cụ thể trong tài liệu Word không?

Tôi muốn có thể lưu bất kỳ chỉnh sửa nào của người dùng vào tài liệu và tiếp tục lưu lại cơ sở dữ liệu. Suy nghĩ ban đầu của tôi là lưu trữ một id duy nhất cùng với mỗi ô trong bảng để tôi có thể cho biết bản ghi nào cần cập nhật. Tôi cũng muốn lưu trữ một số loại "isChanged" cờ trong mỗi tế bào để tôi có thể cho biết những tế bào đã được thay đổi. Tôi thấy rằng tôi có thể thêm thông tin cần thiết vào thuộc tính "ID" của ô - tuy nhiên, thông tin đó không được giữ lại nếu người dùng đã lưu tài liệu, đóng tài liệu và mở lại. Sau đó tôi đã cố gắng lưu trữ dữ liệu bằng cách thêm dữ liệu vào bộ sưu tập "Trường" - nhưng điều đó không hoạt động và đã ném một lỗi thời gian chạy. Đây là mã mà tôi đã thử:

object t1 = Word.WdFieldType.wdFieldEmpty; 
object val = "myValue: " + counter; 
object preserveFormatting = true; 
tbl.Cell(i, j).Range.Fields.Add(tbl.Cell(i, j).Range, ref t1, ref val, ref preserveFormatting); 

Lỗi này không thể thực hiện được ".

Vì vậy, điều này có khả thi không? Hay tôi đang đi sai hướng?

Xin cảm ơn trước.

+0

Bạn đang nhắm mục tiêu phiên bản Word nào? Đây có phải là Tài liệu XML, Tài liệu Word 2007, Định dạng văn bản đa dạng thức không? – AMissico

+0

Xin lỗi, nên đã đề cập trước đó. Nhắm mục tiêu phiên bản 2007, và đây là một tài liệu Word 2007. – leftend

Trả lời

1

Vết thương bằng cách sử dụng "ContentControls" để lưu trữ thông tin tôi cần. Tôi đã sử dụng trường "Tiêu đề" để lưu trữ id duy nhất và trường "thẻ" để theo dõi xem trường đã được thay đổi hay chưa. Xem liên kết này để biết thêm thông tin: http://blogs.technet.com/gray_knowlton/archive/2010/01/15/associating-data-with-content-controls.aspx

+0

Tôi hoàn toàn quên mất những điều khiển này. Lấy làm tiếc. – AMissico

+1

Không cần xin lỗi - tôi càng đào sâu vào phát triển bổ trợ, tôi càng nhận ra nó phức tạp như thế nào! Cảm ơn một lần nữa vì phản ứng của bạn, như tôi đã nói, nó thực sự đã chỉ cho tôi đi đúng hướng. – leftend

+0

Thật không may, điều này không hoạt động cho định dạng .doc "cũ", như 'Word.Table.Title' cũng như' Word.Table.Descr' là các thuộc tính đã được thêm vào với sự ra đời của định dạng OpenXML. Đối với các tệp .doc, tôi chưa tìm thấy giải pháp thỏa mãn, vì việc thêm nhận xét vào 'Word.Table.Range' sẽ luôn kích hoạt chế độ xem sửa đổi để khởi động khi .doc được mở trong một chương trình con như người xem từ. – M463

1

Vì "Tài liệu Word 2007" là XML, bạn có thể thêm không gian tên vào tài liệu, sau đó tôn trọng các phần tử có thuộc tính từ không gian tên của bạn. Word nên bỏ qua không gian tên của bạn khi tải và lưu. Hơn nữa, bạn có thể thêm các elments mới để lưu trữ bất kỳ thông tin (siêu dữ liệu) cần thiết.

Với những gì đã nói, tôi đã không sử dụng kỹ thuật này với Word, nhưng tôi đã làm nó sử dụng thành công Excel 2003.

Điều đầu tiên để cố gắng, là tạo ra một "tài liệu Word 2007" trần. Trong trường hợp của bạn, thêm một hai đơn giản bởi hai bảng. Mở nó bằng một trình soạn thảo văn bản hoặc XML và thêm vùng tên của bạn, và thêm một thuộc tính và thêm một phần tử. Mở bằng Word thực hiện thay đổi rồi lưu nó. Mở bằng trình chỉnh sửa và đảm bảo rằng thuộc tính và phần tử không gian tên của bạn chưa bị thay đổi.

+0

Cảm ơn bạn đã trợ giúp! Tôi đã không thể làm việc này, nhưng chắc chắn tôi đã đi đúng hướng. – leftend