Скрипт excel для печати

I need to print without openning Microsoft Excel. For simple way, we can Right-Click on the excel file.
Windows will display Context menu for choosing Print option from the context menu.

On other way, I we can open excel by command line. like these

   "excel c:UsersloginidDocumentsdata.xlsx"

But what possible if I need to print by command line.
What command line for printing?

asked Oct 24, 2017 at 2:13

Fame th's user avatar

1

PowerShell will do this easily. You can literally invoke the «Print» verb — doing exactly what Kyoujin recommended, from the command line. I’m running Win 10 1809, but I believe this is available all the way back to PowerShell 1.0:

powershell -command "start-process -filepath .printermaintenancesheet.xlsx -verb print"

In this case, I’m launching a file in the current directory. If you need a full path, put it in single quotes (since you’re using double quotes for the batch call to PowerShell):

powershell -command "start-process -filepath 'c:usersfreddocumentssheetToPrint.xlsx' -verb print"

As indicated by Kyoujin, this will open Excel, load the file, print it, and close. You might want to make sure you set the print area in advance.

Dijkgraaf's user avatar

Dijkgraaf

10.7k17 gold badges39 silver badges53 bronze badges

answered Jan 3, 2019 at 21:41

user193479's user avatar

1

I found @user193479 answer didn’t close excel consistently and was slow/opened the UI etc etc and I am comfortable with VBA so VBS is easy. I created a VBS script which takes the file as an argument and optionally a sheet name. I purposefully omitted «copies» and/or «printer» specification as I can handle that outside VBS via PrintUI and just repeating the call to the script. I already have methods for doing this to print PDF/Word etc and didn’t want to add more arguments.

print_excel.vbs:

Dim XLApp
Dim XLWkbk
Dim ObjArgs
Dim strFileName
Dim strWorkSheetName

Set ObjArgs = wscript.arguments
Set XLApp= CreateObject("Excel.Application")
XLApp.Visible = False
Set XLWkbk = XLApp.Workbooks.Open(objargs(0))
If objArgs.count > 1 Then
 Set ws = XLWkbk.Sheets(objargs(1))
ELSE
 Set ws = XLWkbk.Worksheets(1)
End If
ws.PrintOut
XLWkbk.Close False
XLApp.Quit

Set XLWkbk = Nothing
Set XLApp = Nothing
Set ObjArgs = Nothing

Test:

wscript "C:tmpprint_excel.vbs" "C:tmpBook1.xlsx" "Sheet2"
::wscript "C:tmpprint_excel.vbs" "C:tmpBook1.xlsx"

https://www.freesoftwareservers.com/display/FREES/Print+Excel+Via+Command+Line+-+VBA+VBScript+-+Excel.exe+Switches

Also…. Word and PowerPoint have «print» switches to their respective executable… What the heck Microsoft….

answered Aug 6, 2020 at 7:05

FreeSoftwareServers's user avatar

Проблема возникает из-за того, что скрипт перемещает файлы из папки «G:Мой дискПечать» в ту же папку с измененным именем. При этом, если Excel не успевает закрыть файл до следующей попытки печати, то скрипт снова перемещает файл, прибавляя к нему еще одно «.xls».

Решение этой проблемы может быть достигнуто путем создания временной папки, в которую будут перемещаться файлы перед печатью, а затем удаляться. Вот обновленный код, который использует временную папку:

Option Explicit : Dim objWord, objDoc, wssh, objFS, objShell, objPath, objFolder, objItem

Set wssh = CreateObject("WScript.Shell")
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objPath = objFS.GetFolder("G:Мой дискПечать") 'Папка, из которой производится печать
Set objTempFolder = objFS.CreateFolder("G:Мой дискTemp") 'Временная папка для файлов перед печатью

Do
PrintDelInFolder objPath
WScript.Sleep 3000
Loop

Sub PrintDelInFolder(objFolder)
For Each objItem In objFolder.Files
If StrComp(objFS.GetExtensionName(objItem.Name), "xls", vbTextCompare) = 0 Then
With wssh
WScript.Sleep 1000
On Error Resume Next
dim f
f = Cstr(objTempFolder.Path & "" & objItem.Name)
objFS.MoveFile objItem.Path, f
If err.number=0 then
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute f, "vbHide", "", "print", 0
set objShell = nothing
err.Clear
Do
WScript.Sleep 9000
objFS.DeleteFile f ,true
Loop While objFS.FileExists(f)
err.Clear
End If
On Error Goto 0
End With
End If
Next
End Sub
WScript.Quit 0

В этом коде создается новая папка «G:Мой дискTemp», в которую перемещаются файлы перед печатью. После печати файлы удаляются из этой папки. Попробуйте использовать этот код и проверить, решает ли это вашу проблему.

