Программная печать каталога документов Word… последний файл всегда пропускается

StackOverflow https://stackoverflow.com/questions/670060

Вопрос

У меня возникла проблема при попытке программно распечатать каталог документов Word.В этом примере я пытаюсь распечатать только файлы с префиксом "3_".Проблема в том, что файл не печатается, если нет двух файлов с префиксом 3_.Я целую вечность оглядывался по сторонам, чтобы разобраться в этой проблеме.Что-то не так с тем, как я открываю файл?Это работает только тогда, когда в каталоге есть два файла, и в этом случае он распечатает только один из двух файлов.

Редактировать:Я попробовал использовать messagebox, и путь правильный.Имя файла указано правильно.Кроме того, если я просматриваю принтер в папке "Принтеры", документ вспыхивает на короткую секунду, а затем исчезает (я приостановил печать, чтобы я мог видеть результат).Если word выдает мне ошибку, почему она не отображается?И почему это работает, если в каталоге есть два файла с префиксом 3_?

Редактировать:Я думаю, что это проблема с методом printout().Когда я устанавливаю для приложения значение "видимый" и запускаю его, документ открывается нормально, но ничего не печатается.Я могу открыть документ вручную и распечатать (что работает нормально).

Редактировать:Спасибо вам всем за ответы.Проблемой был параметр background в методе printout().Программа завершит работу до того, как печать сможет полностью развернуться (именно поэтому я увижу, как документ вспыхнет в очереди печати и исчезнет.Для отключения фоновой печати требовалось, чтобы документ оставался открытым и печатался, что было ключевым моментом.Спасибо

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;
            }
        }
Это было полезно?

Решение

Попробуйте установить фоновый параметр (1-й параметр) Распечатка() вызов значения False.

Вероятно, последнее задание печати загружено не полностью и отменено, поскольку COM-объект Word выпущен слишком рано.

Другие советы

попробуйте использовать

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

вместо того, чтобы

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

Похоже, в вашем опубликованном алгоритме нет ничего плохого.Можете ли вы попробовать следующее

  1. Добавьте точку останова и убедитесь, что объект filesToCheck содержит в себе все имена файлов?Возможно, это значение неверно и сбивает с толку ваш алгоритм
  2. Вместо того чтобы печатать документ, измените код, чтобы для каждого имени файла отображалось окно сообщения.Это исключит фактическую печать, являющуюся частью проблемы (не понимаю, как это могло быть).

Кроме того, не могли бы вы опубликовать код, который получает объект filesToCheck?

Редактировать

ОП упомянул, что все файлы определенно проходят проверку.Попробуйте обернуть операцию печати в блок try / catch и посмотрите, нет ли каких-либо генерируемых исключений, которые препятствуют печати файлов.

Попробуйте не использовать "_" в имени файла.Я уже сталкивался с некоторыми странностями с этим зарядным устройством и распечаткой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top