Печать устаревшего / мэйнфреймового отчета в Excel / VBA

1140
Nick S

Я пытаюсь найти способ печати отчета в стиле "мэйнфрейма" с использованием VBA. Я пытаюсь открыть файл в Excel, но очень сложно заставить его правильно отформатировать и распечатать, и мне интересно, есть ли у кого-нибудь существующий код или предложения.

Детали: отчет, который я пытаюсь распечатать, имеет ширину около 133 символов; данные форматируются в столбцы фиксированной ширины; страницы разделены символами подачи формы (код ASCII 12).

То, что я ищу, - это способ отправки этого отчета на принтер в горизонтальном режиме, шириной в одну страницу со всеми 133 символами на каждой странице, с разрывами страниц на каждом канале формы.

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

Спасибо! Ник

1

2 ответа на вопрос

0
Julian Knight

Если вам не нужно форматировать отчет, Excel не поможет вам здесь.

Я бы предложил использовать достойный текстовый редактор, такой как Notepad ++

Откройте отчет в редакторе, перейдите на страницу настроек и установите альбомную ориентацию. Отрегулируйте поля до наименьшего значения. Вам также нужно будет отрегулировать уровень масштабирования, чтобы подогнать все по размеру. Убедитесь, что вы выключили ** любую * функцию «перенос слов» и выполните предварительный просмотр, чтобы увидеть, как все устроено.

Вы могли бы также к этому в Word в крайнем случае. Настройте страницу, как указано выше, установите шрифт с довольно небольшим фиксированным шагом (например, Lucida Console).

Если вы застряли, пытаясь привести текст в соответствие. Установите утилиту печати в PDF (есть несколько бесплатных, я использую Nitro PDF Creator 2. Установите размер страницы в формате A3 вместо A4, напечатайте в PDF и затем напечатайте PDF в A4, размер должен измениться ОК. Конечно, вам может понадобиться увеличительное стекло!

0
Nick S

Извините, я, возможно, не дал понять в своем первоначальном вопросе, что я ищу способ сделать это программно.

Лучшее решение, которое я нашел, было использовать следующий код VBA для управления Excel. Мне пришлось добавить символ канала в начале каждой строки, чтобы Excel не убирал пробелы в левом отступе (возможно, есть лучшее решение, но я не смог его выяснить).

Dim XL As New Excel.Application Dim WB As New Excel.Workbook Dim WS As New Excel.Worksheet  XL.Workbooks.OpenText myFile, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 2), Array(133, 9))  Set WB = XL.ActiveWorkbook  Set WS = WB.Worksheets(1)  WS.Columns("A:Z").Select  XL.Selection.Columns.AutoFit XL.Selection.Font.Size = 10 XL.Selection.RowHeight = 12.5  For r = 1 To WS.UsedRange.Rows.Count ' This adds the page breaks at the Form Feed characters If InStr(WS.Cells(r, 1), Chr(12)) Then WS.Cells(r, 1).Select XL.ActiveWindow.SelectedSheets.HPageBreaks.Add XL.ActiveCell End If Next r  With WS.PageSetup .Orientation = xlLandscape .LeftMargin = XL.InchesToPoints(1) .RightMargin = XL.InchesToPoints(0) .TopMargin = XL.InchesToPoints(0.5) .BottomMargin = XL.InchesToPoints(0) .Zoom = False .FitToPagesWide = 1 .FitToPagesTall = False End With  WB.PrintOut  WB.Close False XL.Quit Set XL = Nothing 

Похожие вопросы