ВСЕМ ДОБРОГО ДНЯ!

Как долго я никого не мучила здесь)))))

Очень давно уважаемый HUGO помог мне с большим количеством печати документов. Тогда необходимо было распечатать акты приема передачи, счета-фактуры и акты сверок (каждый по 250 штук) одной кнопкой.

Сегодня задача усложнилась. Раньше  файлы формировались автоматически по номеру договора, в папке сортировались сами по возрастанию номера договора:

Акт ПП декабрь 2016Акт_ПП_М#DON-30006412-NG-BELG-16-VV-1.xls

Акт ПП декабрь 2016Акт_ПП_М#DON-30006413-NG-BIOS-16-VV-1.xls

Акт ПП декабрь 2016Акт_ПП_М#DON-30006492-NG-NESK-16-VV-1.xls

Акт ПП декабрь 2016Акт_ПП_М#DON-30006520-NG-RURES-16-VV-1.xls

Скрипт также распечатывал по порядку. По такому порядку распечатывались и письма, и конверты.

Сегодня получили реестр новых договоров на 2017 год, в котором по одному и тому же контрагенту заключены по 3-4 договора.

Если сейчас я сформирую в папку документы, то файлы будут расположены в таком порядке:

Акт ПП декабрь 2016Акт_ПП_М#DON-30006410-NG-NESK-16-VV-1.xls

Акт ПП декабрь 2016Акт_ПП_М#DON-30006412-NG-BELG-16-VV-1.xls

Акт ПП декабрь 2016Акт_ПП_М#DON-30006413-NG-BIOS-16-VV-1.xls

Акт ПП декабрь 2016Акт_ПП_М#DON-30006414-NG-BELG-16-VV-1.xls

Акт ПП декабрь 2016Акт_ПП_М#DON-30006492-NG-NESK-16-VV-1.xls

Акт ПП декабрь 2016Акт_ПП_М#DON-30006520-NG-RURES-16-VV-1.xls

Теперь при распечатке через скрипт нарушен порядок, документы одного и того же контрагента будут распечатаны в начале, середине и конце. Нет ли возможности задать в самом скрипте распечатку именно по коду контрагента NESK, BELG, BIOS и т.д.

На данный момент надо сформировать более 2000 документов. И  сделать надо сегодня   :oops:

Спасибо заранее!!!!!!!!!!!!!!!!!!!!

Прилагаю код скрипта

Dim FSO, objExcel, wb
Dim TheFolder, TheFiles, AFile

Set FSO = CreateObject(«Scripting.FileSystemObject»)
Set TheFolder = FSO.GetFolder(«U») ‘Каталог, откуда печатать
Set TheFiles = TheFolder.Files
Set objExcel = CreateObject(«Excel.Application»)

For Each AFile In TheFiles
If UCase(FSO.GetExtensionName(AFile.Path)) = «XLS» Then
Set wb = objExcel.Workbooks.Open (AFile)
wb.printout
wb.close 0
End If
Next

objExcel.Quit

is there using excel’s vb script (or macros) to print all its sheets to a given printer ? The number of sheets is variable.

Excel’s version is 2007.

Thanks

Deduplicator's user avatar

Deduplicator

44.3k7 gold badges65 silver badges115 bronze badges

asked Apr 17, 2011 at 11:18

xain's user avatar

0

See if something like this is what you are looking for. You’d just need to set up a loop to select all of the sheets, and use that select false method on all but the first.

Here’s what I cobbled together (I did not test it extensively, and my VBA is a little rusty)

Sub loopandprint()
  Dim ws As Worksheet
  Dim i As Integer
  i = 0
  For Each ws In ActiveWorkbook.Worksheets
    If (i = 0) Then
        ws.Select
    Else
        ws.Select False

    End If

  i = i + 1
  Next ws
  ActiveWindow.SelectedSheets.PrintOut Copies:=1

End Sub

answered Apr 17, 2011 at 11:34

jonsca's user avatar

jonscajonsca

10.2k26 gold badges56 silver badges62 bronze badges

4

Генерация документов и отчетов из реестра или базы данных Excel с помощью кода VBA для просмотра, анализа и вывода на печать. Создание, заполнение, удаление.

Нет смысла хранить множество документов и отчетов в отдельных файлах, если существуют реестры и базы данных Excel, в которых уже есть вся необходимая информация. Каждый документ или отчет можно сгенерировать с помощью кода VBA в виде временного файла, просмотреть его, проанализировать, распечатать. Затем удалить его, а при необходимости сформировать снова.

Создание документа или отчета из шаблона

Допустим, у нас есть реестр документов или база данных Excel с какой-либо информацией. Чтобы создать документ или отчет и заполнить его данными, необходим его шаблон (печатная форма).

