Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Microsoft.Office.Interop.Word正在使用XML和主题文件创建不需要的文件夹。为什么?_C#_Visual Studio_Ms Word_Ms Office_Office Interop - Fatal编程技术网

C#Microsoft.Office.Interop.Word正在使用XML和主题文件创建不需要的文件夹。为什么?

C#Microsoft.Office.Interop.Word正在使用XML和主题文件创建不需要的文件夹。为什么?,c#,visual-studio,ms-word,ms-office,office-interop,C#,Visual Studio,Ms Word,Ms Office,Office Interop,我正在创建Winforms应用程序,并使用Microsoft.Office.Interop.Word打开文档并获取页数。它通常很好用。在某些文件上,它会创建一个新文件夹(“文档名称”\u files),并在该文件夹中创建三个新文件(colorschemapping.xml、filelist.xml和themedata.thmx)。该文档是一个Word 97-2003文档,扩展名为.Doc。它不会对相同类型的其他文件执行此操作。只有一些。它仍然正确返回页数。这是我正在使用的代码: public i

我正在创建Winforms应用程序,并使用Microsoft.Office.Interop.Word打开文档并获取页数。它通常很好用。在某些文件上,它会创建一个新文件夹(“文档名称”\u files),并在该文件夹中创建三个新文件(colorschemapping.xml、filelist.xml和themedata.thmx)。该文档是一个Word 97-2003文档,扩展名为.Doc。它不会对相同类型的其他文件执行此操作。只有一些。它仍然正确返回页数。这是我正在使用的代码:

public int PageCountWord(object Path)
    {
        // Get application object
        Microsoft.Office.Interop.Word.Application WordApplication = new Microsoft.Office.Interop.Word.Application();

        // Get document object
        object Miss = System.Reflection.Missing.Value;
        object ReadOnly = false;
        object Visible = false;
        Microsoft.Office.Interop.Word.Document Doc = WordApplication.Documents.Open(ref Path, ref Miss, ref ReadOnly, ref Miss, ref Miss, ref Miss, ref Miss, ref Miss, ref Miss, ref Miss, ref Miss, ref Visible, ref Miss, ref Miss, ref Miss, ref Miss);

        // Get pages count
        Microsoft.Office.Interop.Word.WdStatistic PagesCountStat = Microsoft.Office.Interop.Word.WdStatistic.wdStatisticPages;
        int PagesCount = Doc.ComputeStatistics(PagesCountStat, ref Miss);
        Doc.Close();
        WordApplication.Quit();
        return PagesCount;
    }
它在Doc.Close()行中创建文件夹和文件

有人知道为什么会发生这种情况,如果我能阻止的话?(除了在完成后搜索文件夹并删除任何新创建的内容)

此外,不幸的是,这些文件包含敏感信息,因此我无法上传。希望有人也有同样的问题,并发现了解决方案

最终工作代码:

    public int PageCountWord(object Path)
    {
        // Get application object
        Microsoft.Office.Interop.Word.Application WordApplication = new Microsoft.Office.Interop.Word.Application();

        // Get document object
        object Miss = System.Reflection.Missing.Value;
        object ReadOnly = false;
        object Visible = false;
        object SaveChanges = WdSaveOptions.wdDoNotSaveChanges;

        Microsoft.Office.Interop.Word.Document Doc = WordApplication.Documents.Open(ref Path, ref Miss, ref ReadOnly, ref Miss, ref Miss, ref Miss, ref Miss, ref Miss, ref Miss, ref Miss, ref Miss, ref Visible, ref Miss, ref Miss, ref Miss, ref Miss);

        // Get pages count
        Microsoft.Office.Interop.Word.WdStatistic PagesCountStat = Microsoft.Office.Interop.Word.WdStatistic.wdStatisticPages;
        int PagesCount = Doc.ComputeStatistics(PagesCountStat, ref Miss);
        Doc.Close(SaveChanges);
        WordApplication.Quit();
        return PagesCount;
    }
