Фиксированное количество строк на странице в Excel - PullRequest
0 голосов
/ 11 марта 2020

В настоящее время я создаю файл Excel, в котором есть отчетный лист. Этот лист заполняется данными скриптом VBA. Также я создал кнопку для экспорта отчета в PDF.

Все работает нормально, пока этот файл не открывается на другой P C с другим разрешением экрана. Высота строк и фактический размер шрифта изменяются, что приводит к беспорядку на страницах PDF, некоторые из них имеют половину таблиц и т. Д.

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

Я использую Excel для Office 365.

Спасибо!

Обновление. Вот сценарий, который я использую для генерации PDF

Public Sub SaveResultsToPDF()
    Dim wsA As Worksheet
    Dim wbA As Workbook
    Dim strTime As String
    Dim strName As String
    Dim strPath As String
    Dim strFile As String
    Dim strPathFile As String
    Dim myFile As Variant
    On Error GoTo errHandler

    Set wbA = ActiveWorkbook
    Set wsA = ActiveSheet
    strTime = Format(Now(), "yyyymmdd")

    'get active workbook folder, if saved
    strPath = wbA.Path
    If strPath = "" Then
        strPath = Application.DefaultFilePath
    End If
    strPath = strPath & "\"

    'replace spaces and periods in sheet name
    strName = Replace(wsA.Name, " ", "")
    strName = Replace(strName, ".", "_")

    'create default name for savng file
    strFile = strName & "_" & strTime & ".pdf"
    strPathFile = strPath & strFile

    'user can enter name and select folder for file
    myFile = Application.GetSaveAsFilename _
        (InitialFileName:=strPathFile, _
            FileFilter:="PDF Files (*.pdf), *.pdf", _
            Title:="Select Folder and FileName to save")

    Dim bottom As Integer: bottom = FindEndOfPrintArea + 30

    With wsA.PageSetup
        .printArea = "A1:R" & bottom
        .Orientation = xlPortrait
        .LeftMargin = 42
        .RightMargin = 42
        .TopMargin = 42
        .BottomMargin = 42
    End With

    'export to PDF if a folder was selected
    If myFile <> "False" Then
        wsA.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=myFile, _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, _
            OpenAfterPublish:=True
    End If

exitHandler:
    Exit Sub
errHandler:
    MsgBox "Could not create PDF file"
    Resume exitHandler
End Sub

1 Ответ

0 голосов
/ 15 марта 2020

Я реализовал решение на основе динамически рассчитанного коэффициента масштабирования. Имейте в виду, что здесь у нас есть два разных DPI: screen и print (pdf). Как только Windows DPI изменяет масштабирование экрана DPI, разрешение печати остается неизменным.

Здесь появляется код:

Function CalculateZoomFactor() As Long
Dim aWS As Worksheet
Set aWS = Sheets(2)

Dim pane
Set pane = Application.ActiveWindow.ActivePane

'Original settings on which page setup was configured
Dim originalPointsH As Long: originalPointsH = 30
Dim originalH As Long: originalH = 40 ' 40px original results row height
Dim originalPdfDPI As Long: originalPdfDPI = 600
Dim originalScreenDPI As Long

'Current settings which may influent on pagesetup
Dim currentH As Long
Dim currentPdfDPI As Long: currentPdfDPI = aWS.PageSetup.PrintQuality(1)  ' default PDF printer DPI
Dim currentScreenDPI As Long

currentH = pane.PointsToScreenPixelsY(aWS.Range("A2").Height) - pane.PointsToScreenPixelsY(0)

currentScreenDPI = currentH / (originalPointsH / Application.InchesToPoints(1))
originalScreenDPI = originalH / (originalPointsH / Application.InchesToPoints(1))

CalculateZoomFactor = originalPdfDPI * 100 / (currentPdfDPI - originalScreenDPI + currentScreenDPI)

Функция завершения

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