2013-02-03 36 views
0

我正在嘗試創建一個word文檔,插入一些圖片並保存。不能插入圖像到通過C#創建的文檔文檔

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Reflection; 
using Word = Microsoft.Office.Interop.Word; 
using System.Windows.Forms; 
using System.IO; 
namespace Snapper 
{ 
    class WordDocumentGenerator 
    { 
     public void CreateWordDocument(string fileName) 
     { 
      string originalPath = Directory.GetCurrentDirectory(); 
      string path = originalPath; 
      path += @"\snapshots"; 
      Directory.SetCurrentDirectory(path); 

      Word._Application wordApp = new Word.Application(); 
      Word._Document wordDoc; 
      object oMissing = System.Reflection.Missing.Value; 

      wordDoc = wordApp.Documents.Add(ref oMissing, ref oMissing, 
              ref oMissing, ref oMissing); 

      wordDoc.InlineShapes.AddPicture(@"\snap1.jpg"); 
      wordDoc.InlineShapes.AddPicture(@"\snap2.jpg"); 

      path = originalPath; 
      path += @"\documents"; 
      DirectoryInfo docDir = new DirectoryInfo(path); 
      if (!docDir.Exists) 
      { 
       docDir.Create(); 
      } 
      Directory.SetCurrentDirectory(path); 
      Object savePath = path + @"\" + fileName + ".doc"; 

      wordDoc.SaveAs(ref savePath, 
       ref oMissing, 
       ref oMissing, 
       ref oMissing, 
       ref oMissing, 
       ref oMissing, 
       ref oMissing, 
       ref oMissing, 
       ref oMissing, 
       ref oMissing, 
       ref oMissing, 
       ref oMissing, 
       ref oMissing, 
       ref oMissing, 
       ref oMissing, 
       ref oMissing 
       ); 
      wordDoc.Close(SaveChanges: true); 
     } 

    } 
} 

我收到一個未處理的異常錯誤框,說這不是addpicture()方法的有效文件名。我究竟做錯了什麼?

See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box. 

************** Exception Text ************** 
System.Runtime.InteropServices.COMException (0x800A1420): This is not a valid file name. 
Try one or more of the following: 
* Check the path to make sure it was typed correctly. 
* Select a file from the list of files and folders. 
    at Microsoft.Office.Interop.Word.InlineShapes.AddPicture(String FileName, Object& LinkToFile, Object& SaveWithDocument, Object& Range) 
    at Snapper.WordDocumentGenerator.CreateWordDocument(String fileName) in D:\RESOURCES\Projects\Visual Studio Projects\Snapper\Snapper\GenerateWordDocument.cs:line 27 
    at Snapper.SnapperForm.CreateDocumentButton_Click(Object sender, EventArgs e) in D:\RESOURCES\Projects\Visual Studio Projects\Snapper\Snapper\SnapperForm.cs:line 130 
    at System.Windows.Forms.Control.OnClick(EventArgs e) 
    at System.Windows.Forms.Button.OnClick(EventArgs e) 
    at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 
    at System.Windows.Forms.Control.WndProc(Message& m) 
    at System.Windows.Forms.ButtonBase.WndProc(Message& m) 
    at System.Windows.Forms.Button.WndProc(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 


************** Loaded Assemblies ************** 
mscorlib 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.4971 (win7RTMGDR.050727-4900) 
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll 
---------------------------------------- 
Snapper 
    Assembly Version: 1.0.0.0 
    Win32 Version: 1.0.0.0 
    CodeBase: file:///D:/RESOURCES/Projects/Visual%20Studio%20Projects/Snapper/Snapper/bin/Debug/Snapper.exe 
---------------------------------------- 
System.Windows.Forms 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.4977 (win7RTMGDR.050727-4900) 
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll 
---------------------------------------- 
System 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.4971 (win7RTMGDR.050727-4900) 
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll 
---------------------------------------- 
System.Drawing 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.4980 (win7RTMGDR.050727-4900) 
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll 
---------------------------------------- 
HotKeys 
    Assembly Version: 1.0.0.0 
    Win32 Version: 1.0.0.0 
    CodeBase: file:///D:/RESOURCES/Projects/Visual%20Studio%20Projects/Snapper/Snapper/bin/Debug/HotKeys.DLL 
---------------------------------------- 
System.Configuration 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.4927 (NetFXspW7.050727-4900) 
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll 
---------------------------------------- 
System.Xml 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.4927 (NetFXspW7.050727-4900) 
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll 
---------------------------------------- 
Microsoft.Office.Interop.Word 
    Assembly Version: 14.0.0.0 
    Win32 Version: 14.0.4762.1000 
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/Microsoft.Office.Interop.Word/14.0.0.0__71e9bce111e9429c/Microsoft.Office.Interop.Word.dll 
---------------------------------------- 

************** JIT Debugging ************** 
To enable just-in-time (JIT) debugging, the .config file for this 
application or computer (machine.config) must have the 
jitDebugging value set in the system.windows.forms section. 
The application must also be compiled with debugging 
enabled. 

For example: 

<configuration> 
    <system.windows.forms jitDebugging="true" /> 
</configuration> 

When JIT debugging is enabled, any unhandled exception 
will be sent to the JIT debugger registered on the computer 
rather than be handled by this dialog box. 
+0

你會得到什麼樣的例外? –

+0

Hab你試圖給我們完全合格的路徑,而不是做get/set current directory跳舞? –

+0

「\ snap1.jpg」是一個有效的文件名嗎?你嘗試過「snap1.jpg」嗎? – PhoenixReborn

回答

4

爲什麼不測試以下內容,只是爲了測試它是否可行!

string originalPath = Directory.GetCurrentDirectory(); 
string path = @"\snapshots"; 
string dirpath = Path.Combine(originalPath, path); 
string filepath = @"snap1.jpg" 
string completepath = Path.Combine(dirpath, filepath);  

注意文件名...!沒有開始「\」
當你不發出確切的異常時,有點難。

+1

現在就試試吧 – kunaguvarun

+0

不行。仍然是相同的例外 – kunaguvarun

-1

謝謝大家。我在AddPicture()方法中連接了路徑和文件名。現在每個人都在按預期工作。

+1

然後,你應該接受@Rusty Mcpherson的回答,這是暗示這一點。 –