C#创建的word文档无法插入图片

问题描述 投票:0回答:3

我正在尝试创建一个Word文档,插入一些图片并保存。

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.
c# .net ms-word
3个回答
4
投票

为什么不测试以下内容,只是为了测试它是否有效!

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

注意文件名...! 没有开始“\”
当你不提供确切的例外时有点困难。


0
投票

应用相对路径时,表示法与应用完整路径时不同。例如:

完整路径:c:\users\Steven\documents\media\Picture001.jpg

工作目录的相对路径:c:\users\Steve\Documents:

媒体/图片001.jpg


-1
投票

谢谢大家。我在 AddPicture() 方法中将路径与文件名连接起来。现在一切都按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.