我正在尝试找出一种使用 VBA 打印“大型机”样式报告的方法。我试图用 Excel 打开文件,但要正确格式化和打印它却非常困难,我想知道是否有人有现有的代码或建议。
详细信息:我尝试打印的报告大约有 133 个字符宽;数据被格式化为固定宽度的列;页面由换页符(ASCII 代码 12)分隔。
我正在寻找一种方法来将此报告以横向模式发送到打印机,一页宽,每页有 133 个字符,并且在每个换页符处都有分页符。
如果有人除了使用 Excel 之外还有其他建议,我也愿意听取。
谢谢!Nick
答案1
如果您不需要格式化报告,Excel 将无法为您提供帮助。
我建议使用像 Notepad++ 这样的好用的文本编辑器
在编辑器中打开报告,转到页面设置并设置为横向。将边距调整到最小。您还需要调整缩放级别以使所有内容都适合。确保您已关闭任何“自动换行”功能并进行打印预览以查看内容是否适合。
您也可以在 Word 中根据需要执行此操作。按上述方法设置页面,将字体设置为相当小且间距固定的字体(例如 Lucida Console)。
如果您在尝试让文本适合时遇到困难。请安装一个打印到 PDF 实用程序(有几种免费的实用程序,我使用 Nitro PDF Creator 2。将页面大小设置为 A3 横向而不是 A4,打印到 PDF,然后将 PDF 打印到 A4 横向,它应该可以调整大小。当然,您可能需要放大镜!
答案2
抱歉,我最初的问题可能没有说清楚,我正在寻找一种以编程方式来做到这一点。
我发现的最佳解决方案是使用以下 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