代码之家  ›  专栏  ›  技术社区  ›  jle

以编程方式打印Word文档目录…总是跳过最后一个文件

  •  1
  • jle  · 技术社区  · 16 年前

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

    编辑:我尝试了一个消息框,路径是正确的。文件名正确。另外,如果我正在“打印机”文件夹中观察打印机,文档将闪烁一小段时间,然后消失(我暂停了打印,以便可以看到输出)。如果这个词给我一个错误,为什么不显示出来?如果目录中有两个前缀为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 回复  |  直到 16 年前
        1
  •  4
  •   devio    16 年前

    尝试并设置 PrintOut ()调用为false。

    可能最后一个打印作业没有完全假脱机并取消,因为Word COM对象发布得太早。

        2
  •  2
  •   abatishchev Karl Johan    16 年前

    试用使用

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

    而不是

    for (int i = 0; i < filesToCheck.Count(); i++ ) { }
    
        3
  •  1
  •   JaredPar    16 年前

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

    1. 添加断点并确保filestocheck对象中包含所有文件名?有可能这个值不正确,并且会丢弃您的算法
    2. 与其打印文档,不如更改代码,为每个文件名添加一个消息框。这将消除实际的打印是问题的一部分(不知道怎么可能)。

    另外,您可以发布获取filestocheck对象的代码吗?

    编辑

    OP提到了所有的文件都肯定能通过。尝试将打印操作包装在try/catch块中,并查看是否有引发的异常阻止打印文件。

        4
  •  0
  •   Nick    16 年前

    尽量不要在文件名中使用“uu”。我以前用那个充电器和打印件看到过一些奇怪的怪癖。

    推荐文章