Imprimindo um relatório legado / mainframe no Excel / VBA

1

Estou tentando descobrir uma maneira de imprimir um relatório de estilo "mainframe" usando o VBA. Eu estou tentando abrir o arquivo com o Excel, mas está sendo muito problemático obtê-lo para formatar e imprimir corretamente e eu estou querendo saber se alguém tem algum código existente ou sugestões.

Detalhes: o relatório que estou tentando imprimir tem aproximadamente 133 caracteres de largura. os dados são formatados em colunas de largura fixa; as páginas são separadas por caracteres de feed de formulário (código ASCII 12).

O que estou procurando é uma forma de enviar esse relatório para uma impressora, no modo paisagem, com uma página inteira com todos os 133 caracteres em cada página, com quebras de página em cada Alimentação de formulário.

Se alguém tiver sugestões além de usar o Excel, estou aberto a ouvi-las também.

Obrigado!     Nick

    
por Nick S 21.06.2012 / 14:40

2 respostas

0

Se você não precisar formatar o relatório, o Excel não o ajudará aqui.

Eu sugeriria usar um editor de texto decente, como o Notepad ++

Abra o relatório no editor, acesse as configurações da página e defina como paisagem. Ajuste as margens para o menor que eles irão. Você também precisará ajustar o nível de zoom para ajustar tudo. Certifique-se de ter desativado o recurso "quebra de linha" e faça uma pré-visualização para ver como as coisas se encaixam.

Você também pode fazer isso no Word em um piscar de olhos. Definir a página como acima, defina a fonte para algo bastante pequeno e pitch fixo (por exemplo, Lucida Console).

Se você ficar preso tentando ajustar o texto. Instale um utilitário de impressão em PDF (há vários gratuitos, uso o Nitro PDF Creator 2. Defina o tamanho da página como A3 paisagem em vez de A4, imprima em PDF e imprima o PDF em A4 paisagem, ele deve redimensionar OK. Claro, você pode precisar de uma lupa!

    
por 22.06.2012 / 12:15
0

Desculpe, posso não ter deixado claro na minha pergunta original que estou procurando uma maneira de fazer isso de forma programática.

A melhor solução que encontrei foi usar o seguinte código VBA para direcionar o Excel. Eu tive que adicionar um caractere de pipe no início de cada linha para que o Excel não retirasse os espaços de preenchimento à esquerda (provavelmente há uma solução melhor, mas não consegui descobrir).

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
    
por 22.06.2012 / 15:57