Шаблон создаем вручную на отдельном рабочем листе или с помощью кода VBA при заполнении документа. Способы создания шаблона определяют место его хранения:

  • В коде VBA. Такой способ возможен для несложных печатных форм.
  • В рабочей книге Excel с реестром или базой данных на скрытом листе.
  • В отдельном файле, который не обязательно сохранять как шаблон Excel (*.xlt*).

Я предпочитаю создавать шаблон вручную и хранить его на скрытом листе в книге с реестром или базой данных. Такой способ подходит для подавляющего большинства случаев.

Из редких исключений можно назвать печать ценников на основании товарной накладной, сохраненной в Excel. Шаблон ценника и программный код VBA приходится хранить в отдельном файле, по команде из которого открывается и обрабатывается товарная накладная.

Назовем лист с шаблоном документа или отчета — «Shablon». Для создания новой печатной формы скрытый лист с шаблоном необходимо скопировать:

With Worksheets(«Shablon»)

  .Visible = True

  .Copy After:=Worksheets(Worksheets.Count)

  .Visible = False

End With

Данный код вставит новый лист с шаблоном в ту же книгу после всех имеющихся листов. Чтобы шаблон скопировать в новую книгу, заменяем строку .Copy After:=Worksheets(Worksheets.Count) на .Copy. Печатная форма откроется в новом файле.

Сразу после создания, обращаться к новому листу можно как к активному (ActiveSheet), даже в том случае, если он скопирован в новую книгу. Чтобы воспользоваться этой возможностью, порядок действий в программе должен быть следующим:

  1. Копирование информации в переменную массива из реестра или базы данных.
  2. Создание нового документа или отчета из шаблона.
  3. Заполнение документа или отчета, обращаясь к нему как к ActiveSheet.

Копирование информации и заполнение формы

Копирование информации

Информация о документе обычно хранится в реестре или базе данных Excel в одной строке. Информация для отчета может располагаться как в одной, так и в нескольких или во многих строках.

Если информация нужна из одной строки, перед запуском кода VBA следует выделить любую ячейку в строке с данными. Тогда в ходе выполнения программы можно будет определить номер строки по активной ячейке и извлечь из нее информацию.

Допустим, что лист называется «Reestr», а необходимая информация расположена в десяти первых ячейках каждой строки:

Dim nomer As Long, massiv() As Variant

nomer = ActiveCell.Row

massiv = Range(Cells(nomer, 1), Cells(nomer, 10))

Если для отчета требуется информация из нескольких строк, можно выделить их вертикально по любому столбцу и использовать следующий код:

Dim nomer1 As Long, nomer2 As Long, massiv() As Variant

nomer1 = Selection.Cells(1).Row

nomer2 = Selection.Cells(Selection.Cells.Count).Row

massiv = Range(Cells(nomer1, 1), Cells(nomer2, 10))

В иных случаях, когда для отчета требуется большое количество строк, можно организовать автоматическое выделение диапазона, например, по интервалу дат.

Если требуется обработка данных для отчета, проводим ее в массиве. Для результатов обработки можно объявить еще одну переменную массива.

Создание и заполнение формы

После того как информация скопирована и обработана, создаем из шаблона печатную форму документа или отчета, лист которой после создания будет активным.

Заполняем ячейки печатной формы информацией из массива, обращаясь к листу с формой как к ActiveSheet. Если новый документ или отчет создан в той же книге, ее можно автоматически сохранить:

Чтобы не наблюдать за мерцаниями экрана во время выполнения процедуры VBA Excel, можно временно отключить его обновления:

Sub GeneratsiyaDokumenta()

Application.ScreenUpdating = False

операторы

Application.ScreenUpdating = True

End Sub

Удаление печатной формы

Если лист документа или отчета временно сохраняется в книгу с реестром или базой данных, можно предусмотреть его простое удаление без выведения дополнительного диалогового окна.

Для этого необходимо на лист шаблона правее печатной формы вставить кнопку из коллекции «Элементы управления ActiveX». Дважды кликнуть по ней и в открывшемся модуле листа внутрь автоматически сгенерированного объявления процедуры вставить строку Call UdaleniyeLista:

Sub CommandButton1_Click()

  Call UdaleniyeLista

End Sub

Затем в модуль текущей книги добавляем процедуру:

Sub UdaleniyeLista()

  Application.DisplayAlerts = False

    ActiveSheet.Delete

  Application.DisplayAlerts = True

End Sub

Кнопка вместе с шаблоном будет копироваться в новую печатную форму. При нажатии кнопки активный лист будет удаляться кодом VBA без предупреждения от Excel.

Like this post? Please share to your friends:
  • Скрипт excel в json
  • Скриншоты работы в word
  • Скриншот таблицы excel в word
  • Скриншот преобразовать в документ word
  • Скриншот в word онлайн