最终工作代码:

    public int PageCountWord(object Path)
    {
        // Get application object
        Microsoft.Office.Interop.Word.Application WordApplication = new Microsoft.Office.Interop.Word.Application();

        // Get document object
        object Miss = System.Reflection.Missing.Value;
        object ReadOnly = false;
        object Visible = false;
        object SaveChanges = WdSaveOptions.wdDoNotSaveChanges;

        Microsoft.Office.Interop.Word.Document Doc = WordApplication.Documents.Open(ref Path, ref Miss, ref ReadOnly, ref Miss, ref Miss, ref Miss, ref Miss, ref Miss, ref Miss, ref Miss, ref Miss, ref Visible, ref Miss, ref Miss, ref Miss, ref Miss);

        // Get pages count
        Microsoft.Office.Interop.Word.WdStatistic PagesCountStat = Microsoft.Office.Interop.Word.WdStatistic.wdStatisticPages;
        int PagesCount = Doc.ComputeStatistics(PagesCountStat, ref Miss);
        Doc.Close(SaveChanges);
        WordApplication.Quit();
        return PagesCount;
    }

我想补充一点,Application.Quit()方法接受三个可选参数(两个枚举和一个布尔值),并且这些参数的组合都不能阻止这种行为。您是否尝试过将
SaveChanges:false
传递到文档关闭方法?是的,我尝试过。这是可选参数之一。我这样问是因为在示例代码中,您只是调用了
Doc.Close()
,没有任何参数。文档没有说明
SaveChanges
的默认值是什么:我想知道在这个特定的文档中,打开它的行为是否导致了更改,然后被保存,正如您所说的“它在Doc.Close()行中创建了文件夹和文件”。您最初关于“三个可选参数”的评论引用了
Application.Quit()
,您的意思是
Doc.Close()
!对不起,我忘了是哪一行引起了我的问题。这是漫长的一天。但无论如何,如果您将WDDONOTSAVECHANGS传递给Doc.close(),它工作正常,不会创建这些额外的文件。非常感谢。我想补充一点,Application.Quit()方法接受三个可选参数(两个枚举和一个布尔值),并且这些参数的组合都不能阻止这种行为。您是否尝试过将
SaveChanges:false
传递到文档关闭方法?是的,我尝试过。这是可选参数之一。我这样问是因为在示例代码中,您只是调用了
Doc.Close()
,没有任何参数。文档没有说明
SaveChanges
的默认值是什么:我想知道在这个特定的文档中,打开它的行为是否导致了更改,然后被保存,正如您所说的“它在Doc.Close()行中创建了文件夹和文件”。您最初关于“三个可选参数”的评论引用了
Application.Quit()
,您的意思是
Doc.Close()
!对不起,我忘了是哪一行引起了我的问题。这是漫长的一天。但无论如何,如果您将WDDONOTSAVECHANGS传递给Doc.close(),它工作正常,不会创建这些额外的文件。非常感谢。我刚刚意识到我正在使用options参数,然而,在我的例子中,从doc到html,它会创建一个满是xml的文件夹。还有其他想法吗?同样,它不是在Close方法中,而是在SaveAs方法中,这里描述的属性似乎都没有帮助。解决了。也许它可以帮助别人。在另存为文档上,我使用Word.WdSaveFormat.wdFormatHTML。我改为Word.WdSaveFormat.wdFormatFilteredHTML,文件夹不再创建,输出文件也更干净。我刚刚意识到我正在使用options参数,但是,在我的例子中,从doc到html,它会创建一个满是xml的文件夹。还有其他想法吗?同样,它不是在Close方法中,而是在SaveAs方法中,这里描述的属性似乎都没有帮助。解决了。也许它可以帮助别人。在另存为文档上,我使用Word.WdSaveFormat.wdFormatHTML。我改为Word.WdSaveFormat.wdFormatFilteredHTML,文件夹不再创建,输出文件也更干净。