Tôi muốn tải lên tệp Wordx hoặc tệp docx Word 2007 trở lên lên máy chủ web của mình và chuyển đổi mục lục thành cấu trúc xml đơn giản. Làm điều này trên máy tính để bàn với VBA truyền thống có vẻ như nó sẽ dễ dàng. Nhìn vào dữ liệu XML WordprocessingML được sử dụng để tạo tệp docx là khó hiểu. Có cách nào (không có COM) để điều hướng tài liệu theo nhiều kiểu thời trang hướng đối tượng không?Tôi làm cách nào để truy vấn một tài liệu Word trong ứng dụng ASP.NET?
Trả lời
Tôi khuyên bạn nên xem xét số Open XML SDK 2.0. Đó là một CTP, nhưng tôi đã tìm thấy nó cực kỳ hữu ích trong việc thao tác các tập tin xmlx mà không cần phải đối phó với COM ở tất cả. Tài liệu này hơi sơ sài, nhưng điều quan trọng cần tìm là lớp DocumentFormat.OpenXml.Packaging.WordprocessingDocument. Bạn có thể tách rời tài liệu .docx nếu bạn đổi tên phần mở rộng thành .zip và tìm hiểu các tệp XML ở đó. Từ việc đó, có vẻ như một Mục lục được chứa trong một thẻ "Tài liệu có cấu trúc" và những thứ như các tiêu đề nằm trong một siêu liên kết từ đó. Putzing xung quanh với nó một chút, tôi thấy rằng một cái gì đó như thế này sẽ làm việc (hoặc ít nhất là cung cấp cho bạn một điểm khởi đầu).
WordprocessingDocument wordDoc = WordprocessingDocument.Open(Filename, false);
SdtBlock contents = wordDoc.MainDocumentPart.Document.Descendants<SdtBlock>().First();
List<string> contentList = new List<string>();
foreach (Hyperlink section in contents.Descendants<Hyperlink>())
{
contentList.Add(section.Descendants<Text>().First().Text);
}
Xem XML Documents and Data làm điểm bắt đầu. Đặc biệt, bạn sẽ muốn sử dụng LINQ to XML.
Nói chung, bạn không muốn sử dụng COM trong ứng dụng .NET.
Đây là bài đăng trên blog về truy vấn tài liệu Open XML WordprocessingML sử dụng LINQ to XML. Sử dụng mã đó, bạn có thể viết một truy vấn như sau:
using (WordprocessingDocument doc =
WordprocessingDocument.Open(filename, false))
{
foreach (var p in doc.MainDocumentPart.Paragraphs())
{
Console.WriteLine("Style: {0} Text: >{1}<",
p.StyleName.PadRight(16), p.Text);
foreach (var c in p.Comments())
Console.WriteLine(
" Comment Author:{0} Text:>{1}<",
c.Author, c.Text);
}
}
Blog bài: Open XML SDK and LINQ to XML
-Eric
- 1. Chuyển đổi tài liệu MS Word sang PDF trong ASP.NET
- 2. Làm cách nào để làm việc với Tài liệu Word mà không sử dụng COM Automation?
- 3. Tải/lưu tài liệu Word từ ứng dụng web (asp.net MVC)
- 4. Làm thế nào để xóa tài liệu theo truy vấn một cách hiệu quả trong mongo?
- 5. Sử dụng tài liệu google trong ứng dụng asp.net
- 6. tạo javadoc làm tài liệu word
- 7. Làm nổi bật cú pháp trong tài liệu MS Word
- 8. Làm cách nào để định dạng mã Java trong tài liệu word
- 9. Làm cách nào để gọi một tệp javascript được nhúng trong một dll trong ứng dụng web asp.net của tôi?
- 10. Làm cách nào để ký các tài liệu PDF trong ứng dụng web?
- 11. Sử dụng JavaScript để "Tạo" Tài liệu Microsoft Word
- 12. Xóa nhiều tài liệu khỏi mongo trong một truy vấn
- 13. Làm cách nào để chuyển đổi tài liệu từ Latex thành Microsoft Word 2003?
- 14. Tôi làm cách nào để truy vấn bằng cách sử dụng khóa ngoài trong MySQL?
- 15. Làm cách nào để lấy tên tệp của tài liệu Word từ C#?
- 16. Làm cách nào để sử dụng TryParse trong truy vấn LINQ của dữ liệu xml?
- 17. Danh mục tài liệu iTunes trong ứng dụng của tôi
- 18. Tạo tài liệu Word trong Coldfusion - làm thế nào để có pagenumbering?
- 19. truy vấn trong asp.net
- 20. Làm thế nào để mở và thao tác tài liệu Word/mẫu trong Java?
- 21. Nếu tôi có id tài liệu mongo dưới dạng chuỗi, làm cách nào để truy vấn nó dưới dạng _id?
- 22. Thay thế văn bản trong tài liệu Word bằng cách sử dụng Open Xml
- 23. Làm cách nào để KHÔNG truy vấn trong Solr?
- 24. Mở Tài liệu Word từ IE
- 25. Làm tài liệu Word nhúng trong một trang web có thể chỉnh sửa hoặc read-only
- 26. Làm thế nào để lưu trữ tài liệu Word dưới dạng BLOB trong mySQL với Coldfusion
- 27. Streaming trong tài liệu Word bộ nhớ bằng cách sử dụng OpenXML SDK w/ASP.NET dẫn đến tài liệu "bị hỏng"
- 28. Làm cách nào để tăng truy vấn đọc/giây trên cơ sở dữ liệu của tôi?
- 29. Làm cách nào để chỉ sử dụng một truy vấn để nhận dữ liệu mỗi ngày trong vòng một năm?
- 30. Làm thế nào để sử dụng Autofac trong một ứng dụng web 3 lớp (ASP.NET MVC)?
Tôi đọc bài viết của mình trên Open XML - công việc tuyệt vời! –