尝试以编程方式打印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;
}
}
答案 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)
您发布的算法似乎没有任何问题。你能尝试下面的
吗?另外,你可以发布获取filesToCheck对象的代码吗?
修改强>
OP提到所有文件肯定都能通过。尝试将打印操作包装在try / catch块中,看看是否有任何异常被抛出,导致文件无法打印。答案 3 :(得分:0)
请勿在文件名中使用“_”。在使用充电器和PrintOut之前,我已经看到了一些奇怪的怪癖。