2013-01-09 31 views
5

Điều này có thể gây ra rất nhiều câu hỏi, vì vậy tôi sẽ cố gắng càng cụ thể càng tốt. Tôi phụ trách hỗ trợ ứng dụng của bên thứ ba mà công việc của tôi sử dụng. Một trong những chức năng mà ứng dụng này làm là kéo lên các tài liệu từ các tập tin .dot với thông tin từ một cơ sở dữ liệu được kéo vào. Nó sử dụng các trường MERGEFIELD để làm điều này. Khi dữ liệu này được kéo vào, nó cho phép các trường ngày tháng bình thường và các trường printdate vẫn còn, nhưng được tạo ra (cái tôi cần) và các trường đã lưu hoàn toàn bị rối tung lên. Nó giữ ngày tạo mẫu ban đầu ở đó thay vì chèn ngày hôm nay làm ngày tạo tài liệu như các mẫu thường làm và vô hiệu hóa trường để nó là văn bản thuần thay vì trường được tạo, do đó bạn không thể cập nhật nó. Tôi không thể tìm thấy một câu trả lời chính xác về việc có hay không đây là hành vi tiêu chuẩn khi tạo các trường được sử dụng với phối thư. Tôi sẽ sử dụng ngày bình thường, nhưng những tài liệu này có thể được chỉnh sửa trong một vài ngày, với nó cuối cùng được chuyển đổi sang PDF cho một bản sao "vĩnh viễn". Nếu bạn tạo tài liệu từ chương trình sau đó mở nó vào ngày hôm sau, nó sẽ tự động cập nhật ngày ... không phải những gì chúng tôi muốn, cần phải là ngày đầu tiên nó được mở.Có thể cập nhật các trường biểu mẫu trong Tài liệu Word thông qua tập lệnh

Tôi đã sử dụng tập lệnh PowerShell để cập nhật bản thân của bản thân mẫu. Được quản lý để thực hiện việc này theo ba dòng với:

$a = Get-Date 
$b = Get-Item "Q:\CUSTOM\DATETEST.dot" 
$b.CreationTime = $a 

Tập lệnh này hoạt động tốt và thông tin tệp được cập nhật. Tuy nhiên, để có được các từ thực tế trong tài liệu để phản ánh điều này, bạn phải đi vào Word, làm mới các trường trong biểu mẫu bằng F9, sau đó lưu nó. Ngay cả với ngày tạo cập nhật, văn bản tài liệu từ vẫn hiển thị ngày cũ khi bạn kéo tài liệu vào Word hoặc từ ứng dụng khác cho đến khi bạn làm mới và lưu thủ công các mẫu. Các biểu mẫu này không được bảo vệ, do đó, đó không phải là vấn đề. Tôi đã thấy một vài tập lệnh PowerShell để chỉnh sửa các tệp từ, nhưng không thể tìm thấy chính xác một tệp để làm mới các trường ngày tháng. Tôi đã thử kịch bản này với ngày sửa đổi và sử dụng các trường đã lưu trong biểu mẫu, nhưng điều này cũng bắt buộc phải thực hiện và thực sự lưu biểu mẫu. Có cách nào trong PowerShell hoặc lô (hoặc bất kỳ ngôn ngữ kịch bản, không quan tâm vào thời điểm này) mà sẽ cho phép tôi làm mới các lĩnh vực mẫu trong các tài liệu và sau đó lưu chúng, hoặc bất cứ ai có thể nghĩ ra bất kỳ cách nào khác xung quanh này? Tôi có một số tài liệu mà sẽ cần điều này được thực hiện, do đó, làm nó bằng tay mỗi buổi sáng cũng là không thực tế.

EDIT: Tôi đã tìm thấy mã sau, như đã nhận xét bên dưới. Trong đoạn code này tôi cũng thấy rằng tôi cần phải thay đổi Documents.Add to Documents.Open. Tôi sẽ lưu ý rằng điều này làm việc để có được ngày tiết kiệm thao túng theo cách tôi cần, nhưng tạo ra vẫn còn là một bí ẩn.

$word=new-object -com Word.Application 
$doc=$word.Documents.Add($filename) 
$word.Visible=$False 
$word.ActiveDocument.Fields.Update() 
$doc.SaveAs([REF]$filename) 
$doc.Close() 
$word.Quit() 
+0

Tìm thấy nội dung sau, sau khi tìm kiếm tiêu đề câu hỏi chính xác của tôi trong Google ... không biết tại sao tôi không thể tìm kiếm trước đây: 'code $ word = new-object -com Word.Application $ doc = $ word.Documents.Add ($ filename) $ word.Visible = $ False $ word.ActiveDocument.Fields.Update() $ doc.SaveAs ([REF] $ filename) $ doc.Close() $ word.Quit() 'Điều này vẫn không hoạt động hoàn toàn đúng vì nó không mở và lưu chúng mẫu, mà là mở ra và cố gắng để lưu một .docx. Vẫn mở để gợi ý. –

+1

Chào mừng bạn đến với SO!Để làm cho mọi thứ dễ đọc hơn, vui lòng chỉnh sửa bài đăng gốc của bạn bằng mã bạn đã tìm thấy thay vì đặt nó vào nhận xét. – Nick

+0

Cảm ơn bạn đã đề xuất ... không chắc chắn về phương pháp ưa thích dành cho việc thêm mã mới được tìm thấy. Tôi đã có tất cả nhưng đã tìm ra ... Tôi vẫn muốn sử dụng ngày tạo nhưng nó sẽ không cập nhật ngay cả với Fields.Update. Đã lưu loại làm những gì tôi cần với mã trên, mặc dù đó không phải là ý định của tôi. –

Trả lời

2

Để lưu tài liệu của bạn như một mẫu, sử dụng đoạn mã sau:

$word = new-object -com Word.Application 
$doc = $word.Documents.add($filename) 
$word.Visible = $False 
$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat],"wdFormatTemplate") 
$doc.SaveAs([ref]$filename2,[ref]$saveFormat) 
$doc.Close() 
$word.Quit() 

Đây là chưa được kiểm tra đối với các mẫu, nhưng tôi đã nhận nó để làm việc với tiết kiệm như .doc thay vì sau đó mặc định .docx. Ngoài ra, nó sẽ không cho phép bạn lưu tệp nếu nó giống với tên tệp đang mở. Đó là lý do tại sao tôi đổi nó thành $filename2. Bạn có thể phải làm một số thủ thuật đổi tên để có được điều này để làm việc, nhưng điều này sẽ giúp bạn vượt qua vấn đề với cách lưu tập tin.

+0

$ doc = $ Word.Document.open ($ filename) thay vì Document.Add works for templates. Tuy nhiên, như tôi đã nói trước đây vì một số lý do ngày tạo không cập nhật. Tôi sẽ chỉ sử dụng lưu (kể từ khi ứng dụng ban đầu chuyển đổi cả hai văn bản anyway) và gọi nó là một ngày. Cảm ơn! –

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