2017-10-26 14 views
0

誰もが知っているように、WordはPowerPointやExcelなどのSaveCopyAsを提供していません。私はさまざまなアプローチを試みましたが、満足のいく結果はありませんでした。Microsoft WordでのSaveCopyAsの動作

正しい書式設定(要素の配置 - > wdPasteDefault)またはスタイルの正しい書式(フォントと色 - > wdPasteDefault)のいずれかでドキュメントをオンザフライでコピーできます。

元のドキュメントを閉じる場合は、ドキュメントを保存するかどうかを尋ねる必要があり、パスを選択する必要があります。私は2010年の

2016へのアプローチをサポートする最後のWord 2016に異なるアプローチを試してみました今の

されました:

 object wdWhat = Microsoft.Office.Interop.Word.WdGoToItem.wdGoToPage; 
     object wdWhich = Microsoft.Office.Interop.Word.WdGoToDirection.wdGoToAbsolute; 

     Microsoft.Office.Interop.Word.Range range = document.Range(ref missObj, ref missObj); 
     Microsoft.Office.Interop.Word.Range pageRange = document.Range(ref missObj, ref missObj); 

     pageRange.Start = range.GoTo(ref wdWhat, ref wdWhich, ref missObj, ref missObj).Start; 
     pageRange.End = document.Range(ref missObj, ref missObj).End; 
     pageRange.Copy(); 

     Microsoft.Office.Interop.Word.Document newDoc = AddinModule.CurrentInstance.WordApp.Documents.Add(ref missObj, ref missObj, ref missObj, ref missObj); 

     newDoc.PageSetup.PageWidth = document.PageSetup.PageWidth; 
     newDoc.PageSetup.PageHeight = document.PageSetup.PageHeight; 
     AddinModule.CurrentInstance.WordApp.Selection.PasteAndFormat(Microsoft.Office.Interop.Word.WdRecoveryType.wdPasteDefault); 

     object newDocName = filePath; 
     newDoc.SaveAs(ref newDocName, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj); 
     object saveChanges = WdSaveOptions.wdSaveChanges; 
     ((Microsoft.Office.Interop.Word._Document)newDoc).Close(saveChanges, ref missObj, ref missObj); 
     Marshal.ReleaseComObject(newDoc); 
     newDoc = null; 
+0

こんにちは、元の文書が閉じられる前にコピーを保存するプロンプトユーザーの方がいいですか?既に試したコードの一部を投稿できますか? –

+0

こんにちはVasi、私はアクティブなWord文書をコピーして特定の一時的な場所に保存したいと思います。ユーザーは最初に文書を保存してはいけません。私は、Microsoft.Office.Interop.PowerPointまたはMicrosoft.Office.Interop.Wordのように、SaveCopyAs関数の正確な動作をしたい。 – aDoubleSo

答えて

2

IPersistFileでよく知られた解決策があり、

using System.Runtime.InteropServices.ComTypes; 

var f = (IPersistFile)doc; 
f.Save("[path]", false); 
+0

これはまさに私が探していたものです。私はこのソリューションをデクスターエンジンで見つけることができませんでした...ありがとう! – aDoubleSo

関連する問題