2012-05-23 29 views
6

Tôi đang thao tác một tài liệu Word 2010 trên server-side và một số các điều khiển nội dung trong tài liệu có các thuộc tính khóa sau kiểm traLàm cách nào để mở khóa kiểm soát nội dung bằng SDK OpenXML trong tài liệu Word 2010?

  • kiểm soát nội dung không thể xóa
  • Nội dung không thể chỉnh sửa

Có ai khuyên bạn nên đặt các tùy chọn Khóa này thành false hoặc xóa hoàn toàn bằng cách sử dụng SDK OpenXML không?

Trả lời

5

SDK OpenXML cung cấp các lớp LockLockingValues liệt kê cho việc thiết lập trình các tùy chọn:

  • Kiểm soát nội dung không thể bị xóa và
  • Nội dung không thể chỉnh sửa

Vì vậy, để đặt hai tùy chọn đó thành "false" (LockingValues.Unlocked), tìm kiếm tất cả các phần tử SdtElement trong tài liệu và đặt Val thuộc tính đến LockingValues.Unlocked.

Đoạn code dưới đây cho thấy một ví dụ:

static void UnlockAllSdtContentElements() 
{ 
    using (WordprocessingDocument wordDoc = 
    WordprocessingDocument.Open(@"c:\temp\myword.docx", true)) 
    {   
    IEnumerable<SdtElement> elements = 
     wordDoc.MainDocumentPart.Document.Descendants<SdtElement>(); 

    foreach (SdtElement elem in elements) 
    { 
     if (elem.SdtProperties != null) 
     { 
     Lock l = elem.SdtProperties.ChildElements.First<Lock>(); 

     if (l == null) 
     {    
      continue; 
     } 

     if (l.Val == LockingValues.SdtContentLocked) 
     { 
      Console.Out.WriteLine("Unlock content element..."); 
      l.Val = LockingValues.Unlocked; 
     } 
     } 
    } 
    } 
} 

static void Main(string[] args) 
{ 
    UnlockAllSdtContentElements(); 
} 
1

Chỉ cần cho những người sao chép mã này, hãy ghi nhớ rằng nếu không có Khóa liên quan đến việc kiểm soát nội dung, sau đó sẽ không phải là một Khóa tài sản liên kết với nó, do đó, khi mã thực thi lệnh sau, nó sẽ trả về một ngoại lệ vì không tìm thấy phần tử nào:

Khóa l = elem.SdtProperties.ChildElements.First();

Cách khắc phục điều này là thực hiện FirstOrDefault thay vì First.

+0

Nên được thêm làm nhận xét cho giải pháp có liên quan –

+0

Xin chào @OriPrice, tôi không thể nhận xét giải pháp vì danh tiếng của tôi dưới 50. Trân trọng. –

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