以编程方式打印word文档的目录...始终跳过最后一个文件

时间:2009-03-21 21:48:12

标签: c# .net printing word-automation page-setup

尝试以编程方式打印word文档目录时遇到问题。在这个例子中,我试图只打印带有“3_”前缀的文件。问题是除非有两个带有3_前缀的文件,否则不会打印文件。我一直在四处寻找这个问题。我打开文件的方式有问题吗?它仅在目录中有两个文件时才有效,在这种情况下,它只打印出两个文件中的一个。

编辑:我确实尝试了一个消息框,路径是正确的。文件名是正确的。此外,如果我在打印机文件夹中观看打印机,文档将闪烁一小段时间然后消失(我打印已暂停,以便我可以看到输出)。如果word给我一个错误,为什么不显示?如果目录中有两个带有3_前缀的文件,为什么会这样呢?

编辑:我认为这是printout()方法的一个问题。当我将应用程序设置为可见并运行它时,文档打开正常,但没有打印任何内容。我可以手动打开文档并打印(工作正常)。

编辑:谢谢大家的答案。 printout()方法中的background参数是个问题。程序将在打印完全假脱机之前退出(这就是为什么我会在打印队列中看到文档闪烁并消失。关闭背景打印需要文档保持打开和打印,这是关键。谢谢

string[] filesToCheck = Directory.GetFiles(clientDirectoryPath);
    Object filename = null;
        for (int i = 0; i < filesToCheck.Count();i++ )
        {
            if(filesToCheck[i].Contains("3_"))
            {
                filename = filesToCheck[i];
                wrdDoc = wrdApp.Documents.Open(ref filename, ref oMissing, ref oTrue, ref oFalse,
                                               ref oMissing, ref oMissing,
                                               ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                               ref oMissing,
                                               ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                                               ref oMissing);
                wrdDoc.PageSetup.FirstPageTray = letterHeadTray;
                wrdDoc.PageSetup.OtherPagesTray = defaultTray;
                wrdDoc.PrintOut(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,
                                ref oMissing, ref oMissing, ref oMissing);
                wrdDoc.Close(ref oFalse, ref oMissing, ref oMissing);
                wrdDoc = null;
            }
        }

4 个答案:

答案 0 :(得分:4)

尝试将PrintOut()调用的Background参数(第一个参数)设置为False。

由于Word COM对象过早发布,可能最后一次打印作业没有完全假脱机和取消。

答案 1 :(得分:2)

尝试使用

string[] files = Directory.GetFiles(dir, "3_*.doc");
foreach(string file in files) { }

而不是

for (int i = 0; i < filesToCheck.Count(); i++ ) { }

答案 2 :(得分:1)

您发布的算法似乎没有任何问题。你能尝试下面的

吗?
  1. 添加断点并确保filesToCheck对象中包含所有文件名?这个值可能不正确并且丢失了算法
  2. 而不是打印文档,而是更改代码以为每个文件名抛出一个消息框。这将消除实际打印成为问题的一部分(不知道它是怎么回事)。
  3. 另外,你可以发布获取filesToCheck对象的代码吗?

    修改

    OP提到所有文件肯定都能通过。尝试将打印操作包装在try / catch块中,看看是否有任何异常被抛出,导致文件无法打印。

答案 3 :(得分:0)

请勿在文件名中使用“_”。在使用充电器和PrintOut之前,我已经看到了一些奇怪的怪癖。